指定した単語が含まれるつぶやき数を数え上げる何か
これまた、Rubyで下らないスクリプトを書いたりしました。
しかも大分手抜きした簡単実装。
内容としては、以下のようなもの。
・TwitterのuserIDを指定。
↓
・指定したIDのつぶやきを取得してきて、あらかじめYAMLファイルに記述されたキーワードが含まれるつぶやきの数を数える。
↓
・キーワードに対する集計結果を表示
……誰得すぐる。
と、とりあえず掲載しておきますね^q^
keyword.yaml(検索対象のキーワードリスト例)
list:
- keyword: 天子
- keyword: てんこ
- keyword: てんし
tweetcount.rb(本体)
#!/usr/bin/rubyrequire 'scanf'
require 'twitter'
require 'yaml'
# ---------------------------------------------------------------------
# ここから個人設定
# ---------------------------------------------------------------------# 自分のTwitter userIDとPassword(TL取得に必要。必須)
user = "userid"
pass = "passwd"# 集計対象のTwitter userID(必須)
target = "target"# TL20件毎の、読み込み待ち間隔[秒]
WAIT_TIME = 5# YAMLファイルの名前
YAML_FILE = "keyword.yaml"# どこまでつぶやきを遡るか(20tweet/1ページ。0なら最後まで読み込み)
PAGE_LIMIT = 3# ---------------------------------------------------------------------
# ここまで個人設定
# ---------------------------------------------------------------------
# カウント対象のキーワードを読み込み
keyword = YAML.load_file(YAML_FILE)
keyword['list'].each{ |words|
words['count'] = 0
}# 通信確立
httpauth = Twitter::HTTPAuth.new(user, pass)base = Twitter::Base.new(httpauth)# つぶやきを取得して、キーワードと合致した数を集計page_num = 1loop{ tl = base.user_timeline(:id => target, :page => page_num) if (tl == []) || ((page_num > PAGE_LIMIT) && PAGE_LIMIT != 0) then break end
tl.each{ |tweet|
tmp = Kconv.kconv(tweet.text, Kconv::SJIS)
puts tmp
keyword['list'].each{ |words|
if tmp.index(words['keyword']) != nil then
words['count'] += 1
puts "counter + 1: " + words["keyword"]
end
}
}
puts "--------------------------------------------"
page_num = page_num + 1
sleep WAIT_TIME
}# 集計した結果の出力
keyword['list'].each{|words|
print words["keyword"] + ": " + words['count'].to_s(10) + "\n"
}
改善案(もういじるつもりは無いけど……)
・特定の日付にpostされたつぶやきのみを対象にしてカウント
・複数ユーザを対象にカウントを行う
などなど……ですかね?