次にやりたいこと

ゆっくり実況ランキングサイト YNN

 やっと公開することができましたが、ご覧のとおりに空白が沢山あります。空白を埋めるためのアイデアはあるのですが、実現にちょっと時間がかかりそうなので、空白のまま公開しました。

 今回は、そこに何を入れていきたいかをお話しします。

node.jsを使って、Tiwtterタイムラインのリアルタイム分析をやりたい。

 Streaming APIを使ってつぶやきを取得し、それをさらにWebSocketサーバを立てて流すという流行のアレです。これをランキングの横に載せたい。

「ゆっくり実況」とかシリーズタイトルとか#動画IDとかで検索し、定型文を削除したら意味のある言葉が残ると思うので、それを流すだけでも面白いんじゃないかと思うんです。あとは、動画IDを抽出してリアルタイムでサムネイルを表示するとか、ですね。TL上での人気をトップページに載せたいとも思っています。

 node.jsじゃなくてRubyでもいいんですけど、流行りものは早いうちにやっておきたいのです。この場合、Herokuに無料でサービスを作ってiframeで中継とかがいいんでしょうか。現在node.jsの初期設定で大苦戦してるので、ちょっと実現に時間がかかるかも知れません。

動画コメントを取得して、コメント濃度から盛り上がりどころを判別して視覚化したい。

 これは最近思いついたんですが、今回の提案の中では一番面白いんじゃないかと思う。

 動画って、盛り上がる場面がありますよね。そしてそこではコメントが集中するわけですが、その濃度の高い部分を抽出して、「?分??秒で盛り上がってる!」みたいな指摘をすれば、見てる人も興味をそそるんじゃないかと思うのです。さらに変化率とコメント総量から盛り上がり度合いも出せるでしょう。これを各シリーズの右下の空白に入れたい。

 nicoscraperの一機能として組み込むことになりますが、コメントは単純なスクレイプでは取得できず、いくつかの複雑な手順を踏む必要があるので、これもちょっと時間がかかりそうです。

タグを取得して、固定タグからゲームタイトル(の可能性が高いもの)を抽出したい。

 現在、シリーズマイリストのタイトルから、シリーズを検索することはできます(シリーズマイリストとは、投稿者が作った、その動画シリーズを入れているマイリストの事を指すことにします)。

 しかし閲覧者としては、ランキングから面白そうなものを探すか、あるいは見たいゲームのタイトルを探すというパターンのいずれかですよね。そうすると、必ずしもシリーズマイリストのタイトル中に、ゲームのタイトルが含まれていないという問題があります。これは、シリーズ内動画まで範囲を広げれば解決するかも知れません。しかし、ゲームタイトルを一覧化したい!という目的には使えません。どの範囲で文字列を切り取ればいいかの判断材料が無いから。

 そこで、タグを使うということを考えています。タグには高確率でゲーム名を含んでおり、ゲーム名である可能性が高いタグさえ判別できれば、それをゲームタイトルとしてシリーズに結びつけ、さらにリスト化などもできます。

 ゲーム名の可能性の高いタグをどうやって判別するかという問題ですが、これは

  1. 固定タグを抽出
  2. ジャンルタグ等の定型タグを排除
  3. 一定期間ごとにタグの変化を監視し、変化が無いものを採用

 などの方法で、高い可能性でゲーム名タグを抽出できるんじゃないかと思います。あとは閲覧者に、「これはゲーム名タグじゃない指摘ボタン」等で教えてもらうとかですね。

 これは地味だけど実用性が高いはずなので、優先順位を高く設定したいです。

何からやる?

 タグ分析からやります。ただ、タグ取得機能はnicoscraperに備わっているのですが、v0.2.14にはバグがあって固定タグの取得が出来ていませんでした。しかしまあ、これを直せば、タグ取得->分析はそう面倒な事でもないので、とりあえずそこから始めようと思います。

 他にも何かアイディアがあれば教えて下さい。あるいは脆弱性等を見つけたら、そっとメールとかTwitterのDMとか送って下さい。

ゆっくり実況ランキングサイト、試験公開中

 やっと最低限のものができあがったので、試験的に公開します。
11/4 再開しました。

 -> ゆっくり実況ランキングサイト YNN

どういうサイトなのか。何で作ったのか。

 「ゆっくり実況」タグのついた動画限定のランキングサイトです。
 ただ、動画ごとではなくシリーズごとのランキングを集計している点が売りです。動画個別のランキングというのは沢山ありますが、ゆっくり実況は大半が続きものであることから、シリーズのランキングがあったらいいなと思って作りました。

 もう一つ。僕は今ただの素人なのですが、プログラマになりたくて、会社に提出できる形あるものを作りたかったのです。

ランキングの基準になってるポイントって何?

 まず個々の動画について、次に説明する「ポイント」を毎日記録します。そして前日からの増加ポイントを計算し、その増加ポイントをシリーズ内で単純平均したものが、ランキングで用いるポイントです。

 そして「個々の動画のポイント」とは何かですが、これはニコニコ動画が採用していると言われる計算式にできるだけ準拠した形で計算したポイントです。できるだけというのは、技術的な問題からニコニ広告に比例するポイントが計算に含まれていないからです。したがって、盛んに宣伝されている動画は本来ポイントが高くなるはずですが、本ランキングでは残念ながら反映されません。

 つまり、「ニコ動でいう総合ポイントのデイリーランキングを、シリーズ毎の平均で計算し直した。ただし宣伝ポイント分は含まれない」ということです。

おことわり

 このランキングは公正さも正確さも担保されません。その理由は次の通り。

  1. ニコニ広告宣伝ポイントが含まれない。または計算式が公式通りという確証がないため、ニコ動の「総合ポイント」との大きな乖離があり得る。
  2. 毎日全ての動画情報を1時間以内に取得しているが、当然その幅の内で集計上の有利不利が生まれる。
  3. 「ゆっくり実況」タグの付く動画全てを網羅していない。

 したがって、このランキングはお遊びにすぎず、そのシリーズの人気を非常に大雑把にしか表現していない/できないということをご承知置き下さい。

 また、クローラ使用上の問題とか、CNNから怒られるとかなんやかんやで、予告なく公開を終える場合があります。

この先の予定は?

 サーバとRailsのパフォーマンスチューニングは最優先として、

  • タグ・タイトル検索機能の追加
  • Twitterや動画コメから、意味のあるコメントを抽出して掲載
  • 動画が完結しているかどうかの判定機能の追加
  • ランキング情報提供APIの実装
  • 投稿者によりマイリスト化されていない動画も認識するよう、クローラを改良。
  • IE8以前でCSSが反映されない大問題を解決

 等を考えています。
 何はともあれ、まずはタグ情報の収集ですかね。これによっていろんな可能性が開けます。完結判定の他にも、例えば固定タグからゲーム名(の可能性が高いタグ)を抽出するとか、part1だけまとめたシリーズを確実に区別できるようになるとか。

ランキングに掲載することを望まない方への対応

 ランキング掲載については、そもそも公開されてるんだから文句は言えないだろという意見もあるでしょう。しかし、ランキングサイトを作ったことによって特定の投稿者が萎縮してしまうような事は個人的に避けたいのです。一般に公開はするが、有名になることを必ずしも望まない人もいるはずです。

 …ので、申請があれば非掲載にしたいと思いますし、その機構を組み込むのは簡単なのですが、問題は申請者と投稿者が同じであることをどうやって判断するかです。今のところ、私の作った専用アカウントにフレンド申請をしてもらう方法を考えてますが、運用してみないと上手くいくか分からないので、今後方法を変える可能性はあります。詳しくは、ここを読んで下さい。

その他

技術的な話

 このサイトはRailsとMongoDBで動いています。
 最初はMySQLで作っており、パフォーマンスも不満はなかったのですが、延々増え続ける日々のログをどうするのか、JSON提供APIを実装する時にドキュメント指向DBの方が都合がいいんじゃないか、ということでMongoDBに換えました。JOIN的な事を全てRails側でやらざるを得ず(いや、上手いやり方があるのかもしれませんが)、まずいロジックだとRDBMS的JOINより格段に遅くなるのが目下の悩み。

 サーバはさくらVPS 512MBです。最初はAmazon EC2 マイクロインスタンスでしたが、さくらにお試し期間があったので試したところ、EC2より格段に快適でした。それにnginx + unicorn + Rails 3.1で動かしています。

クローラについて

 このサイトは自作のニコ動専用スクレイピングライブラリ'nicoscraper'を使っています。そんなに大したものではありませんが、クローラ作成上の労力を軽減するお手伝いになるはずです(濫用するとニコ動からクレームが付くでしょうし、それ以上の事態になるかもしれませんが、このあたりのさじ加減や作法は僕にも何とも言えません)。
 マニュアル整備中につき間違いが多いかも知れませんが、Twitterやメールで聞いて頂ければできるだけ答えます。これでマニアックなジャンルのランキングサイトを作って頂けると、私も大変嬉しいです。

連絡先

Twitter @h_demon
MySite: hdemon.net
Mail: hdemon7'at'gmail.com

ニコニコ動画からの情報取得用ライブラリ、作ってます。

 Railsも初歩的な部分を理解し、あとは日々ニコ動から情報を取得すればいいだけなんですが、DB設計が思いの外難しく、あと一歩の所で完成を見ていません。

 ただ、実用に足りる最低限のクローラはすでに完成しています。今日はそのクローラに使うRubyの自作ライブラリを紹介します。

NicoScraper

 執筆時のバージョンは、0.2.12 です。

 簡単に説明すると、動画、マイリスト、タグ検索結果の情報を取得し、取得結果からさらにいろいろ情報を抽出できるライブラリです。

 詳しいことはドキュメントを読んでいただくとして、簡単な概要を。

インストール

libxml2とlibxsltを使うので、入ってない場合は、

yum install -y libxml2 libxml2-devel libxslt libxslt-devel

などとして入れて下さい。その後、

gem install nicoscraper

でインストールし、

require 'nicoscraper'

で準備完了。

使い方

 例えば、「【初音ミク】みくみくにしてあげる♪【してやんよ】」の情報が欲しい時は、

require 'nicoscraper'

movie = Nicos::Movie::new("sm1097445")
movie.getInfo

 このように、動画IDを与えてMovieクラスのインスタンスを作った後にgetInfoメソッドを使うと、

p movie

    <Nicos::Movie:0x00000002537aa8
      @video_id="sm1097445", 
      @available=true, 
      @title="【初音ミク】みくみくにしてあげる♪【してやんよ】", 
      @description="おまえら、みっくみくにしてやんよ。歌詞は...", 
      @thumbnail_url="http://tn-skr2.smile...", 
      @first_retrieve=1190218922, 
      @length=99, 
      @movie_type="flv", 
      @size_high=3906547, 
      @size_low=1688098, 
      @view_counter=9073614, 
      @comment_num=2553366, 
      @mylist_counter=183470, 
      @last_res_body="★&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;☆...", 
      @watch_url="http://www.nicovideo.jp/...", 
      @thumb_type="video", 
      @embeddable=1, 
      @no_live_play=0, 
      @tags_jp=["音楽", "初音ミク", ...], 
      @tags_tw=["彈幕強大", "把&#20320;MikuMiku掉♪", ...], 
      @user_id=70391 >

 というように、インスタンス変数の形で情報が取得できます。マイリストも同じように、

require 'nicoscraper'

mylist = Nicos::Mylist::new("15196568")
mylist.getInfo

 マイリストIDを与えてgetInfoすると、

p mylist

<Nicos::Mylist:0x00000002884670
  @mylist_id=15196568,
  @available=true,
  @title="【Oblivion】おっさんの大冒険", 
  ...
  @movies=[
    #<Nicos::Movie:0x0000000255a968
      @video_id="sm8481759", 
      @available=true, 
      @title="【Oblivion】おっさんの大冒険1(ゆっくり実況)",
      ... ,
    #<Nicos::Movie:0x0000000251a6b0 
      @video_id="sm8506034",
      @available=true,
      @title="【Oblivion】おっさんの大冒険2(ゆっくり実況)",
      ... ,
  ],
  ... >

 マイリストの情報と、マイリストに含まれる動画情報が取得できます。

Searcherモジュール

 このライブラリの肝、検索結果からの取得です。タグ検索を行う場合は、Nicos::Searcher::ByTagクラスを使います。

searchByTag = Nicos::Searcher::ByTag.new()
searchByTag.execute( 'VOCALOID', :post_new ) { |result, status|
 # "continue"をブロック内で返すと検索を継続
}

 このメソッドには、検索したいタグ文字列とソート方法を与えます。この例では、'VOCALOID'のタグを検索し、それを:post_new == 新着順でソートするという設定です。

 そして、resultに取得結果がMovieクラスのインスタンスの形で返ってきます。statusには取得の成否等の情報が含まれますが、ここでは割愛します。

 最後に、ブロック内で"continue"を返すことにより、検索が継続されます。これは意図しない過剰アクセス等を防ぐ為です。なお、タグ検索結果ページ/Atomを利用しているので、スクレイプは動画32個単位で行われます。

実践的な例

require 'nicoscraper'
require 'date'

t = Time.now
tda = Date::new(t.year, t.month, t.day) - 3
threeDaysAgo = Time.local(tda.year, tda.month, tda.day, 0, 0, 0).to_i

searchByTag = Nicos::Searcher::ByTag.new()
searchByTag.execute( 'VOCALOID', :post_new ) { |result, status|
  terminate = false

  result.each { |movie| # first_retrieve == 投稿日
    terminate = ( movie.first_retrieve <= threeDaysAgo )

    puts movie.title +
        " is posted at " +
         Time.at(movie.first_retrieve).to_s 
  }   

  "continue" unless terminate
}

 私はこんな感じで自分のクローラに利用しています。この例では、今日より3日前の0時までを限度に、VOCALOIDタグの付く新着動画を取得します。ブロック内に与えられた動画インスタンスの投稿日を見て、3日以上前の物が含まれていたら”continue”を返すのをやめるという仕組みです。

シリーズ性判定メソッド

 動画には説明文があり、多くの動画はマイリスト情報をそこに記載し、他の自作/他作動画を紹介しています。そしてシリーズ物の動画の場合は、そのシリーズ一覧を記載したマイリスを用意する場合があります。そんなシリーズマイリスを抽出するsearchSeriesMlメソッドを用意しました。

 例えばこのシリーズ、私は大好きなんですが、part1動画の説明文を見るとマイリストが2つありますよね。自分を含むシリーズ物をまとめたマイリスと、その他いろいろのマイリスです。

 シリーズ性判定メソッドは、ある動画の説明文からマイリス文字列を抽出し、1. そのマイリスに対して自分自身が含まれているかどうかを判定し、2. 含まれている場合は動画のタイトルの類似性を計算して返します。類似性はマイリス内動画のタイトルをngram法(デフォルトはn=3)によって総当たりで比較し、切り出した文字片が合致する割合の平均を用います。

 そうすると、例えば先の動画の場合、類似度がそれぞれ、

  • 自分を含むシリーズ物をまとめたマイリス: 0.82
  • その他いろいろのマイリス: 0.07

 と計算されます。どちらも自分自身を含むマイリスなので、ここから先は人の判断に委ねられますが、少なくとも類似度が最も高いものがシリーズ物マイリスであると推測できますし、このシリーズでは現にそうなっています。n=3の場合、大体0.2-0.3ぐらいにしきい値を設けるのが、経験的には妥当だと言えます。

 実際にはこんなふうに使います。

# 引数にしきい値を設定し、それ以下の類似性のマイリストを出力から排除できる。
ary = movie.searchSeriesMl(0.1)

ary.each do |e|
  puts "title:" + e[:mylistObj].title
  puts "similarity: " + e[:similarity]
end

 このメソッドは、該当するマイリストオブジェクトとその類似性を含むハッシュオブジェクトの配列を返します。詳しく書くと長くなってしまうので、興味があればこれもドキュメントを読んで下さい。

他には?

 他にはスクレイプ時の動画やマイリストの状態ー404、コミュニティ限定、非公開を認識できたり、連続アクセス制限や503等に応じて次回以降のウェイトを自動で増加させたり再試行回数等を調整できたり、外国語タグやカテゴリタグも認識できたりとか、いろいろ伝えたいことはあるんですが、長くなるのでやめます。詳しくはドキュメントを。

最後にお願い

 ニコニコ動画規約でクローリング自体を許可とも禁止とも言っていません。が、当然ながらサーバに過度の負担を及ぼす行為はやめろと言っています。このライブラリの使い方によっては、それに該当する可能性があります。

 その対策として、'continue'を明示的に返さないとスクレイプが継続しない方式の採用と、デフォルトのウェイトをかなり大きめに取る(ウェイトについてはこちらを見てください)という対策を行なっています。したがって、実用的な環境にするためには皆さんの手で変更を加えて頂く必要がありますが、その際は十分注意して下さい。例えばブロック内に制御構文なしに無条件で'continue'を返したりすると、タグによっては大変な事になります。このライブラリを使って生じた損害、例えばニコ動からのアクセス規制、垢バン、損害賠償などについて、一切の保障はできません。つまり、MITライセンス通りです。

 あと、バグが多くてパッチバージョンがガンガン上がっています。私は限定的な使い方しかしないので、全てのメソッドのテストを十分に行えていないせいです。バグを発見したら、下記まで連絡をいただけると助かります。要望があれば、それも是非聞かせて下さい。

twitter: @h_demon
mail: hdemon7@gmail.com

動画の「シリーズ性」をどうやって判定するか

 クローラは概ね完成し、シリーズかどうかを判定するロジックも一応できたのですが、始めてのRailsに少々苦戦しています。これを乗り越えれば、β版として公開できるでしょう。

 今回は、どうやって動画のシリーズ性を判定しているかを説明したいと思います。…が、その前にシリーズ性とは何か、シリーズ性を判定する上で何が障害となるかを説明します。

シリーズ性とは?

 まずシリーズ性とはなんぞやということですが、ゆっくりに限らずゲーム実況動画は大体が単発では終わらず、数個から多い人で百数十個の動画をシリーズとして提供するパターンが大方を占めています。

 で、ランキングサイトの今までにない試みとして、単一動画のランキングではなくシリーズのランキングを載せられたら面白いよねというのが、前回お話した本ランキングの1つの目的であるわけです。

 それを実現するためには、「この動画は何かのシリーズの一部であるかどうか」、あるいは「このマイリストはシリーズものをまとめたリストであるのかどうか」という判断を、どこかでする必要が出てきます。この性質のことをシリーズ性と勝手に呼んでいます。

シリーズ性を判定する材料にはなにがある?

 それがシリーズであるかどうかを判定する材料は、その取り扱いが技術的に易しいかどうかは置いておくと、次のようなものが考えられます。

  1. 同一のマイリストに含まれており、マイリストの制作者と、リスト中の動画の制作者が全て一致する。
  2. タイトルが類似している。
  3. 動画の説明文中に、シリーズ前後の動画、あるいはそれが属するシリーズものマイリストへのリンクがある。
  4. シリーズものは連続して観るはずなので、おすすめ動画に前後のシリーズが掲載される可能性がある。

 ただ、現在これらの全てを活用できておらず、概ね2に強く依存しています。

タイトルの「類似性」をどうやって判断する?

 タイトルの類似性、つまり文字列としての類似性を判定し、自分が設定したしきい値を超えれば「シリーズである」とするロジックですが、類似性を判断する基準を決めなければなりません。

 その基準には、現在は編集距離(レーベンシュタイン距離)を採用しています。編集距離とは、ある文字列を他の文字列に置き換える際に最小でどれだけの手順を要するかという指標です。

 現在のところ、この方法で「ゆっくり実況プレイpart1リンク」でタグ検索した約3,700件の動画から、2,400件のシリーズマイリストを抽出することができています。

 ただし、この手法には2つの問題があります。まず、当然ながら意味論的な類似性は全く考慮されないこと。そして、文字列が長くなるにつれ、形式的な類似性についても実態を反映しない可能性が高くなることです。例えば文章の一部を倒置させたりすると、人間の目には簡単な手順に映りますが、編集距離的には大幅な変更があったことになってしまいます(参考資料)。

もう1つの問題と、これからの改良策

 先に挙げた2つの問題のうち、前者は私の現在の技術ではどうにもなりませんし、他の手法で補えれば問題とはなりません。問題となるのは後者ですが、これは1と3で補うことを考えています。この組み合わせロジックは、次に説明するもう一つの問題の解決策にもなり得ます。まずはその問題について説明。

 ある動画群がシリーズであるとき、投稿者がそのシリーズを公開マイリストとしてまとめて登録するのはよくあることです。今までの説明も、それを当然の前提にしてきました。

 しかし、全ての投稿者が公開マイリストを用意するわけではありません。公開マイリストがない場合、最も多いパターンが、「前回:sm******** 次回:sm********」という形で説明文中にリンクを貼るパターンです。

 このパタ―ンは、公開マイリストを補足するというやり方では漏らしてしまうため、独自に補足するロジックを用意しなければなりません。また、このパターンは公開マイリストを用意している場合も併用されることが多いため、この補足ロジックを開発することは、さっき挙げた編集距離の認識不全問題の手助けともなり得ます。

つまりどうすんの?

 つまりこういうことです。動画のシリーズ性を判定する際に、審査を2段階設けます。現在はまず「ゆっくり実況プレイpart1リンク」のタグ検索を行い、その各動画の説明文中のマイリストを抽出し、抽出されたマイリストに対して判定を行っています。以下が現在の処理です。

  1. 「ゆっくり実況プレイpart1リンク」でタグ検索
  2. 各動画の説明文中のマイリストを抽出
  3. 抽出されたマイリストに対して、編集距離による類似性の判定

 このロジックに、次の段階を加えます。

  • 類似性にネガティブ判定が出た場合、説明文中の動画へのリンクを辿っていく。
  • 辿っていった動画がリンクし、かつ同一投稿者である限度で、そのリンクチェーン内の動画をシリーズとみなす。

 このロジックを加えることで、編集距離による類似性判定でグレーな場合も、シリーズ性が認められる可能性が高まります。そもそも、編集距離の類似性は私が感覚的なしきい値を設定しているわけで、合理的な基準があるわけではありません。今説明したロジックは、そういったあいまいな要素を排するため、組み合わせることによってかなりの精度の向上が期待されます。

まとめ

 このロジックはまだ構想だけで、実装はできていません。そもそも「ゆっくり実況プレイpart1リンク」という、人間の手作業による、すでにシリーズであることが強く推定される高い精度のふるいに掛けられており、本来はこのタグの付く動画の数だけシリーズがあるはずです。しかし、現在はその3分の1を漏らしているので、早いところ実装して改善したいものです。もっとも、テスト公開が先だとは思いますが。

 今回は、シリーズ性の判定方法について説明しました。こういうアルゴリズムを自分で作ることは、計算機学を学校で学んだわけではない身にとっては新鮮でありながら、大変難しいものです。文中で何か間違ったことを言っていたら、指摘して頂けるとありがたいです。

 次回更新時は、β版の公開のお知らせ…になるといいな。

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

大変なことに気がつく

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

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

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

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

 「マイリスト検索→人気順に並べる」は、具体的な集計方法は知りませんが、恐らく現在までの閲覧・マイリス・コメントをポイント化したものの累積を測っています。ゆっくりで言えば、投稿が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でやろうと思います。
 それでは、次回から実際に書いたコードを掲載していきます。さようなら。