🎁
(X)Twitter v2 APIを使ってRubyでのポストをする
memo
v2になってからは対応していたgemがサポートを終了しました。
けど、実はx-rubyというgemが出てきたみたいです。
僕はこれに気づかずに自分で設定しました。
けど、正直gemにするほどでもない短さなのでここに置いておきますね。
(僕が探したところだとあまり欲しい記事が出てこなかった)
# frozen_string_literal: true
require 'oauth'
require 'json'
class Twitter
def initialize
twitter_credentials = Rails.application.credentials[:twitter_bot]
@consumer = OAuth::Consumer.new(
twitter_credentials[:consumer_key],
twitter_credentials[:consumer_secret],
site: 'https://api.twitter.com',
debug_output: true
)
@token = OAuth::Token.new(twitter_credentials[:access_token], twitter_credentials[:access_token_secret])
end
def post(object, url)
twitter_user = "@#{object.user.twitter_id} " : ''
hashtags = object.tags.map { |tag| "##{tag}" }.join(' ')
// 改行は /n で行う
tweet_text = "【タイトル】\n#{object.name}\n#{twitter_user}#{hashtags}\n#{url}"
@consumer.request(
:post,
'https://api.twitter.com/2/tweets',
@token,
{},
{ text: tweet_text }.to_json,
'Content-Type' => 'application/json'
)
end
end
あとは
Sidekiqとか使って非同期でポストするようにしてあげるとか
# frozen_string_literal: true
module TwitterJob
class Tweet < ApplicationJob
queue_as :default
def perform(object, url)
return unless Rails.env.production?
Twitter.new.tweet(object, url)
end
end
end
Discussion