ランキングの具体的な機能を考える

大変なことに気がつく

 大分間が開いてしまいました。クローラは大体完成したのですが、完成した直後に大変なことに気が付きました。すでに公式に、マイリストを検索して人気順に並べる機能があるじゃないですか。全然使ってなかったよ。
 とすると、いちいち個別動画からマイリストを抽出するロジックも、そこから閲覧数等を集計しようという試みも、あまり意味が無いということになります。何か付加価値を考えなければ、サイトを作る意味がなくなってしまいます。

 ということで、クローラをどうこうする前に、具体的に実装する機能をちょっと考えなおしてみます。

どんな機能があったら便利か

最近更新があったマイリストに限定し、その中でのランキングを求める機能

 「マイリスト検索→人気順に並べる」は、具体的な集計方法は知りませんが、恐らく現在までの閲覧・マイリス・コメントをポイント化したものの累積を測っています。ゆっくりで言えば、投稿が2007年と古く、各動画が平均的に100万再生を超える「超魔界村実況風(声:ゆっくり)」が1位に来るわけです。そして、きっとこの先も長らく1位に留まることでしょう。

 つまり、「ここ1週間における、シリーズとしてのランキング」などを集計する機能は備わっていません。これにはきっと需要があるはずです。私は知りたいです。

そのマイリストが、シリーズものであるかどうかを判別する機能

 「ゆっくり実況」で検索されたマイリストが、全てシリーズものであるとは限りません。例えば、この方のマイリストは「ゆっくり実況」でマイリスト検索した際に人気順で4番目に出てくるものですが、ゆっくり実況のシリーズではありません。この中の動画の一つに、「ゆっくり実況」が含まれていることで検索に反応したのでしょう。

 こういった、ゆっくり実況がたまたまマイリストの中に入っているが故に反応してしまうマイリストを除外する(あるいは選別して別に取り扱う)のは、意味のあることでしょう。

シリーズ新着動画アラート機能

 更新があった順にソートする機能はすでに存在します。しかし、いつからいつまでの間に、という事は閲覧者が確認せねばなりません。それを自動化するというのはさほど難しくはないでしょう。

ゲーム名から選ぶ機能

 「ゆっくり実況」とゲーム名を組み合わせて検索することはできます。それをもっと便利にするには、あらかじめタグを取得して一覧化するということが考えられます。

ランキング情報をRSS/Atomで配信する機能

 まぁこれはおまけです。Atomのフォーマットが以外にシンプルで分かりやすそうだったので。

やっぱりPHPをやめて全部Rubyで作る

 以上の機能をちゃんと実装できれば、それなりに需要のあるサイトはできるんじゃないでしょうか。クローリング/スクレイピングは大体感覚が分かったので、鬼門はDBかと思います。

 実はChrome Extensionでニコ動のマイリス管理エクステンションを別に作っており、それを始める際にHead First SQLを読んで、Web SQL Databaseでニコ動のマイリス情報をテーブルに入れて正規化するぐらいは実際に試してみたのですが、それでもWeb SQL DatabaseはSQLiteベースで、今回試したいのはMySQLだという違いもあり、それなりの苦労はするかと思います。

 ところで、最初に転職を念頭に入れてPHPをやるなんて偉そうなことを言いましたが、Rubyを触っているうちになんだか愛着が湧いてきました。Railsも習得したいし、もうこのまま全部Rubyでやろうと思います。
 それでは、次回から実際に書いたコードを掲載していきます。さようなら。