Ruby で Twitter に画像を投稿&ダウンロードする


twitter_api ライブラリのインストール

Twitter API のラッパー・ライブラリ https://rubygems.org/gems/twitter_api をインストール。

$ gem install twitter_api

サンプルコード

require 'twitter_api'
require 'json'
require 'open-uri'

# Twitter API の認証情報をセット
t = TwitterAPI::Client.new({
  :consumer_key => 'YOUR_CONSUMER_KEY',
  :consumer_secret => 'YOUR_CONSUMER_SECRET',
  :token => 'YOUR_ACCESS_TOKEN',
  :token_secret => 'YOUR_ACCESS_SECRET'
})

# PNG画像をアップロードして media_id を取得
image_1 = File.open('sample1.png', 'rb').read
res_1 = t.media_upload({'media' => image_1})
media_id_1 = JSON.parse(res_1.body)['media_id_string']

# JPEG画像をアップロードして media_id を取得
image_2 = File.open('sample2.jpg', 'rb').read
res_2 = t.media_upload({'media' => image_2})
media_id_2 = JSON.parse(res_2.body)['media_id_string']

# media_id を指定して画像付きツイートを投稿
res_3 = t.statuses_update({
  'status' => "hello, こんにちは #{Time.now.to_i}",
  'media_ids' => media_id_1 + ',' + media_id_2 # カンマ区切り
})
status_id = JSON.parse(res_3.body)['id_str']

# ツイート情報を取得して画像をダウンロード
res_4 = t.statuses_show_id({'id' => status_id})
tweet = JSON.parse(res_4.body)
puts tweet['text'] # ツイートのテキストを出力
tweet['extended_entities']['media'].each do |media|
  url = media['media_url']
  puts url # 画像のURLを出力
  name = File.basename(url)
  # 画像をダウンロードして保存
  open(name, 'wb').write(open(url).read)
end

参考資料