読者です 読者をやめる 読者になる 読者になる

Net::HTTPでTwitterのTimelineを取得する

ruby

Rubyのおべんきょうの時間です。

APIを使ってなにかしてみようと思い、日頃使っているTwitterAPIを使ってみることにした。


参考:Twitter API 仕様書 (勝手に日本語訳シリーズ)

Timelineを取得してみる

認証とか関係なさそうなのでPublicTimelineを取得してみる。
それっぽいNet::HTTPを使って接続。

require 'net/http'
status = ''

Net::HTTP.version_1_2
Net::HTTP.start('twitter.com', 80){|h|
  status = h.get('/statuses/public_timeline.json')
}
fl = File.new('PublicTimeLine.txt', 'w+')
fl.puts status

Net::HTTPでサイトを開き、APIをGETしてくる。
最後にファイルに書き込んでいるけれど、普通にputsだけでもいいです。

これだけ。ずいぶんとまあ簡単ですね。

自分のアカウントへの返信を取得する

次は、Basic認証が楽そうなのでopen-uriを使ってみる。
PublicTimeLineを取得したときはよくわからん文字列がだらだら出てきたので、意味のわかる形にしたい。
というわけで出力時にJSONデータの処理をしてみた。


JSONパーサは、WebOS Goodiesさんのsimple-jsonを使わせてもらいました。
Ruby 用 JSON パーサーを更新、 JSON への変換も追加 - WebOS Goodies

require 'open-uri'
require 'simple-json'

Id = 'gom'
Pass = '********'
Uri = 'http://twitter.com/statuses/replies.json'
auth_info = [Id, Pass]
opt = {:http_basic_authentication => auth_info}
status = open(Uri, opt).read

parser = JsonParser.new()
arr_status = parser.parse(status)

fl = File.new('MyReplies.txt', 'w+')
arr_status.each{|s|
  fl.puts 'name: ' + s['user']['name']
  fl.puts 'status: ' + s['text']
  fl.puts 'time: ' + s['created_at']
  fl.puts ''
}