Edited at

OAuth gemだけでTwitter APIを使ってみる

More than 3 years have passed since last update.

Twitter gemは非常に優秀ですので、低レイヤーなOAuth gemを使ってTwitter APIにアクセスする必要はまずありません。

ただし、「Twitterからの応答をちゃんと返してくれているのだろうか?」と疑問があったときに、gemを介さずに直接アクセスする手段を知っておくことは大切なことだと思います。


APIエンドポイント

REST API v1.1 Resources | Twitter Developers

で確認してください。


必要なもの


OAuth gem

$ gem install oauth

しておきます。

ライブラリとして

require 'json'

require 'oauth'

が必要です。

Twitter APIの返答がJSONなのでライブラリを入れています。


Twitter APIのconsumer key/secret、access token/secret

例を挙げておきます(もちろんニセモノ)。

consumer_key        = '9Gu1FiE1IfKi32bR8Fw'

consumer_secret = 'QUnRDVcl5FNCZ9C1j80OAjUJlguMNVyqbdrOrnjtQ'
access_token = '2194235326-sm2SUkVRHMJ1CdwYG1f04klQMlxc4i05tkSbnZa'
access_token_secret = 'oairK8FMvLZ8dqEVrCgh2brhyL0SCd5wpdkIoNxz62Jdi'

取得方法はtwitter OAuthのアクセストークンを取得 - 別館 子子子子子子(ねこのここねこ)を参考にしてください。


使い方の例

require 'json'

require 'oauth'

consumer_key = <consumer_key>
consumer_secret = <consumer_secret>
access_token = <access_token>
access_token_secret = <access_token_secret>

consumer = OAuth::Consumer.new(
consumer_key,
consumer_secret,
site:'https://api.twitter.com/'
)
endpoint = OAuth::AccessToken.new(consumer, access_token, access_token_secret)

# GET
response = endpoint.get(<API_ENDPOINT_URL>)
result = JSON.parse(response.body)

# POST
response = endpoint.post(<API_ENDPOINT_URL>, {<PARAMETER_HASH>})
result = JSON.parse(response.body)


GETの例:@twitterapiのツイート履歴を見る

GET statuses/user_timeline | Twitter Developersに載っている例です。

APIのエンドポイントURLは次の通りです。


GET https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=twitterapi&count=2


アカウント名がtwitterapiのツイートを2つ取得する、ということです。パラメータに関しては上のリンクから確認してください。

response = endpoint.get('https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=twitterapi&count=2')

=> #<Net::HTTPOK 200 OK readbody=true>

返答はNet::HTTPOKクラスのオブジェクトですのでresponse.bodyでbodyが取得できます。JSONなのでJSON.parse(response.body)で戻せます。


POSTの例:ツイートする

POST statuses/update | Twitter Developers

に載っている例です。APIのエンドポイントURLは次の通りです。


POST https://api.twitter.com/1.1/statuses/update.json


ツイートに日本語が使えるか気になりますので


tweet messageには 日本語が使えます。


という文をツイートしてみましょう。

ツイート文はPOSTデータに入れるのですが、以下のようにハッシュで渡します。

response = endpoint.post('https://api.twitter.com/1.1/statuses/update.json', status: 'tweet messageには 日本語が使えます。')

=> #<Net::HTTPOK 200 OK readbody=true>


ツイート結果

スクリーンショット 2014-05-22 20.11.48.png

半角スペースも日本語も問題なく使えています。


参考

本記事の詳しい内容(APIの返答やインスタンスの状況など)は

OAuth gemだけでTwitter APIを使ってみる - 別館 子子子子子子(ねこのここねこ)

に記載しています。

また、Twitterの新機能をAPIアクセスできるか確認した記事もあります。

ツイッター新機能がAPIに反映されてるか:写真へのタグ付けと写真4枚添付可能 - 別館 子子子子子子(ねこのここねこ)

OAuth gemでのアクセス方法に関してはTwitter公式の記事を参考にしました。

Single-user OAuth with Examples | Twitter Developers