55
53

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-05-22

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

55
53
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
55
53

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?