/var/www/yatta47.log

/var/www/yatta47.log

やったのログ置場です。スクラップみたいな短編が多いかと。

Twitter APIを使ってリストのTweetをRubyで取得する

Twitter APIを使って、リストを取得してみました。

日本語のところは環境に合わせて値を置き換えてください。

require 'twitter'

client = Twitter::REST::Client.new do |config|
    config.consumer_key        = 'コンシューマキー'
    config.consumer_secret     = 'コンシューマシークレット'
    config.access_token        = 'アクセストークン'
    config.access_token_secret = 'アクセストークンシークレット'
end

user = "ユーザ名"
list_name = "リストの名前"

list_tweet = client.list_timeline( user, list_name)

list_tweet.each do |tw|
    puts tw.user.profile_image_uri(:normal)
    puts tw.user.screen_name
    puts tw.text
    puts tw.created_at
    puts tw.favorite_count
    puts tw.retweet_count
end

これだけで取れてしまうのがすごい。

っていうか、リストのタイムラインを取得するのは認証必要なのかな?その辺がいまいちわかっていない。

今回ハマったところ

書きたかった本題はこれ。

最初は何度やっても下のエラーが出てダメでした。

/usr/local/rvm/gems/ruby-2.3.0/gems/twitter-5.16.0/lib/twitter/rest/response/raise_error.rb:15:in `on_complete': Sorry, that page does not exist. (Twitter::Error::NotFound)
        from /usr/local/rvm/gems/ruby-2.3.0/gems/faraday-0.9.2/lib/faraday/response.rb:9:in `block in call'

「ページが存在しない」って言われているけど、「存在してるよ!!なんでだよ!!」とモニターと一生懸命会話していました。

どうしてなのかさっぱりわからなかったけど、適当に試していたら以下の内容がダメっぽいです。

リスト名が日本語

日本語リストが取得できません。文字エンコードとかすればできるようになるのかもしれないですけど、結局解決方法はわからなかったですが、とりあえずリストの名前が日本語になっているとダメでした。

リスト名に_(アンダースコア)がある

これもダメっぽいです。リスト名にアンスコが入っていると取得できませんでした。

結局のところ

リスト名を英語にする+アンスコを使わない形でようやく取得ができるようになりました。地味なところでハマったわ・・・・ドキュメントとかに禁則文字として書いてあるのかなぁ。時間があるときに調べてみよう。

参考にしたサイト

Ruby - Twitter API でリスト取得! - mk-mode BLOG

Route 477

Class: Twitter::User — Documentation for twitter (7.0.0)

ruby で twitter api を使用する | Lonely Mobiler

RubyのTwitter Gem使い方メモ(リスト周り) - light log

http://qiita.com/Fortinbras/items/5834a1ba1a734c55ca42

http://qiita.com/Fortinbras/items/90abcbd9b25268314943

Twitter gemでツイート検索する場合の要点、及び:since_id指定を有効にするモンキーパッチ - Qiita