53
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
53
Help us understand the problem. What are the problem?