« CHEEBOWのしおり(2006-04-02) | メイン | CHEEBOWのしおり(2006-04-03) »

2006年4月 3日

Plagger::Plugin::CustomFeed::NetLadio

ヒビノアワ: YAPC::Asia 2006に行って来ました」で書いた、ホテルでハックしてたPlagger用のプラグインが、なんとかまとまったので、公開してみようと思います(Plagger0.6.0対応)。

Plagger::Plugin::CustomFeed::NetLadio

livedoor ネットラジオ / ねとらじから、現在放送中の番組表を取得するプラグインになります。
番組表の中から、例えば、最近放送が始まったものから5件分とか、リスナー数の多いものから10件分みたいな取得の仕方が出来ます。

この辺は、例によってyamlに書くわけですが、「最近放送が始まったものから5件分」なら

  - module: CustomFeed::NetLadio
    config:
      limit: 5
      sort: tims
      order: desc

って書けばいいし、「リスナー数の多いものから10件」なら

  - module: CustomFeed::NetLadio
    config:
      limit: 10
      sort: cln
      order: desc

って書けばよいです。sortに指定できるのは

  • URL :放送ツールで指定されるURL欄
  • GNL :放送ツールで指定されるジャンル欄
  • NAM :放送ツールで指定されるタイトル欄
  • TIT :放送ツールが送信する現在の曲名情報
  • MNT :マウントポイント
  • TIM :Unix epochでの放送開始時間
  • TIMS : yy/mm/dd hh:mm:ss 表記での放送開始時間
  • CLN :現リスナ数
  • CLNS :Icecast1.3系が出力する延べリスナ数
  • SRV :配信サーバホスト名
  • PRT :配信サーバポート番号
  • BIT :ビットレート

livedoorねとらじ ナレッジベース:ヘッドライン取得ツールへの情報提供についてより

になりますが、リスナ数とか、放送開始時間くらいしか使い道はなさそうな予感……。
limitを0にすると全件取得になります。orderはascで昇順、descで降順にソートします。

出来上がったフィードには、タイトルとして番組名、linkは放送しているストリーミングのURL、authorは放送者名ってのは分からないので、マウントポイントの頭から / をのぞいたのものにしてます。
本文は、

ジャンル名
Broadcasting URL: http://203.131.199.131:8080/hoge
Relation URL: http://jbbs.livedoor.jp/music/00000/
Listeners: 18
Total listeners: 19
Bit rate: 24

みたいな感じにしてます。

これを元にして、ストリーミングをFetchすれば自動録音も出来ちゃったりするかもって気もします。

良かったらお試しくださいませー。


追記:
NetLadioはNetRadioのスペルミスじゃない? というメールを頂いたのですが、

5.ladioという表記に関して

ねとらじは2004年7月にlivedoorに営業譲渡を行いましたが、以前は個人で運営されておりその頃はladio.netというドメインで運営されていました。
これは単純にradio.netというドメインがとれなかった事に端を発しているのですが、今ではねとらじという一般のラジオとはひと味もふた味も違う放送の場の微妙なニュアンスを象徴しているのではないかと考えています。
個人運営の頃の歴史を引き継ぐ意味も込めて、現在もladio.livedoor.comというドメインで運用させて頂いております。

ということで、正しい表記なのです。紛らわしいですけども(笑)
ねとらじリスペクトということで、僕のプラグインもこの名前をつけることにしました。

Perlはあんまし得意じゃないなぁ、とか苦手意識があったんですが、それじゃいかんと勉強のつもりで書いてみました。
なので、コードとか結構変だったりするのかも。ううむ。
特に、

    my $sort = lc($self->conf->{sort}) || 'tims';
    my $order = lc($self->conf->{order}) || 'desc';
    my @items;
    if ($sort eq 'tim' ||
        $sort eq 'cln' ||
        $sort eq 'clns' ||
        $sort eq 'prt' ||
        $sort eq 'bit') {
        @items = sort { $a->{$sort} <=> $b->{$sort} }  @{$data->{source}};
    } else {
        @items = sort { $a->{$sort} cmp $b->{$sort} }  @{$data->{source}};
    }
    @items = reverse @items if $order eq 'desc';

このあたり、各項目ごとにソートの方法を変える部分が、もうちょい何とかなるんじゃないかと思ったり。

あと、ねとらじ側で用意しているメタデータのXMLがS-JISなのでXML::Simpleでそのまま使えないので、

    my $xml = $res->content;
    from_to($xml, 'shiftjis', 'utf8');
    $xml =~ s/shift\-jis/utf-8/;

こんな変換をしてみたんだけど、これも、もう少しうまいやりかたがあるような気もするし。

それから、初めてPODってのを書いてみたのだけど、その記述方法云々の前に、そもそも英語がおかしくないか? それが心配。日本語の文章をexcite翻訳かけて、ちょっと修正しただけなので……。

というわけで、アドバイスなんかもいただけると嬉しかったりします。

投稿者 CHEEBOW : 2006年4月 3日 11:04 このエントリーを含むはてなブックマーク

[ Perl ]
【お知らせ】音楽に関することはこちらのブログで書いています。くじら音楽部::BLOG