Changeset 442

Show
Ignore:
Timestamp:
04/01/06 01:23:33
Author:
ko
Message:

support of Auto-Discovery in Xango.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/plagger/lib/Plagger/Plugin/Aggregator/Xango.pm

    r437 r442  
    55 
    66package Plagger::Plugin::Aggregator::Xango; 
     7#sub Xango::DEBUG { 1 }; 
    78use strict; 
    89use base qw( Plagger::Plugin::Aggregator::Simple ); 
     
    2627            $self->conf->{use_cache} : 1, 
    2728        BrokerAlias => $xango_args{Alias}, 
     29        MaxRedirect => $self->conf->{max_redirect} || 3, 
    2830    ); 
    2931    Xango::Broker::Push->spawn(%xango_args); 
     
    4042    my $url = $args->{feed}->url; 
    4143    $context->log(info => "Fetch $url"); 
    42     POE::Kernel->post($self->{xango_alias}, 'enqueue_job', Xango::Job->new(uri => URI->new($url))); 
     44    POE::Kernel->post($self->{xango_alias}, 'enqueue_job', Xango::Job->new(uri => URI->new($url), redirect => 0)); 
    4345} 
    4446 
     
    6466            PLUGIN => $args{Plugin}, USE_CACHE => $args{UseCache}, 
    6567            BROKER_ALIAS => $args{BrokerAlias}, 
     68            MaxRedirect => $args{MaxRedirect}, 
    6669        }, 
    6770        package_states => [ 
     
    9396    my $plugin = $_[HEAP]->{PLUGIN}; 
    9497 
     98    my $redirect = $job->notes('redirect') + 1; 
     99    return if $redirect > $_[HEAP]->{MaxRedirect}; 
     100 
    95101    my $r = $job->notes('http_response'); 
    96102    my $url    = $job->uri; 
     103    if ($r->code =~ /^30[12]$/) { 
     104        $_[KERNEL]->post($_[HEAP]->{BROKER_ALIAS}, 'enqueue_job', Xango::Job->new(uri => URI->new($r->header('location')), redirect => $redirect)); 
     105    } else { 
     106        return unless $r->is_success; 
    97107 
    98     return unless $r->is_success; 
    99  
    100     my $ct = $r->content_type; 
    101     if ( $Feed::Find::IsFeed{$ct} ) { 
    102         $plugin->handle_feed($url, $r->content_ref); 
    103     } else { 
    104         my @feeds = Feed::Find->find_in_html($r->content_ref, $url); 
    105         if (@feeds) { 
    106             $url = $feeds[0]; 
    107             # xxx infinite loop 
    108             $_[KERNEL]->post($_[HEAP]->{BROKER_ALIAS}, 'enqueue_job', Xango::Job->new(uri => URI->new($url))); 
     108        my $ct = $r->content_type; 
     109        if ( $Feed::Find::IsFeed{$ct} ) { 
     110            $plugin->handle_feed($url, $r->content_ref); 
    109111        } else { 
    110             return; 
     112            my @feeds = Feed::Find->find_in_html($r->content_ref, $url); 
     113            if (@feeds) { 
     114                $url = $feeds[0]; 
     115                $_[KERNEL]->post($_[HEAP]->{BROKER_ALIAS}, 'enqueue_job', Xango::Job->new(uri => URI->new($url), redirect => $redirect)); 
     116            } else { 
     117                return; 
     118            } 
    111119        } 
    112120    }