[ruby][twitter]画像付きのツイートをする


[まとめ] 現在開催中のKindleセール情報はこちら

twitter apiを使うとapi経由で画像付きのツイートをすることが可能なので簡単なサンプルを作って検証してみました。

  • 適当なディレクトリを作成
mkdir tweet_img
cd tweet_img
mkdir tmp
chmod 777 tmp


2014/09/11 追記
@nobu_ohta からアドバイスをもらい、save_to_tempfileメソッドをなくしてコードが短くなりました。
@nobu_ohta ありがとうございます。
元のコードは一番下に移動させておきました。

  • 画像ツイート
bundle exec ruby tweet.rb

これで画像付きツイートができました。

実際に試したのがこちら

なおTwitterCardsが設定されたURLと画像投稿を一緒にやってみたのですが、この場合は画像表示が優先されました。

TwitterCardはツイートの詳細じゃないと表示されないですが、画像投稿の場合はタイムライン上に表示されるので、他の人から目につきやすくなりますね。

参考


以下は短くなる前の元のコードです

  • Gemfile 作成
# Gemfile

source 'https://rubygems.org'

gem 'twitter'
  • bundle install
bundle install --path vendor/bundler
  • tweet.rb 作成
#tweet.rb

require 'rubygems'
require 'bundler'
require 'net/http'
require 'tempfile'
require 'uri'

Bundler.require

CONSUMER_KEY     = 'YOUR CONSUMER_KEY'
CONSUMER_SECRET  = 'YOUR CONSUMER_SECRET'
ACCESS_TOKEN_KEY = 'YOUR ACCESS_TOKEN_KEY'
ACCESS_SECRET    = 'YOUR ACCESS_SECRET'

# urlの画像を一時ファイルとして保存
def save_to_tempfile(url)
  uri = URI.parse(url)
  Net::HTTP.start(uri.host, uri.port) do |http|
    resp = http.get(uri.path)
    file = Tempfile.new('img', './tmp', 'wb+')
    file.write(resp.body)
    file.flush
    file
  end
end

begin
  twitter_client = Twitter::REST::Client.new do |config|
    config.consumer_key        = CONSUMER_KEY
    config.consumer_secret     = CONSUMER_SECRET
    config.access_token        = ACCESS_TOKEN_KEY
    config.access_token_secret = ACCESS_SECRET
  end

  # 投稿テキスト
  str_out = "週刊Qiita http://weekly-qiita.tumblr.com/"

  # 画像URLを指定して投稿する場合
  media = save_to_tempfile('http://31.media.tumblr.com/46357316a82380b30cddcaaed8d608d1/tumblr_n18p7ehIGl1ttxb2qo2_r1_1280.png')
  twitter_client.update_with_media(str_out, open(media))

  # localの画像を指定する場合はこちら
  #twitter_client.update_with_media(str_out, open("./sample.png"))
rescue => e
  STDERR.puts "[EXCEPTION] " + e.to_s
end

[まとめ] 現在開催中のKindleセール情報はこちら