Kishima's Hateda log

はてなダイアリー記事の保管庫

TokyuRubyKaigi03におけるビール力の推定

先日のTokyuRubyKaigi03では、大変ありがたいことに、サントリーさんがスポンサーになって下さって、ビールが振る舞われました。
その力がどれほどであったか、Twitterでの発言から推測してみました。(主な目的はRubyを書く練習)

推測方法

  • Togetterから当日の#tqrk03ハッシュタグ付きツイートを回収
  • その中から、「モルツ」「ビール」「サントリー」を含むツイートを選別
  • ビール関連ツイート主のfollower一覧を取得
  • 一覧から重複を排除したfollowerの合計数がビールの力が届いた人数

まあ色々突っ込みどころはありますが、下記のような感じで調査してみた。

 # -*- coding: utf-8 -*-

require "rubygems"
require "nokogiri"
require "rubytter"

$stdout.sync = true 

doc = Nokogiri::HTML(open("togetterのHTML"))
tweets=[]

doc.xpath("/html/body/div[@id='document']/div[@class='contents']/div[@class='left']/div[@class='tweet_box']/ul/li[@class='list_item']/div[@class='list_box balloon_box type_tweet']/div[@class='balloon_module']/div[@class='balloon_body rad5']").each do |d|
  tweet = d.xpath("div[@class='tweet']").inner_text
  id = d.xpath("div[@class='status']/div[@class='status_right']/a[@class='status_name']").inner_text
  time = d.xpath("div[@class='status']/div[@class='status_right']/a[@href]").inner_text
  h = { :name=>id , :comment=>tweet, :time=>time}
  tweets.push h
end

puts "tweets.legth="+tweets.length.to_s

supporters = tweets.select{ |a|
 a[:comment] =~ /モルツ/ or a[:comment] =~ /ビール/ or a[:comment] =~ /サントリー/
}.map{|a|a[:name]}.uniq

p supporters

consumer = OAuth::Consumer.new( 'xxx','xxx',:site => 'http://api.twitter.com' )
token = OAuth::AccessToken.new(consumer,'xxx', 'xxx' )
twitter = OAuthRubytter.new(token)

def twitter.followers(screen_name)    
  begin
    self.followers_ids(screen_name)
  rescue
    []
  end
end

arr = []
supporters.each{|name|
  followers = twitter.followers(name.strip) 
  arr.push *followers
}

puts "all users "+arr.uniq.length.to_s

結果は、#tqrk03のツイート数1182。そのうちビール関連ツイートをしたアカウントは43。
ビールの力が及んだアカウント数、18979!
でした。
次回はどうなるか分かりませんが、また楽しくお酒とRubyを楽しみたいものです。