/[Grep]/lib/Grep/Action/AddFeed.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /lib/Grep/Action/AddFeed.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 26 by dpavlin, Mon Feb 19 10:58:27 2007 UTC revision 86 by dpavlin, Fri Feb 23 21:16:44 2007 UTC
# Line 12  use base qw/Grep::Action::CreateFeed/; Line 12  use base qw/Grep::Action::CreateFeed/;
12    
13  use Feed::Find;  use Feed::Find;
14  use LWP::UserAgent;  use LWP::UserAgent;
15    
16  use Data::Dump qw/dump/;  use Data::Dump qw/dump/;
17    
18  =head2 canonicalize_uri  =head2 canonicalize_uri
# Line 79  sub take_action { Line 80  sub take_action {
80    
81          Jifty->log->debug("trying to find feed on $uri");          Jifty->log->debug("trying to find feed on $uri");
82    
83          my @feeds = Feed::Find->find( sprintf( $uri, $search_moniker ), $ua );          my $r = $ua->get( sprintf( $uri, $search_moniker ) );
84    
85            return $self->result->error( $r->status_line . " from $uri" ) unless ( $r->is_success );
86    
87            my $ct = $r->header('Content-type') or warn "can't get Content-type";
88            my $content = $r->content;
89    
90            Jifty->log->debug("got ", length( $content ), " bytes $ct");
91    
92            if ( $ct =~ /xml/ ) {
93                    Grep::Source->save( 'addfeed.xml', $content );
94                    $self->result->message( "Assuming $uri is feed from $ct" );
95                    return $self->SUPER::take_action( @ARGS );
96            }
97    
98            Grep::Source->save( 'addfeed.html', $content );
99    
100            my $base_uri = $uri;
101            $base_uri =~ s!/[^/]+$!!;
102    
103            my @feeds = Feed::Find->find_in_html( \$content, $base_uri );
104    
105          if (@feeds) {          if (@feeds) {
106    
107                  Jifty->log->info("found possible feeds: ", dump( @feeds ));                  Jifty->log->info("found possible feeds: ", dump( @feeds ));
108    
109                  @feeds = map {                  my @search_feeds = map {
110                          my $t = $_;                          my $t = $_;
111                          $t =~ s/\b$search_moniker\b/%s/;                          $t =~ s/\b$search_moniker\b/%s/;
112                          $t                          $t
113                  } grep(/\b$search_moniker\b/,@feeds);                  } grep(/\b$search_moniker\b/,@feeds);
114    
                 $self->result->message('Found ' . @feeds . ' feeds, using first one. ' . join(" ", @feeds) );  
115    
116                  $uri = shift @feeds;                  if ( my $feed_uri = shift @search_feeds ) {
117    
118                  $self->argument_value('uri', $uri);                          $self->result->message('Found ' . @feeds . " feeds, using first: $feed_uri" );
119                            $self->argument_value('uri', $feed_uri);
120    
121                  Jifty->log->debug("calling parent take_action with new uri $uri");                          Jifty->log->debug("calling parent take_action with new uri $feed_uri");
122    
123                  $self->SUPER::take_action( @ARGS );                          return $self->SUPER::take_action( @ARGS );
124    
125                  return 1;                  } else {
126                            Jifty->log->debug("found feeds ", dump( @feeds ), " but none of them has search moniker!");
127                    }
128            }
129    
130          } else {          Jifty->log->debug("no feeds found, trying content_class detection");
131    
132            my $source = Grep::Source->new();
133    
134            if ( my $class = $source->content_class( $content ) ) {
135    
136                  my $r = $ua->get( sprintf( $uri, $search_moniker ) );                  Jifty->log->debug("$class registred for feed $uri");
137                  warn "no feeds in ", $r->content;  
138                    $self->argument_value('source', "$class" );
139                    $self->result->message("Found $class scraper for $uri" );
140                    return $self->SUPER::take_action( @ARGS );
141    
142            } else {
143    
144                  $self->result->error('No feeds found on supplied URI');                  $self->result->error('No feeds found on supplied URI');
145                  return 0;                  return 0;
146    
147          }          }
148    
149  }  }

Legend:
Removed from v.26  
changed lines
  Added in v.86

  ViewVC Help
Powered by ViewVC 1.1.26