スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

とあるユーザの独言収集

つまり、TwitterのユーザのタイムラインをCSVで取得するってことです。
アカウント名を渡して呼び出すと、つぶやき内容, つぶやいた時間を出します。

ruby user_timeline.rb aoyagikouhei > tweet.csv

で実行できます。プログラムは以下の通りです。

# coding:utf-8
require 'twitter'
require 'date'

PAGE_COUNT = 200

# Twitterからuser_timelineを取得する
def get_user_timeline(screen_name)
options = {'count' => PAGE_COUNT}
Twitter.user_timeline(screen_name, options).each do |line|
yield(line)
end
end

# 波ダッシュを変換する
def convert(src)
src.gsub("\u301c", "\uff5e")
end

# UTCから日本時間に変換する
def make_time(created_at)
day = DateTime.parse(created_at)
day = day.new_offset(Rational(9,24))
day.strftime('%Y-%m-%d %H:%M:%S')
end

# CSVを作成する
def make_csv(line, separator=",", line_separator="\r\n")
convert(line['text']) + separator +
make_time(line['created_at']) +
line_separator
end

if ARGV.size < 1
puts "user_timeline screen_name"
exit
end

get_user_timeline(String.new(ARGV[0])) do |line|
print make_csv(line).encode("CP932")
end

rubyで書いてまして、外部ライブラリとしてtwittreを利用しています。
gem install twitter
でインストールしてください。
以下プログラムの解説です。

気軽に書いてみたんですが、いきなり文字コードで手間取りました。
「?」がうまく変換できないんですよね。
詳しくはruby, 波ダッシュあたりをぐぐってみてください。

UTCから日本時間に変換するところですが
rubyの日付時間のオブジェクトってあんまり洗練されてない気が。
day.new_offset(Rational(9,24))
こんなの、一目見て何やってるんだかわかりませんよね。
timezoneの属性が無いからだと思いますが。

make_csvを改造すれば、もっと色々情報が取れるようになります。
まあ、あと緯度経度とかつぶやいた時のツールくらいなもんですが。

ARGV[0]に対してString.newしていますが、rubyのtwitterライブラリが内部で破壊的なメソッドを実行しているため、frozenな文字列のARGV[0]ではエラーになってしまいました。
ライブラリとか作る場合、こういうことを考慮しないとだめなんだということが参考になりました。
破壊的なメソッド実行前には文字列はコピーした方がいいようです。
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。