--- lib/Grep/Action/AddFeed.pm 2007/02/23 09:54:28 72 +++ lib/Grep/Action/AddFeed.pm 2007/02/23 11:48:39 73 @@ -83,41 +83,60 @@ return $self->result->error( $r->status_line . " from $uri" ) unless ( $r->is_success ); - if ($r->header('Content-type') =~ /xml/) { - $self->result->message( "Assuming $uri is feed and using it" ); + my $ct = $r->header('Content-type') or warn "can't get Content-type"; + my $content = $r->content; + + Jifty->log->debug("got ", length( $content ), " bytes $ct"); + + if ( $ct =~ /xml/ ) { + $self->result->message( "Assuming $uri is feed from $ct" ); return $self->SUPER::take_action( @ARGS ); } - my @feeds = Feed::Find->find_in_html( $r->content ); + my @feeds = Feed::Find->find_in_html( \$content ); if (@feeds) { Jifty->log->info("found possible feeds: ", dump( @feeds )); - @feeds = map { + my @search_feeds = map { my $t = $_; $t =~ s/\b$search_moniker\b/%s/; $t } grep(/\b$search_moniker\b/,@feeds); - my $feed_uri = shift @feeds; + if ( my $feed_uri = shift @search_feeds ) { + + $self->result->message('Found ' . @feeds . " feeds, using first: $feed_uri" ); + $self->argument_value('uri', $feed_uri); + + Jifty->log->debug("calling parent take_action with new uri $feed_uri"); + + return $self->SUPER::take_action( @ARGS ); - return $self->result->error("Can't find any feed at $uri") unless ( $feed_uri ); + } else { + Jifty->log->debug("found feeds ", dump( @feeds ), " but none of them has search moniker!"); + } + } + + Jifty->log->debug("no feeds found, trying content_class detection"); + + my $source = Grep::Source->new(); - $self->result->message('Found ' . @feeds . " feeds, using first: $feed_uri" ); - $self->argument_value('uri', $feed_uri); + if ( my $class = $source->content_class( $content ) ) { - Jifty->log->debug("calling parent take_action with new uri $feed_uri"); + Jifty->log->debug("$class registred for feed $uri"); + $self->argument_value('source', $source); + $self->result->message("Found $class scraper for $uri" ); return $self->SUPER::take_action( @ARGS ); } else { - warn "no feeds in ", $r->content; - $self->result->error('No feeds found on supplied URI'); return 0; + } }