Kentaro Kuribayashi's blog

Software Engineering, Management, Books, and Daily Journal.

Rimoのチャンネル追加APIについて

RimoChでは、チャンネル情報を登録する際に、RimoCh上に情報を登録すると同時に、サーバ側でRimoにアクセスして、Rimo上でも同じソース(URL)に基づくチャンネルを作成しています。Rimoにはチャンネルを作成するAPI(?)があり、実際、Rimo上でチャンネルを作成する際に利用されているので、RimoChもそのAPIを利用してたりします。

URL http://rimo.tv/channel/xml
Method GET/POST
Parameter url(チャンネルソースとなるページのURL)
Returns XML(ソースURLに含まれるYouTubeビデオ一覧)

urlパラメタにチャンネルのソースとなるページのURLをわたしてアクセスすると、チャンネルがまだRimo上に存在しない場合は新たに作成します。また、チャンネルが既に存在しても、存在しなくても、ソースのURLに含まれるビデオの一覧を含むXMLを返します。つまり、チャンネル作成のみならず、あるURLに含まれるYouTubeのビデオ情報一覧を返却してくれるものでもあります。
サンプル: http://rimo.tv/channel/xml?url=http://b.hatena.ne.jp/video

<videos title="はてなブックマーク - 注目の動画">
    <video title="外山恒一の憂鬱" youtube_id="4oXDIHw-xQo" thumbnail_url="http://sjl-static10.sjl.youtube.com/vi/4oXDIHw-xQo/2.jpg" length_seconds="26" video_id="28301"/>
    <video title="川澄綾子 おなら体操" youtube_id="xFlfemYA0TM" thumbnail_url="http://img.youtube.com/vi/xFlfemYA0TM/2.jpg" length_seconds="31" video_id="27289"/>
    <video title="鴨志田穣" youtube_id="KvV0lxem9mY" thumbnail_url="http://sjc-static13.sjc.youtube.com/vi/KvV0lxem9mY/2.jpg" length_seconds="365" video_id="28302"/>
    ...
</videos>

RimoChでは、下記の通り、ざっくりとモジュールを作って、チャンネル作成をしてたりします。

package WebService::Rimo::Channel;

use strict;
use warnings;

use Carp;
use XML::Simple;
use LWP::UserAgent;

use base qw(Class::Accessor::Fast);

our $VERSION = '0.02';

__PACKAGE__->mk_accessors(qw(videos ua));

sub new {
    my $class = shift;
    bless {
        ua => LWP::UserAgent->new(agent => __PACKAGE__."/$VERSION"),
    }, $class;
}

sub create {
    my ($self, $source_url) = @_;
    my $res = $self->ua->get("http://rimo.tv/channel/xml?url=$source_url");

    croak sprintf "%d: %s", $res->code, $res->message
        if $res->is_error;

    my $xml = XMLin($res->content, ForceArray => 1);

    croak "No video found in $source_url"
        unless $xml->{video};

    $self->videos($xml->{video});
}

1;