【PHP】ニコニコ動画ランキングのRSSを読み込んで情報をパースする!
ニコニコ公式のRSSを利用して「動画ランキング」の情報を取得することができます。
例えば「政治カテゴリ」の「本日の動画ランキング」の情報は以下URLで取得できます。
http://www.nicovideo.jp/ranking/view/daily/politics?rss=2.0
上記URLを叩くと、以下のようなxmlデータが返ってきます。
<?xml version="1.0" encoding="utf-8"?> <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> <channel> <title>政治の再生ランキング(24時間)‐ニコニコ動画</title> <link>http://www.nicovideo.jp/ranking/view/daily/politics</link> <description>毎時更新</description> <pubDate>Tue, 26 Jan 2016 20:00:00 +0900</pubDate> <lastBuildDate>Tue, 26 Jan 2016 20:00:00 +0900</lastBuildDate> <generator>ニコニコ動画</generator> <language>ja-jp</language> <copyright>(c) DWANGO Co., Ltd.</copyright> <docs>http://blogs.law.harvard.edu/tech/rss</docs> <atom:link rel="self" type="application/rss+xml" href="http://www.nicovideo.jp/ranking/view/daily/politics?rss=2.0"/> <item> <title>第1位:政治家になりたいという野望はありますか?【KAZUYAの質問コーナー】</title> <link>http://www.nicovideo.jp/watch/so28079649</link> <guid isPermaLink="false">tag:nicovideo.jp,2016-01-25:/watch/so28079649</guid> <pubDate>Tue, 26 Jan 2016 20:00:00 +0900</pubDate> <description><![CDATA[ <p class="nico-thumbnail"><img alt="政治家になりたいという野望はありますか?【KAZUYAの質問コーナー】" src="http://tn-skr2.smilevideo.jp/smile?i=28079649" width="94" height="70" border="0"/></p> <p class="nico-description">★質問、ご意見はこちらからお願いします→https://goo.gl/ETuOAm★こちらの動画もご覧下さい→watch/1445350332★新著!「超日本人の時代 お花畑からの脱却」→http://amzn.to/1NuNDr7★今後の講演情報→http://kazuyahkd.com/eventNET News Station|KAZUYA CHANNEL GX★このチャンネルの「お気に入り」登録お願いします★----------------------------------・ニコニコ生放送はこちらから →http://ch.nicovideo.jp/kazuyagx/live・YouTubeで動画投稿しています。是非YouTubeでチャンネル登録をお願いします! →http://www.youtube.com/user/kazuyahkd・前watch/1453628712・KAZUYA Channelマイリス→mylist/36734521・大体1分ニュースマイリス→mylist/47422680----------------------------------・KAZUYA twitter|@kazuyahkd →https://twitter.com/kazuyahkd・KAZUYA BLOG →http://kazuyahkd.com/----------------------------------運営(和田)twitter | @media_otb →https://twitter.com/media_otb----------------------------------▼NET News Station|KAZUYA CHANNEL GX http://ch.nicovideo.jp/kazuyagx</p> <p class="nico-info"><small><strong class="nico-info-number">34,384</strong>pts.|<strong class="nico-info-length">4:39</strong>|<strong class="nico-info-date">2016年01月25日 21:00:00</strong> 投稿<br/><strong>合計</strong>  再生:<strong class="nico-info-total-view">34,384</strong>  コメント:<strong class="nico-info-total-res">1,236</strong>  マイリスト:<strong class="nico-info-total-mylist">114</strong><br/><strong>日間</strong>  再生:<strong class="nico-info-daily-view">34,384</strong>  コメント:<strong class="nico-info-daily-res">1,233</strong>  マイリスト:<strong class="nico-info-daily-mylist">114</strong><br/></small></p> ]]></description> </item> <item> ・ ・ ・
これをPHPでパースしてみました。コードは以下のようなもの。
<?php $rss_url = "http://www.nicovideo.jp/ranking/view/daily/politics?rss=2.0"; $xml = simplexml_load_file ($rss_url); foreach ($xml->channel->item as $entry){ //順位を取得 $subject = (string)$entry->title; $pattern = '/第([0-9]+)位:/'; preg_match($pattern, $subject, $matches); $rank = isset($matches[1]) ? $matches[1] : ""; //タイトルを取得 $pos = mb_strlen("第".$rank."位:"); $title = substr((string)$entry->title, $pos); //再生数を取得 $subject = (string)$entry->description; $pattern = '/再生:<strong class="nico-info-total-view">([0-9|,]+)<\/strong>/'; preg_match($pattern, $subject, $matches); $views = isset($matches[1]) ? $matches[1] : ""; //コメント数を取得 $pattern = '/コメント:<strong class="nico-info-total-res">([0-9|,]+)<\/strong>/'; preg_match($pattern, $subject, $matches); $comments = isset($matches[1]) ? $matches[1] : ""; //マイリス数を取得 $pattern = '/マイリスト:<strong class="nico-info-total-mylist">([0-9|,]+)<\/strong>/'; preg_match($pattern, $subject, $matches); $mylists = isset($matches[1]) ? $matches[1] : ""; //再生時間を取得 $pattern = '/<strong class="nico-info-length">([0-9]+:[0-9]+)<\/strong>/'; preg_match($pattern, $subject, $matches); $play_time = isset($matches[1]) ? $matches[1] : ""; //サムネイル画像URLを取得 $pattern = '/(http.+smile\?i=[0-9]+)/'; preg_match($pattern, $subject, $matches); $img_url = isset($matches[1]) ? $matches[1] : ""; echo "--------"."\n"; echo "順位:".$rank."\n"; echo "タイトル:".$title."\n"; echo "再生数:".$views."\n"; echo "コメント数:".$comments."\n"; echo "マイリス数:".$mylists."\n"; echo "再生時間:".$play_time."\n"; echo "画像URL:".$img_url."\n"; } ?>
このマクロを叩くと以下のような情報が出力されます。
-------- 順位:1 タイトル:政治家になりたいという野望はありますか?【KAZUYAの質問コーナー】 再生数:36,257 コメント数:1,284 マイリス数:115 再生時間:4:39 画像URL:http://tn-skr2.smilevideo.jp/smile?i=28079649 -------- 順位:2 タイトル:安倍が悪いから中止になった琉球大学学生会会長選挙www 再生数:57,075 コメント数:1,625 マイリス数:136 再生時間:3:11 画像URL:http://tn-skr3.smilevideo.jp/smile?i=28072838 -------- 順位:3 タイトル:ノノムラー会見 再生数:1,258,459 コメント数:15,660 マイリス数:22,693 再生時間:1:36 画像URL:http://tn-skr3.smilevideo.jp/smile?i=23935946 -------- ・ ・ ・
正規表現を使ったり文字列を削ったり、いろいろなことをしなきゃいけなくて、意外と大変でした・・。
以上です。