basyura's blog

あしたになったらほんきだす。

twitter4r で list のタイムラインを取得する

twitter4r にはまだ list を扱う API が無いようなので、本体に手を入れないで機能追加してみた。

require 'twitter'

module Twitter
  class List
    include ModelMixin
    @@ATTRIBUTES = [:lists]
    attr_accessor *@@ATTRIBUTES

    class << self
      def attributes; @@ATTRIBUTES; end
    end
  end
end
class Twitter::Client
  # 登録済みの list 一覧を取得
  def lists(options = {})
    uri = "/#{@login}/lists.json"
    response = http_connect {|conn| create_http_get_request(uri, options) }
    timeline = Twitter::List.unmarshal(response.body)
  end
  # 内部変数に list にアクセスする uri を追加
  def add_timeline_uri(type , uri)
    @@TIMELINE_URIS[type] = uri
  end
  # 内部変数に list にアクセスする uri を追加
  def add_lists_to_timeline_uris
    lists.lists.each do |list|
      name = list["slug"].to_sym
      uri  = "/#{@login}/lists/#{name}/statuses.json"
      add_timeline_uri(name , uri)
    end
  end
end

username = 'username'
password = 'password'

client = Twitter::Client.new(
  :login    => username,
  :password => password
)
# 登録済みの list が使えるように内部変数に追加
client.add_lists_to_timeline_uris
# 登録している list 名を指定
client.timeline_for(:tottoruby).to_a.collect {|status|
  puts status.user.screen_name + " " + status.text
}