概要
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 件のコメント:
コメントを投稿