糞糞糞ネット弁慶

読んだ論文についてメモを書きます.趣味の話は http://repose.hatenablog.com

Eventernoteのクローラー書いた

Eventernote (イベンターノート) Eventernote イベンターノート
オタク活動管理に便利なEventernoteをクロールしたくてクローラ書いた.ソースはgistにあげた.
Eventernote自体は@MagnesiumRibbon前回の冬コミで出した声優統計第三号にて分析対象にしていた(年末のEventernoteのUstreamでも話題に上がっていた).それを読んだことと,なにより自分が最近イベントに参加するようになってEventernoteを使い始めたら面白そうなので自分でもデータを触ってみたくなった.

取得できる情報

get_event_info(event_id)
  • イベント名 (title)
  • 開催年月日 (date)
  • 会場 (location_info)
    • 会場名 (location)
    • URL (url)
    • 会場id (id)
  • 出演者 (actors)
    • 名前 (name)
    • URL (url)
    • 出演者id (id)
  • 関連リンク
  • 概要
  • Twitterハッシュタグ
  • 参加者一覧
get_event_participants(event_id)
  • イベントに参加したユーザ名一覧
crawler.get_user_info(user_name)
  • ユーザ名 (_id)
  • お気に入り声優/アーティスト (favorites)
    • 名前 (name)
    • URL (url)
  • フォロワー数 (number_of_folloer)
  • フォロー数 (number_of_following)
get_user_following(user_name)
  • user_name をフォローしているユーザ一覧
get_user_follower(user_name)
  • user_name がフォローしているユーザ一覧

アーティスト名は名寄せされているので便利.あと会場にもidが振られて名寄せされているので便利.あとで会場の情報取得する.
データを見ていると,event_idが増えるにつれ開催日時がどんどん未来へ向かっていくのではなく,Eventernoteが存在する前のイベントを登録している人が結構いて面白い.クロール終わったらもっとデータを眺めたい.

サンプル

if __FILE__ == $0
  # クローラ本体
  crawler = EventernoteCrawler.new
 
  # event_id = 1 のイベント情報取得
  event_id = 1
  pp crawler.get_event_info(event_id)
  #=>
  # {:_id=>1,
  #  :title=>
  #   "アニメロミックスpresents NANA MIZUKI LIVE GRACE 2013  -OPUS?- supported by JOYSOUND Calbeeポテリッチ 1日目",
  #  :date=>"2013-01-19 (土)",
  #   "時間"=>"開場 16:30 開演 18:30 終演 21:30\n         ※終演時間はあくまでも目安になります\n",
  #  :location_info=>{:location=>"さいたまスーパーアリーナ", :url=>"/places/2", :id=>2},
  #  :actors=>
  #   [{:name=>"水樹奈々",
  #     :url=>"/actors/%E6%B0%B4%E6%A8%B9%E5%A5%88%E3%80%85/28",
  #     :id=>28}],
  #  "関連リンク"=>"http://www.mizukinana.jp/special/livegrace2013_opus2/index.html",
  #  "概要"=> ..., 
  #  "Twitterハッシュタグ"=>"#mizukinana"}
 
  # event_id = 1 の参加者一覧を取得
  pp crawler.get_event_participants(event_id)
  #=>
  # ["maeda___keiji",
  #  ...]
 
  # user_name = 'y_benjo' の情報を取得
  user_name = 'y_benjo'
  pp crawler.get_user_info(user_name)
  # {:_id=>"y_benjo",
  #  :favorites=>
  #   [{:name=>"新谷良子", :url=>"/actors/%E6%96%B0%E8%B0%B7%E8%89%AF%E5%AD%90/875"},
  #    {:name=>"ZAQ", :url=>"/actors/ZAQ/3251"},
  #    {:name=>"三上枝織", :url=>"/actors/%E4%B8%89%E4%B8%8A%E6%9E%9D%E7%B9%94/2397"},
  #    {:name=>"nano.RIPE", :url=>"/actors/nano.RIPE/2972"},
  #    {:name=>"大久保瑠美",
  #      :url=>"/actors/%E5%A4%A7%E4%B9%85%E4%BF%9D%E7%91%A0%E7%BE%8E/2643"},
  #    {:name=>"佐藤利奈", :url=>"/actors/%E4%BD%90%E8%97%A4%E5%88%A9%E5%A5%88/1193"}],
  # :number_of_following=>16,
  # :number_of_follower=>1}
 
  # 'y_benjo' がフォローしているユーザ一覧を取得
  pp crawler.get_user_following(user_name)
  # ["hetyo525",
  #  ...]
 
  # 'y_benjo' をフォローしているユーザ一覧を取得
  pp crawler.get_user_follower(user_name)
  # ["rasiel9713"]
end

実際に回してるクローラではユーザのfollowing/follower数がゼロだったらそのページを見に行かないとか細かい事をして時間短縮している.
あとイベント参加者一覧ページではlimit=10000000000とか指定しているのでこれより参加者がいるイベントだと正常に取得できない可能性がある.