Catalyst::Model::XML::Feedをプロキシ対応に

これ使ってるアプリケーションを学校でデモすることになった。だけど、学校ネットワークはプロキシ刺さないと外にでれないので、http_proxyを見てくれるようにした。あとXML::FeedはXML::RSS::LibXML使うように。

プロキシ刺すのにURI::Fetch調べたんだけど、自分で作ったUserAgentも渡せるんだねー。

以下diff。

--- ./Feed_old.pm	2006-09-03 19:08:48.000000000 +0900
+++ ./Feed.pm	2006-10-02 17:31:09.000000000 +0900
@@ -5,10 +5,15 @@
 
 use base qw(Catalyst::Model Class::Accessor);
 use Carp;
-use XML::Feed;
 use NEXT;
 use URI;
+use URI::Fetch;
+use LWP::UserAgent;
 use Catalyst::Model::XML::Feed::Item;
+use XML::Feed;
+use XML::Feed::RSS;
+$XML::Feed::RSS::PREFERRED_PARSER = "XML::RSS::LibXML";
+
 
 __PACKAGE__->mk_accessors(qw|ttl feeds|);
 
@@ -161,14 +166,20 @@
 
     my $name;
     my $uri;
+    my $ua = LWP::UserAgent->new;
+       $ua->env_proxy;
     
     if($arg2){
 	# get only one feed
 	$name = $arg1;
 	$uri  = URI->new($arg2);
+    my $res = URI::Fetch->fetch($uri, UserAgent => $ua)
+        or croak "can't load $uri";
+    my $content = $res->content;
+       
 	my $feed;
 	eval {
-	    $feed = XML::Feed->parse($uri);
+	    $feed = XML::Feed->parse(\$content);
 	};
 	if($@){
 	    my @feeds = XML::Feed->find_feeds($arg2);
@@ -202,7 +213,15 @@
     my $self = shift;
     my $uri  = shift;
     my $name = shift;
-    my $feed = XML::Feed->parse($uri);
+
+    my $ua = LWP::UserAgent->new;
+       $ua->env_proxy;
+
+    my $res = URI::Fetch->fetch($uri, UserAgent => $ua)
+        or croak "can't load $uri";
+    my $content = $res->content;
+
+    my $feed = XML::Feed->parse(\$content);
     $feed->title($name) if $name;
     my $obj  = Catalyst::Model::XML::Feed::Item->new($feed, $uri);    
     $name ||= $uri;