1 |
dpavlin |
72 |
# Dobrica Pavlinusic, <dpavlin@rot13.org> 02/22/07 19:42:14 CET |
2 |
|
|
|
3 |
|
|
use strict; |
4 |
|
|
use warnings; |
5 |
|
|
|
6 |
|
|
package Grep::Source::Feed; |
7 |
|
|
|
8 |
|
|
use Data::Dump qw/dump/; |
9 |
|
|
|
10 |
|
|
=head2 fetch |
11 |
|
|
|
12 |
|
|
Grep::Source::Feed->fetch( $source ); |
13 |
|
|
|
14 |
|
|
=cut |
15 |
|
|
|
16 |
|
|
sub fetch { |
17 |
|
|
my $self = shift; |
18 |
|
|
|
19 |
|
|
my $parent = shift; |
20 |
|
|
my ($feed,$uri) = ($parent->feed, $parent->uri); |
21 |
|
|
die "no uri" unless ($uri); |
22 |
|
|
die "feed is not a Grep::Model::Feed but ", ref $feed unless $feed->isa('Grep::Model::Feed'); |
23 |
|
|
|
24 |
|
|
my $ua = LWP::UserAgent->new; |
25 |
|
|
$ua->default_header( 'Cookie' => $feed->cookie ); |
26 |
|
|
my $r = $ua->get( $uri ); |
27 |
|
|
die $feed->title . " returned " . $r->status_line . " for $uri\n" unless ( $r->is_success ); |
28 |
|
|
my $content = $r->content; |
29 |
|
|
|
30 |
dpavlin |
86 |
$parent->save('feed.xml'); |
31 |
|
|
|
32 |
dpavlin |
72 |
die "No content returned from $uri\n" unless length( $content ) > 1; |
33 |
|
|
|
34 |
|
|
my $xml_feed = XML::Feed->parse( \$content ) |
35 |
|
|
or die $feed->title, " returned ", XML::Feed->errstr, "\n"; |
36 |
|
|
|
37 |
|
|
warn "getting entries from ", $xml_feed->title, "\n"; |
38 |
|
|
|
39 |
|
|
for my $entry ($xml_feed->entries) { |
40 |
|
|
|
41 |
|
|
$parent->add_record( |
42 |
|
|
in_feed => $feed, |
43 |
|
|
title => $entry->title, |
44 |
|
|
link => $entry->link, |
45 |
|
|
content => $entry->content->body, |
46 |
|
|
summary => $entry->summary->body, |
47 |
|
|
category => $entry->category, |
48 |
|
|
author => $entry->author, |
49 |
|
|
issued => $entry->issued ? $entry->issued->strftime("%Y-%m-%d %H:%M:%S") : undef, |
50 |
|
|
modified => $entry->modified ? $entry->modified->strftime("%Y-%m-%d %H:%M:%S") : undef, |
51 |
|
|
); |
52 |
|
|
|
53 |
|
|
} |
54 |
|
|
|
55 |
|
|
} |
56 |
|
|
|
57 |
|
|
1; |