私が週刊アイドルマスターランキング制作の支援のために、作り始めたニコニコ動画の動画情報収集システムの構成について、少しずつ説明していこうかと。
現在Ver.2となってます。
Ver.1はニコニコ動画のランキングと指定した動画の情報を収集する、週マス用の機能を基本としたバージョン。
Ver.2ではマイリスト数が表示されるようになって、タグ検索結果を取得できるようになったバージョンです。
ベースとしてPlaggerを使っています。
PlaggerはPerlでできたシステムで、いろいろな情報を取得して、RSS Feed形式にして加工、いろいろな方法で出力できるものです。
プラグインによって、取得する情報、加工方法、出力先を自由にカスタマイズできます。さまざまなプラグインが公開されています。
プラグインは、設定ファイルによって複数の取得、加工、出力プラグインを組み合わせて1つの処理にすることができます。
なぜPlaggerを採用したかというと、一時期、かなり流行っていたので試してみたかったのと、何を取得して、どのように出力するか決まってない中で、どれだけ柔軟に機能拡張できるか?というのを満たしそうなのと、サンプルになりそうなコードが豊富だったためです。
これがシステムの概要図です。
プラグインは八割がた既存のプラグインを修正して使っています。
というのも、RSS Feed用に用意された項目ではニコニコ動画の情報が格納しきれないためです。
再生数などは、独自に拡張する必要がありました。
Perlはスクリプト言語だけあって、後からFeed用のクラスに連想配列のキーを追加しても、プラグインの方さえ値を拾うようになっていれば問題なく動作するため、プラグイン部分のみを開発することでかなり作業を減らすことができました。
たとえば、設定ファイルがどのようになっているかというと
毎日のマイリストランキングを取得する設定は以下となっています。
・ランキング取得プラグイン
マイリスト、毎日を指定
・ニコニコ動画情報加工プラグイン(ランキング等で表示されていないタグ等の情報の追加取得)
・Excelランキング形式出力プラグイン
・メール送信プラグイン
・条件動画抽出加工プラグイン
アイドルマスタータグ付き動画抽出指定
・ブログ出力プラグイン
テンプレート指定
・Twitter出力プラグイン
テンプレート指定
取得する情報によって設定ファイルを分けています。
定期的に取得するものは、時間指定で指定した設定ファイルでPlaggerが実行されるようになっています。
ニコニコ動画から情報を取得する部分ですが、LWP::RobotUAモジュールを拡張しています。
連続アクセス制限があるページのURLを連続で取得しようとすると、自動でアクセスする間隔が増えるようになっています。
ログインしてる状態で一定回数アクセスすると、別のアカウントでリログインします。
情報のパースは、ページの場合正規表現で抽出しています。正規表現の文字列は別ファイルにしてあります。
XMLのところはLibxml2でXPathを指定して抽出しています。
ランキング取得とタグ検索結果取得は、ページをファイルに落とします。
これは、ページのデザインが変わっていたりして、正しくパースできなかった場合、修正後パース処理からやり直すためです。
一度ダウンロードしておけば、パース処理の修正は後からでも出来ますので。
特にタグ検索結果は取得するページ数が多く、時間がかかるので、いくつかのプログラムに分けて実行されます。
- タグ検索結果全ページダウンロード
- パース処理をして、DBに登録
- DBからデータを呼び出して、タグ等の情報を別途取得、DB登録
まずは、ざっくり全体の動きなどをメモってみました。
詳細部分については別途。