Twitterのログを取ってみた
Twitterの最大の売りの1つは、APIがたくさん公開されていることらしい。
最近ちょっとRubyを勉強しているので題材として、Twitterの自分の発言・自分への言及を保存してみた。
Twitter検索ってのを使えばいいだけかと思いきや、自分の発言でも検索に引っかからないもの、発言が検索にまったく引っかからないアカウントもあった(なんかそういうものらしい)。
そんなわけで自分の発言と自分への言及を別々に取ってきたのをくっつけて、古い順にソートして、htmlのtableに変換しています。
ついったー(Twitter)発言まとめツールの結果のtableと比べて、URLと@hogeにリンクが貼られているようなものを吐き出します。
よい書き方とかはさっぱり分からないけど、とりあえず動いてはいる。
APIの仕様で、200件しか一度に取ってこられないみたいなので、200件溜まりそうになるたびに動かす必要がある。前に取ってきたものとマージ、とかは実装していない。
あと、Twitter4Rを若干書き換えた(参照:Twitter4Rでmentions APIを使う - gonpingyのフレッシュ日記)。
はじめてJSONなるものに触れたけど、XMLよりずっと便利なことが分かった!
その他参考にしたサイト:
Rubyでtwitter APIを使う: Kwappa開発室
Twitter API 仕様書
Route 477 - モナドって結局なんなの , gemcutterの使い方まとめ (2009年秋)
↓こんな感じ(replyが入っている部分を出したかったため、勝手に引用させていただいたきました。申し訳ございません)
「成功本は、天才の打法か、私が宝くじで3億当たった方法、のどっちか」うまい! icchw: Mon, 2009/10/19 23:05 |
|
@icchw 文化系ラジオですね、わかります! RT @icchw 「成功本は、天才の打法か、私が宝くじで3億当たった方法、のどっちか」うまい! JP_Kaji: Tue, 2009/10/20 12:50 |
|
@pochelsea おれなんか昔Excel2003に分析ツールをインストールしようとしたら、謎のエラーでできなかったから、腐らないように!w icchw: Tue, 2009/10/20 23:45 |
|
@icchw ありがとうございますーー 日経平均といろいろなものの相関を調べてるんですが、、典型的パラ経の私はこんなん慣れてなくて・・・なんだか意外と難しくてめげそうですwがんばります! pochelsea: Tue, 2009/10/20 23:49 |
|
@pochelsea おれも非農業雇用者数増減とISMなんとかでまさにそれをやろうとして、インストール問題で心が折れた。。 icchw: Tue, 2009/10/20 23:55 |
|
@icchw まじですか!とりあえず、linest関数と散布図を駆使してはいるのですが、、、合ってるのかさえわかりませんww pochelsea: Wed, 2009/10/21 00:00 |
|
平方根でそれなりに近似できるらしい!→世帯の可処分所得合計を世帯人員数の平方根で割ったものを,その世帯の各個人の「等価可処分所得」http://blogs.yahoo.co.jp/iwamotoseminar/31038769.html icchw: Thu, 2009/10/22 22:21 |
|
知らなかった。これ考えた人すごいな!→「2と1は等しい」 数学界で論議http://kyoko-np.net/2008090501.html icchw: Thu, 2009/10/22 22:38 |
|
css管理のテクニックってこれくらいしか方法がないんかな。。→http://bit.ly/2nWKki icchw: Thu, 2009/10/22 22:46 |
|
@icchw そのサイトもちろんブックマークに入ってますw JP_Kaji: Thu, 2009/10/22 22:47 |
|
先人たちが書かれたcssはどれがどこで使われているのかさっぱり分からなくて整理する気にもなれない。eclipseみたいにF3でジャンプ!とかできるツールないんかな。 icchw: Thu, 2009/10/22 22:49 |
# -*- coding: utf-8 -*- require 'rubygems' require 'twitter' require 'json' require 'time' class TwitterApi # twitterのID / PASSWORD USERNAME = 'icchw' PASSWORD = '*****' # コンストラクタ def initialize @client = Twitter::Client.new(:login => USERNAME, :password => PASSWORD) @dir = "./twitter_log/" @t = Time.now.strftime("%Y_%m_%d_%H_%M") @file_j = @dir + @t + ".json" @file_h = @dir + @t + ".html" end # 結果を取得し、日時順にソートし、jsonファイルで保存する def sorted_json timeline = @client.timeline_for(:me, :count => 200) timeline += @client.timeline_for(:mentions, :count => 200) contents = [] timeline.each do |status| contents << status.to_hash end contents.sort! {|a,b| a[:created_at] <=> b[:created_at] } File.open(@file_j, 'w') { |file| contents.each do |element| file.puts element.to_json end } end # 保存したjsonファイルを読み込んで、tableに変換してhtmlファイルを保存する def json2html File.open(@file_h, 'w') { |write| File.open(@file_j) { |read| write.puts %!<table class="twitter_log_tbl" style="border: none;">! read.each_line do |line| status = JSON.parse(line) write.puts %! <tr class="twitter_status" id="#{status["id"]}">! write.puts %! <td class="twitter_image"><a href="http://twitter.com/#{status["user"]["screen_name"]}"><img src="http://img.tweetimag.es/i/#{status["user"]["screen_name"]}_n" width="48" /></a></td>! write.puts %! <td class="twitter_text"><p>#{href(status["text"])}</p><p style="text-align: right;">#{status["user"]["screen_name"]}: <a href="http://twitter.com/#{status["user"]["screen_name"]}/statuses/#{status["id"]}">#{date2s(status["created_at"])}</a></p></td>! write.puts %! </tr>! end write.puts %!</table>! } } end def save_log sorted_json json2html end private # URLとアカウント名にリンクを貼る def href(text) text.sub!(/(http:.+)$/, '<a href="\1">\1</a>') text.gsub!(/@(\w+)/, '@<a href="http://twitter.com/\1">\1</a>') return text end # 日付をformat def date2s(created_at) Time.parse(created_at).strftime("%a, %Y/%m/%d %H:%M") end end if __FILE__ == $0 twapi = TwitterApi.new twapi.save_log end
C:\>ruby -v ruby 1.9.1p243 (2009-07-16 revision 24175) [i386-mswin32] C:\>gem -v 1.3.5 C:\>gem list *** LOCAL GEMS *** columnize (0.3.1) gemcutter (0.1.6) json (1.1.9) json_pure (1.1.9) linecache (0.43) net-scp (1.0.2) net-ssh (2.0.15) ruby-debug (0.10.3) ruby-debug-base (0.10.3) rubygems-update (1.3.5) twitter4r (0.3.2, 0.3.1)