PHPでニコニコ動画の検索結果を取得してあれこれ・・・
ニコニコ動画の変わったランキングを作ってみようと思ったのでいろいろ考えてみた。
とりあえず何かへんてこなランキングを作るには材料となる本家ニコニコ動画のサイトから仕入れをしなければいけない。
今回は、特定の検索結果を材料にしてみようと思う。
とりあえず
PHPでニコニコ動画のコメント取得 - 気まぐれラボラトリィ
で使わせていただいたソースをまた使う。(手抜きじゃないよ)
ログインするところまでは同じだが、
検索結果のHTMLを取得するメソッドをとりあえず追加。
<?php function get_html(){ $h_url = "http://www.nicovideo.jp/search/%E8%AC%8E%E3%81%AE%E6%8A%80%E8%A1%93"; //検索結果のurl $context = stream_context_create(array('http'=>array('method'=>'GET','header'=>"Content-type: text/xml\n\nCookie:".$this->user_session.";"))); return file_get_contents($h_url,false,$context); } ?>
単純にそのまま検索結果のHTMLが返ってくる。
そこからどうやって動画IDを取り出すかが悩みどころだったんだけど、
タグ検索の場合、下のほうに
var searchInfo = { page: 'tag', 〜(略)〜 result: [ {id:"sm4251587",title:"ハイポーションで愛を伝えつつ復讐してみた。",image:"http://tn-skr4.smilevideo.jp/smile?i=4251587"}, {id:"sm3540549",title:"初音ミクの細かすぎて伝わらないモノマネ選手権SPECIAL",image:"http://tn-skr2.smilevideo.jp/smile?i=3540549"}, 〜(略)〜 ] };
と、javascriptのソースがあるのでここからごっそりと持っていくのがいいと判断。
で、正規表現。
/result.+\]/
で、どんなもんでしょ?
するとJSONみたいなものが取れたと思いきや、なんかJSONとは違うような。。。
結局、動画IDだけで正規表現使って取り出すww
<?php $match = "/(sm|nm)\d+/"; preg_match_all( $match, $result , $arr_str ); //$arr_str[0]の配列に動画IDが入ってるぞ ?>
これで特定の検索結果の動画IDが取得できる。
後は自由にRSS作るなりして遊ぶ。
それで気づいたのだが、
自分はいつもソートにarray_multisort()を使っているが
RSS作ろうとしたときになぜかソートされなかった。
このarray_multisort()は1つの配列をキーにしてほかの配列も一緒に組み合わせてソートできるので結構いい。
で、なぜ今回ソートされないのか悩んだ結果、導き出した答えは「ソートされる配列の中身のデータが大きすぎた」。
さすがにRSSのitemノード1個分入れてソートさせるのは無茶なのか?
結局インデックスをつけてそれをソートする方式に変更。
今に至る。
とりあえず、寝ることにした。