ブログ・ア・ラ・クレーム

技術的なメモとかライフログとか。

指定した単語が含まれるつぶやき数を数え上げる何か

これまた、Rubyで下らないスクリプトを書いたりしました。
しかも大分手抜きした簡単実装。
内容としては、以下のようなもの。

TwitterのuserIDを指定。

・指定したIDのつぶやきを取得してきて、あらかじめYAMLファイルに記述されたキーワードが含まれるつぶやきの数を数える。

・キーワードに対する集計結果を表示

……誰得すぐる。
と、とりあえず掲載しておきますね^q^



keyword.yaml(検索対象のキーワードリスト例)


list:
- keyword: 天子
- keyword: てんこ
- keyword: てんし


tweetcount.rb(本体)


#!/usr/bin/ruby

require '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されたつぶやきのみを対象にしてカウント
・複数ユーザを対象にカウントを行う
などなど……ですかね?