JS でネットラジオもどきを作った
J-WAVE TOKIO HOT 100 のランキングから JavaScript で YouTube の動画を検索してランダムに再生する「jsRadio」を作りました。
IE6 と Mac・Windows の Firefox2, Safari3, Opera9 で動作確認しています。
週に 1 回 cron で、J-WAVE のランキングページ html を取得して utf-8 で保存する Ruby スクリプトを走らせて、あとはすべて JavaScript で処理しています。
仕組みは、
- ローカルに置いてあるランキング html を Ajax で取得
- 正規表現で曲名・歌手名・順位を取り出す
- ランダムに 1 曲選曲
- その曲名と歌手名をキーワードにして JSONP で YouTube を検索
- 上位 10 データを取り出す
- 検索結果の総数 (gData.feed.openSearch$totalResults.$t) が 0 の場合、3 に戻る
- YouTube サイト上でしか観られない動画というのがあって、そういうのは配列 gData.feed.entry.media$group.media$content の要素数が 3 以外のようなので、取得データの上位から順に gData.feed.entry.media$group.media$content の要素数が 3 であるものを探す
- どの取得データも再生不可なら 3 に戻る
- 再検索が 10 回を超える場合は、エラーで終了
- gData.feed.entry.media$group.media$content[0].url が動画 URL なので、これにオプション rel=0 (関連動画を表示しない)、autoplay=1 (いきなり再生開始) を付加して SWFObject を作る
- gData.feed.entry.media$group.yt$duration.seconds が再生時間なので、これをもとにタイマーをセットする
- タイマーの時間が来ると、3 に戻る
詳しくは拙いソースを見てください。
終了判定は完全にタイマー任せなので、動画が遅延したり、プレイヤーの変なボタンを押したりすると、1 曲終了する前に、次の曲に行ってしまいます。
そういう仕様です。
変なバグとかありそうですから、見つけてくれるとうれしいです。
JS たのしー。