hello-world.jp.net
webエンジニアのメモ。とりあえずやってみる。

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

公開日時

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

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

2014/09/11 追記

@nobu_ohta からアドバイスをもらい、save_to_tempfileメソッドをなくしてコードが短くなりました。

@nobu_ohta ありがとうございます。


# Gemfile
source 'https://rubygems.org'

gem 'twitter'
gem 'pry'

# tweet.rb
require 'rubygems'
require 'bundler'
require 'open-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'

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を指定して投稿する場合
  open('http://31.media.tumblr.com/46357316a82380b30cddcaaed8d608d1/tumblr_n18p7ehIGl1ttxb2qo2_r1_1280.png') do |tmp|
    twitter_client.update_with_media(str_out, tmp)
  end

  # localの画像を指定する場合はこちら
  #twitter_client.update_with_media(str_out, open("./sample.png"))
rescue => e
  STDERR.puts "[EXCEPTION] " + e.to_s
  exit 1
end
  • 画像ツイート
bundle exec ruby tweet.rb

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

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

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

参考


Related #Ruby

[ruby][rails]sidekiqのnamespaceにハマった

sidekiq3.0.1で確認。

[rails]fragment cacheを使ってみる

fragment cacheを使うとテンプレートの一部を部分的にキャッシュすることが可能になります。

cronでrbenvのrubyを実行する

cronのバッチ経由でrubyスクリプトを実行しようとしたところ、rbenvでインストールしたrubyだったためうまくバッチが実行できない現象に遭遇しました。