ウェブサービスを作っています。

JS でネットラジオもどきを作った

J-WAVE TOKIO HOT 100 のランキングから JavaScriptYouTube の動画を検索してランダムに再生する「jsRadio」を作りました。



jsRadio


IE6 と Mac・Windows の Firefox2, Safari3, Opera9 で動作確認しています。
週に 1 回 cron で、J-WAVE のランキングページ html を取得して utf-8 で保存する Ruby スクリプトを走らせて、あとはすべて JavaScript で処理しています。


仕組みは、

  1. ローカルに置いてあるランキング html を Ajax で取得
  2. 正規表現で曲名・歌手名・順位を取り出す
  3. ランダムに 1 曲選曲
  4. その曲名と歌手名をキーワードにして JSONPYouTube を検索
  5. 上位 10 データを取り出す
  6. 検索結果の総数 (gData.feed.openSearch$totalResults.$t) が 0 の場合、3 に戻る
  7. YouTube サイト上でしか観られない動画というのがあって、そういうのは配列 gData.feed.entry.media$group.media$content の要素数が 3 以外のようなので、取得データの上位から順に gData.feed.entry.media$group.media$content の要素数が 3 であるものを探す
  8. どの取得データも再生不可なら 3 に戻る
  9. 再検索が 10 回を超える場合は、エラーで終了
  10. gData.feed.entry.media$group.media$content[0].url が動画 URL なので、これにオプション rel=0 (関連動画を表示しない)、autoplay=1 (いきなり再生開始) を付加して SWFObject を作る
  11. gData.feed.entry.media$group.yt$duration.seconds が再生時間なので、これをもとにタイマーをセットする
  12. タイマーの時間が来ると、3 に戻る
となっています。
詳しくは拙いソースを見てください。


終了判定は完全にタイマー任せなので、動画が遅延したり、プレイヤーの変なボタンを押したりすると、1 曲終了する前に、次の曲に行ってしまいます。
そういう仕様です。


変なバグとかありそうですから、見つけてくれるとうれしいです。
JS たのしー。