ニコニコ動画の最新動画をサムネイルで表示
id:tek_kocさんがやってて、面白そうだからやってみた。
参考URL
- http://d.hatena.ne.jp/tek_koc/20080321/1206070601
- ニコニコ動画がいつの間にかRSS吐いてる件 - unnecessary words
- iTunesのカバーフロー風UIをJavaScriptで実現「ProtoFlow」:phpspot開発日誌
まず普通に
XMLパーサ自体触ったことが無かったから、とりあえず動かしてみた。ほぼ書いてあるとおりに記述。
<?php $xml = simplexml_load_file('http://www.nicovideo.jp/newarrival?rss=atom'); echo "<ul>"; foreach($xml->entry as $entry){ echo "<li>" . convert($entry->title); } echo "</ul>"; ?>
うん。普通に動く。僕の環境では何もせずに文字化けしないので、文字化けするのはapcheの設定でしょうね。文字化けを直す方法としては、出力する文字コードを変更する*1か、.htaccessファイルで文字コードをUTF-8であることをapacheに教えるか、普通にhtmlで文字コードを記述する*2かで動く。
続いて
こっからが本番の、サムネイルの表示。身勝手な意見ですけど、自分で作りたい場合はこっからは作ってから見てください。
色々調べてみたんだけど、PHPにHTMLパースってないみたい。。。ばっかじゃねぇのっては思ったけど、しょうがないから正規表現で取得する。
<?php foreach($xml->entry as $entry){ preg_match_all("|<[^>]+>(.*)</[^>]+>|U", $entry->content, $matches); echo "<a href=" . $entry->link['href'] . ">" .$matches[1][0] . "</a> <br>\n"; } ?>
これで、一列に表示されて、リンクもついた。
もうちょっと変更
iTunesのカバーフロー風UIってのがちょっと前に紹介されてたんで、それを使って表示してみた。
<?php function xml_perse($xml_uri) { $xml = simplexml_load_file($xml_uri); for($i=0;$i<10;$i++) { $entry = $xml->entry[$i]; preg_match_all("|<[^>]+>(.*)</[^>]+>|U", $entry->content, $matches); echo " <a href=" . $entry->link['href'] . ">" .$matches[1][0] . "</a>\n"; } } ?> <div class="wrap" id="bodyWrap"> <h3> ニコニコ動画最新動画 </h3> <div id="protoflow"> <?php xml_perse('http://www.nicovideo.jp/newarrival?rss=atom'); ?> </div> </div>
抽出するとこんな感じ。見栄え的にはいいけどリンクが張れてねぇ*3...orz
まとめ
うむ。面白かった。PHPでHTMLパーサが出来ないわけがないと思うから、もうちょっとスマートにできそうなきがしてならないけど眠いしだるいんで、とりあえず今日はこの程度で勘弁してやる。またもうちょっと時間が出来たら調べてみようかな。