集計高速化できるかな?
2 月 25th, 2011 by akiakaryo
週刊東方ランキングは、タグ検索・キーワード検索から動画情報を取得していますが、
ニコニコ動画には東方タグが付いている動画は10万件を超えます。
つまり検索結果を1ページずつ取得していくと5000ページ以上も
アクセスしなければなりません。そうすると
5000(ページ)*10(秒/ページ)= 50000秒 = 830分 = 14時間弱
かかってしまいます。タグ検索・キーワード検索の両方で検索を行うので両方で 28時間、
つまり1日を超えてしまいます。
集計担当のichiro_jさんはうまいことやって12時間ぐらいで
終わるようにしているらしいですがそれでも12時間かかるのはなかなか長いです。
というわけで、タグ検索、キーワード検索だけでなく、
ランキングからも動画情報を取得する方法を考えます。
ただし、動画情報は検索結果ページ・ランキングから取得するのではなく、
そのページから動画IDを抜き出し、ニコニコ動画のAPI、getthumbinfoに
アクセスして取得することにします。
1.ランキングから取得
とりあえず、デイリー総合ランキングを2週間分取得することにします。
カテゴリーはすべての、といいたいとこですが
「料理」カテとかはほとんど東方動画は入ってきません。(たまにある)
そのためカテゴリグループランキングを主体として、
その中でも東方動画がランクインしている可能性が高い
「やってみた」グループ、「殿堂入り」グループは
すべてのカテゴリーランキングを取得することにします。
つまり取得するランキングカテゴリーは次のようになります
- エンタ(g_ent)、教養(g_life)、政治(g_politics)、アニゲ(g_culture)、R18(g_r18)の各カテゴリグループ
- やってみたグループ「歌ってみた(sing)、演奏してみた(play)、踊ってみた(dance)、描いてみた(draw)、ニコニコ技術部(tech)」
- 殿堂入りグループ「アイドルマスター(imas)、東方(toho)、VOCALOID(vocaloid)、例のアレ(are)、その他(other)」
そうすると取得するランキングは15種類となりました。
これよりgetthumbinfoは1秒間隔で取得するとして
15(カテゴリー)*14(日分)*100(動画/ランキング)*1(秒/動画)
=22500(秒)=380(分)=6(時間)
となります。ただこれは「ランクインしていた動画IDすべてで
getthumbinfoを取得する」ことになっています。
つまり、2日以上連続ランクインしていても2回取得するということです。
これは無駄なので1回だけ取得することにします。
こうすると、かかる時間は (計算式が面倒なので実測値ですが)
142(分)=2時間20分となりました。
やったね☆
ただ、これだけでは不十分で、
- 週刊東方の集計開始は0:00、ニコニコ公式のランキングの発表は6:00。 最終日(金曜日)の公式ランキングが発表される前に集計開始しないといけない
- 対象動画が2週間連続でランクインしていないと差分がとれない
という問題があります。
なのでこのランキングからの取得だけではダメで、さらに他の方法を考えないといけません。
それは明日以降にまとめようと思います。
ここまで長くなるとは…