Rでニコニコ動画APIを取得してみる


またRとニコニコ動画ネタ。様々なデータを取得しやすいのでRの勉強するには、ニコニコ動画のデータを使うのはよさそうです(ただたんに、よく利用しているサイトということもありますが)。

 
まず、ニコニコ動画には、動画情報を取得できるAPIがあります。
参考:ニコニコ動画APIとは (ニコニコドウガエーピーアイとは) [単語記事] – ニコニコ大百科
また、RにはXMLを解析する『XML』という名前そのままなパッケージがあります。
参考:XMLデータの扱い方

今回はそれらを利用してRでニコニコ動画のAPIを取得してみます。

まずは、RでXMLのパッケージのインストール

こんな感じになったら、とりあえずparseXMLを使ってニコニコ動画APIを取得。今回は定番のsm9(新・豪血寺一族 -煩悩解放 – レッツゴー!陰陽師)を使用

分かりにくいですが、どうも取得できたみたいです。タグが連結されてしまってますが、他は問題なさそう。

ところで、ニコニコ動画のAPIの動画情報は動画一つ一つでしか取得できないようです。でも、2つ以上の動画情報をデータフレームにしたいということもあるので、その方法を考えてみました。

まずは、取得した動画IDの取得。今回は、カテゴリ合算の総合ランキングの合計ランキングにあるトップ100の動画の情報を取得してみることに。
まずはその習得手順。ウェブ開発者ツールを開いて、コンソール画面を開き、以下のスクリプトを実行。

そうすると、メニューバーの下に動画IDと宣伝ポイントがカンマ区切りで書かれたテキストエリアが表示されると思うので、それを全て選択してコピーします(ChromeやFirebugを使っている場合は、12行目を『copy(txtVideoInfo);』してもOK)。なんだかムダなことをやっていると思われるかもしれませんが、AutoPage系の拡張機能や、先日紹介したGETパラメータを削除するユーザースクリプト(ニコニコ動画のGETパラメータ付きリンクを取り除くユーザースクリプト書いた | while(isプログラマ))を使ってる場合を考慮して書いています。if文は必要なさそうだったのですが、copyメソッドを使う場合は最後に空白行を追加してしまうという問題があったため、if文で最後の行だけ”\n”を追加しないようにしています。ニコニ広告のポイント数は必要ありませんが、後でつかおうと思ったため取得しました。

とりあえず、上記で取得したテキストをRに取り込み。

うまく取得できてるよう。

というわけで早速、この取得した動画IDのAPIを取得して、結合したデータフレームを作ってみたいと思います。

4行目の[-19]というのは、19列目を除くという意味です。公式動画だと19番目のuser_idがないことがあるそうなので、19番目をはぶくことにしました。
これでうまくいくはず(API自体をうまく取得できなかった場合や、削除となっている動画用のXMLが取得されてしまった場合の対処はしてません)。

そしてこれを、

として、得たテキストファイルが以下。
nicoFrame

うまく取得できてるようです。

ところで、APIの動画情報にはニコニ広告のポイントは書いてありません。ニコニ広告自体が途中からでてきたサービスだからなのかもしれませんが、とりあえず今回はニコニ広告のポイントをすでに取得してあるので、それを結合してみることに。今回は動画ID,タイトル,再生数,コメント数,マイリスト数,ニコニ広告ポイント数のみのデータフレームを作成することに。

できたファイル:nicoFrame2

これもうまくいきました。
ところで、今回ニコニ広告のポイント数をブラウザからとることができましたが、普通にソースをとってきてもわからないよう。どうも、ソースを読み込んだ後にJavaScriptでニコニ広告のポイント表示をしているようなのですが、調べてみてもその仕組みが分からず(ranking.jsというファイルで何かやってそうなのですが・・・)。

最後に、動画がない場合の対策。動画がない(例えば、sm1)が含まれている可能性がある場合は、ncolで列数を調べ、18の場合のみデータフレームに追加するという作業を行うといいかもしれないです。
試しに、sm1~sm100の動画情報を取得した場合は以下のように。

sm1~sm100までは23の動画が残っているということがわかります。

タグがうまく取得できない問題は今後の課題に(これができなきゃカテゴリーすら分からない)。XMLライブラリをもう少し勉強すれば分かるような気はするのですが・・・。
ニコニ広告の自動取得は難しそう。ニコニ広告の動画ページ(sm9の場合)のソースを見れば分かるには分かるのですが・・・。

コメントを残す

メールアドレスが公開されることはありません。