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;