2023年5月26日金曜日

RubyでTwitterV2 API を使ってツイートする方法

RubyでTwitterV2 API を使ってツイートする方法

概要

twitter gem が v2 に対応していないので自作する必要があります

You currently have access to Twitter API v2 endpoints and limited v1.1 endpoints only. If you need access to this endpoint, you may need a different access level. You can learn more here: https://developer.twitter.com/en/docs/twitter-api/getting-started/about-twitter-api#v2-access-level

こんなエラーが出る場合にはライブラリが v1.1 にしか対応しておらず v2 のエンドポイントをサポートしていません

環境

  • macOS 11.7.6
  • ruby 3.2.1

Gemfile

gem 'oauth'
gem 'typhoeus'

サンプルコード

# frozen_string_literal: true

require 'json'
require 'typhoeus'
require 'oauth'
require 'oauth/request_proxy/typhoeus_request'

# TwitterV2を使ってツイートするクラス
class TwitterV2
  def initialize
    @consumer_key        = 'xxx'
    @consumer_secret     = 'xxx'
    @access_token        = 'xxx'
    @access_token_secret = 'xxx'
    @endpoint            = 'https://api.twitter.com/2/tweets'
  end

  def options(payload)
    {
      method: :post,
      headers: {
        'User-Agent': 'v2CreateTweetRuby',
        'content-type': 'application/json'
      },
      body: JSON.dump(payload)
    }
  end

  def consumer
    OAuth::Consumer.new(@consumer_key, @consumer_secret, { site: 'https://api.twitter.com', debug_output: false })
  end

  def access_token
    OAuth::AccessToken.new(@consumer, @access_token, @access_token_secret)
  end

  def post_tweet(url, oauth_params, payload)
    request = Typhoeus::Request.new(url, options(payload))
    oauth_helper = OAuth::Client::Helper.new(request, oauth_params.merge(request_uri: url))
    request.options[:headers].merge!({ Authorization: oauth_helper.header })
    request.run
  end

  def tweet(text)
    payload = { text: text }
    oauth_params = {
      consumer: consumer,
      token: access_token
    }
    post_tweet(@endpoint, oauth_params, payload)
  end
end

TwitterV2.new.tweet("test")

参考サイト

0 件のコメント:

コメントを投稿