注意:Twitter gemのバージョンが5未満の設定ですので、5以上だと以下の手順は無効ですゴメンナサイ
前準備
前提としてTwitter Application Managementでconsumer_key, consumer_secret, oauth_token, access_token, oauth_token_secretを取得済みであるとします。
もちろんtwitter gemもインストール済みである必要があります。
設定ファイルset.rbを作業ディレクトリに用意します。def set Twitter::Client.new(:consumer_key => "your_consumer_key", :consumer_secret => "********", :oauth_token => "********", :oauth_token_secret => "********") endtwitter gemを使ったruby一行野郎(ツイート・トレンド・検索・フォロー&フォロワー一覧・リスト一覧&操作…) - 別館 子子子子子子(ねこのここねこ)
として別ファイルを用意させていましたが、ファイルのあるディレクトリでしか実行できないのが残念でした。
環境変数に登録すればいいんじゃね?と思って試してみました。
.bashrcに登録
環境変数へ登録するために、.bashrcへ以下の内容を追加します(修正済み)。
export CONSUMER_KEY="your_consumer_key" export CONSUMER_SECRET="your_consumer_secret" export OAUTH_TOKEN="your_oauth_token" export OAUTH_TOKEN_SECRET="your_oauth_token_secret" export TW='Twitter::Client.new(consumer_key:ENV["CONSUMER_KEY"],consumer_secret:ENV["CONSUMER_SECRET"],oauth_token:ENV["OAUTH_TOKEN"],oauth_token_secret:ENV["OAUTH_TOKEN_SECRET"])'
例
例えば検索するときですが、設定ファイルset.rbを使う場合だと
ruby -rtwitter -e 'load "./set.rb"; t = set; puts t.search("riocampos", {count:100}).to_hash[:statuses].map{ |i| "@#{i[:user][:screen_name]}: #{i[:text]}"}'
となり、「load "./set.rb"; t = set;」の部分が不要になります。その代わりにtがすこしややこしくなります。
ruby -rtwitter -e 'eval(ENV["TW"]).search("riocampos", {count:100}).to_hash[:statuses].map{ |i| puts "@#{i[:user][:screen_name]}: #{i[:text]}"}'
さらに-rtwitterを略するには
環境変数RUBYOPTに-rtwitterを登録すればOKです。
.bashrcにさらに追加します。
export RUBYOPT="-rtwitter"
これでほんの少し短く出来ます。
ruby -e 'eval(ENV["TW"]).search("riocampos", {count:100}).to_hash[:statuses].map{ |i| puts "@#{i[:user][:screen_name]}: #{i[:text]}"}'
なぜツイートできないの?
しかし。
ツイートも同じくできるかと思ったのですが
$ ruby -rtwitter -e 'eval(ENV["TW"]).update("tweet by one liner!")' /Users/common/.rbenv/versions/1.9.3-p448/lib/ruby/gems/1.9.1/gems/twitter-4.8.1/lib/twitter/response/raise_error.rb:21:in `on_complete': Your credentials do not allow access to this resource (Twitter::Error::Forbidden) (以下略)
とエラーを返されてしまいました。
403 Forbidden
のようです。なぜでしょう…。
解決しましたw → consumer key/secretのみの認証だとTwitterサーバにApplication-only authenticationでのアクセスだと勘違いされる - 別館 子子子子子子(ねこのここねこ)