鴨川にあこがれる日々

軽い技術っぽい記事かいてます

Twitterでフォロー関係にあるアカウント一覧をCSVで取得 By Ruby

Twitterソーシャルグラフが作りたくなったので、まず自分のフォローしているユーザーのID、名前、紹介文だけ取得することにした。
いくつか検索でRubyで取得する方法を調べたが、next_cursorがどうとかで試したができず、自分でやってみたら680人ならすぐに取得ができた。

コード

#! /usr/local/bin/ruby -Ku
# -*- coding: utf-8 -*-
require 'twitter'

# アプリケーションキー 個人ごと
consumer_key = "consumer_key"
consumer_secret = "consumer_secret"
access_token = "access_token"
access_token_secret = "access_token_secret"

# 認証
client = Twitter::REST::Client.new do |config|
  config.consumer_key = consumer_key
  config.consumer_secret = consumer_secret
  config.access_token = access_token
  config.access_token_secret = access_token_secret
end

  friends = client.friends
  friends.each do |elem|
    text = elem['description'].gsub(',','|').gsub(/\n|\r|\r\n|\n\r/,' ')
    print("#{elem['id']},#{elem['name']},#{text}\n")
  end

リダイレクトして出力ファイルを指定してやれば「id,アカウント名,紹介文」のcsvファイルが作成できる。自己紹介の改行とカンマはgsubでそれぞれ半角スペースと|に置換した。
to_aというのもあったが、APIの制限にかかってしまい

/Library/Ruby/Gems/2.0.0/gems/twitter-5.8.0/lib/twitter/rest/response/raise_error.rb:17:in `on_complete': Rate limit exceeded (Twitter::Error::TooManyRequests)

というエラーがでる。

参考
- http://rdoc.info/gems/twitter

後日談

Rubyとgemのversionをあげたら上記のやり方だと注意される..

in `block in <main>': [DEPRECATION] #["description"] is deprecated. Use #description to fetch the value.

descriptinとidとnameは違う書き方で.

text = elem.description.gsub(',','|').gsub(/\n|\r|\r\n|\n\r/,' ')
print("#{elem.id},#{elem.name},#{text}\n")

とすればよいです.