Changeset 211
- Timestamp:
- 07/29/06 19:28:04 (2 years ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
plagger/trunk/lib/Plagger/Plugin/CustomFeed/YouTube.pm
r109 r211 6 6 use Plagger::Enclosure; 7 7 use Plagger::UserAgent; 8 use XML::Simple;9 8 10 9 sub register { … … 26 25 my($self, $context, $args) = @_; 27 26 28 my $type = $self->conf->{feed_type};29 $self->$type($context, $args);30 31 }32 33 sub search {34 my($self, $context, $args) = @_;35 36 27 my $q = $self->conf->{query}; 37 28 $q =~ s/\s/\+/g; … … 39 30 my $file = $self->cache->path_to('youtube_search_result.html'); 40 31 41 $context->log( info => 'Getting YouTube search results.' ); 32 $context->log( info => 'Getting YouTube search results for ' . $self->conf->{query} ); 33 42 34 my $ua = Plagger::UserAgent->new; 43 35 … … 62 54 while (<$fh>) { 63 55 # get title 64 m!<div class=" title">!56 m!<div class="vtitle">! 65 57 and $title_flag = 1; 66 58 m!<a href="/watch\?v=([^&]+)&search=[^>]+">(.+)</a>! … … 72 64 } 73 65 }; 74 m!<img src="(http:// static\d+.youtube.com/[^">]+/1.jpg)" class="vimgSm" />!66 m!<img src="(http://[\w-]*static\d+(.[\w-]+)?\.youtube.com/[^">]+/1.jpg)" class="vimg90" />! 75 67 and $data->{image}->{url} = $1; 76 m!<div class=" desc">(.*)</div>!68 m!<div class="vdesc">(.*)</div>! 77 69 and $data->{description} = $1; 78 m!< td><span class="grayText">Tags:</span></td>!70 m!<div class="vtagLabel">Tags:</div>! 79 71 and $tag_flag = 1; 80 m!(< td><a href="/results\?search=.*)!72 m!(<a href="/results\?search=.*)! 81 73 and do { 82 74 if($tag_flag){ … … 107 99 108 100 # enclosure 109 my $res = $ua->fetch($entry->link); 110 if($res->is_error){ 111 $context->log( error => $res->status_line ); 112 return; 113 } 114 if($res->content =~ /&t=([^&]+)/gms){ 101 my $video_url = $self->cache->get_callback( 102 "item-" . $entry->link, sub { 103 my $res = $ua->fetch($entry->link); 104 if ($res->is_error){ 105 $context->log( error => $res->status_line ); 106 return; 107 } 108 my $url; 109 if ($res->content =~ /&t=([^&]+)/gms){ 110 $url = 'http://youtube.com/get_video?video_id=' . $data->{id} . "&t=$1"; 111 } 112 return $url; 113 }, 114 '24 hours', 115 ); 116 117 if ($video_url) { 118 my $video_id = ( $video_url =~ /video_id=(\w+)/ )[0]; 119 115 120 my $enclosure = Plagger::Enclosure->new; 116 $enclosure->url('http://youtube.com/get_video?video_id=' . $data->{id} . "&t=$1"); 117 $enclosure->type('application/x-shockwave-flash'); 121 $enclosure->url( URI->new($video_url) ); 122 $enclosure->type('video/x-flv'); 123 $enclosure->filename("$video_id.flv"); 118 124 $entry->add_enclosure($enclosure); 119 125 } … … 125 131 } 126 132 127 $context->update->add($feed);128 }129 130 sub tag {131 my($self, $context, $args) = @_;132 133 my $q = $self->conf->{query};134 135 $context->log( info => "Getting http://youtube.com/rss/tag/$q.rss" );136 my $ua = Plagger::UserAgent->new;137 my $res = $ua->fetch("http://youtube.com/rss/tag/$q.rss");138 if($res->is_error){139 $context->log( error => $res->status_line );140 return;141 }142 143 my $rss = XMLin( $res->content );144 145 my $feed = Plagger::Feed->new;146 $feed->type('youtubetagrss');147 $feed->title($rss->{channel}->{title});148 $feed->description($rss->{channel}->{description});149 $feed->link($rss->{channel}->{link});150 151 foreach my $item (@{$rss->{channel}->{item}}) {152 my $entry = Plagger::Entry->new;153 $entry->title($item->{title});154 $entry->body($item->{description});155 $entry->id($item->{guid});156 $entry->link($item->{link});157 $entry->date( Plagger::Date->parse('Mail', $item->{pubDate}) );158 159 $entry->icon({160 url => $item->{'media:thumbnail'}->{url},161 width => $item->{'media:thumbnail'}->{width},162 height => $item->{'media:thumbnail'}->{height},163 });164 165 my $enclosure = Plagger::Enclosure->new;166 $enclosure->url($item->{enclosure}->{url});167 $enclosure->type($item->{enclosure}->{type});168 $entry->add_enclosure($enclosure);169 170 $feed->add_entry($entry);171 }172 133 $context->update->add($feed); 173 134 } … … 184 145 - module: CustomFeed::YouTube 185 146 config: 186 feed_type: search|tag 187 query: keyword|tag 147 query: Twenty Four 188 148 sort: video_date_uploaded 189 149 page: 5 … … 197 157 =over 4 198 158 199 =item feed_type200 201 'search' fetches the the result of YouTube search.'tag' fetches the rss of a specified tag.202 203 159 =item query 204 160 205 Specify search quer ies or rss tag name.161 Specify search query. 206 162 207 163 =item sort 208 164 209 Set sort condition. Available condisions are below.Default is video_date_uploaded.165 Set sort condition. Available condisions are below. Default is video_date_uploaded. 210 166 211 relevance212 video_date_uploaded213 title_sort214 video_view_count215 rating_sort167 relevance 168 video_date_uploaded 169 title_sort 170 n video_view_count 171 rating_sort 216 172 217 173 =item page 218 174 219 Number of pages of search result you get.(Valid when feed_typs is search.) 220 Default is 1. 175 Number of pages of search result you get. Default is 1. 221 176 222 177 =back
