ニコニコ動画の最新動画をサムネイルで表示

id:tek_kocさんがやってて、面白そうだからやってみた。

参考URL

まず普通に

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パーサが出来ないわけがないと思うから、もうちょっとスマートにできそうなきがしてならないけど眠いしだるいんで、とりあえず今日はこの程度で勘弁してやる。またもうちょっと時間が出来たら調べてみようかな。

*1:これはid:tek_kocさんがやられてる方法

*2:これは、試してないからあてずっぽう

*3:めんどくさいから今日はもうしないけど