Filter::YouTube

cl.pocari.org - YouTube でタグによる RSS フィードを取得するには YouTube から直接 RSS が取れるのか。
で、実際にPlaggerで取ってみたら entry->icon がなくて悲しかったので Filter を。

[追記] Rev.849 で Aggregator::Simple が Media RSS から thumbnail を取ってこられるようになったので、以下の Filter::YouTube は不要になりました。

package Plagger::Plugin::Filter::YouTube;
use strict;
use warnings;
use base qw( Plagger::Plugin );

our $VERSION = 0.01;

sub register {
    my($self, $context) = @_;
    $context->register_hook(
        $self,
        'update.entry.fixup' => \&filter,
    );
}

sub filter {
    my($self, $context, $args) = @_;
    my $entry = $args->{entry};
    my $icon = {};
    if( $entry->body =~ m!(<img.*?>)! ){
        my $img  = $1;
        if( $img =~ m!src="(http://[\w-]*static\d+(.[\w-]+)?\.youtube.com/[^">]+/[12].jpg)"! ){
            $icon->{url} = $1;
        }
        $icon->{width}  = $1 if $img =~ m!width="(\d+)"!;
        $icon->{height} = $1 if $img =~ m!height="(\d+)"!;
    }
    if( $entry->body =~ m!<p>(.*?)</p>!xms ){
        my $title = $1;
        $title =~ tr/\r\n\t//d;
        $icon->{title} = $title;
    }
    if( $entry->body =~ m!<a href="(.*?)"! ){
        $icon->{link} = $1;
    }
    $entry->icon( $icon );
}

1;

CustomFeed::YouTube よりも手っ取り早い?

  - module: Subscription::Config
    config:
      feed:
        - url: http://www.youtube.com/rss/tag/monkey.rss

  - module: Filter::YouTube

entry->icon->link の URL が、author の URL になってるのが微妙かも。


ついでに、Hatena-TubeをPlaggerで - 酒日記 はてな支店 の video.tmpl もアップデートしておく。
enclosure の URL で youtube.com/v/***** の形式もサポート。

[% FOREACH e = entries %]
  [% FOREACH enc = e.enclosures %]
    [% JAVASCRIPT %]
       var url = stash.get('enc').url;
       var vId;
       if(url.match(/video_id=/)){
           vId = stash.get('enc').url.match(/video_id=([^&]+)/)[1];
       } else if(url.match("/v/")){
           vId = stash.get('enc').url.match("/v/(.*)")[1];
           vId = vId.replace('\.swf', '');
       }
       stash.set('vId', vId);
       stash.set('vTitle', stash.get('e').title.replace("'", "\\'"));
    [% END %]
    <div class="video">
      <div class="video_thumbnail" style="background-image: url([% e.icon.url %]);">
        <div class="video_foreground">
          <a class="link_thumbnail" href="javascript:(TB_clicked('[% vTitle %]','[% vId %]'))" title="[% e.title %]">
          </a>
        </div>
      </div>
      <h3><a class="thickbox" href="javascript:(TB_clicked('[% vTitle %]','[% vId %]'))" title="[% e.title  %]">
          [% e.title %]
      </a></h3>
    </div>
  [% END %]
[% END %]