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

[Twitter gem](http://rubygems.org/gems/twitter)は非常に優秀ですので、低レイヤーなOAuth gemを使ってTwitter APIにアクセスする必要はまずありません。
ただし、「Twitterからの応答をちゃんと返してくれているのだろうか？」と疑問があったときに、gemを介さずに直接アクセスする手段を知っておくことは大切なことだと思います。
#APIエンドポイント
[REST API v1.1 Resources | Twitter Developers](https://dev.twitter.com/docs/api/1.1)
で確認してください。
#必要なもの
##[OAuth gem](http://rubygems.org/gems/oauth)
```
$ gem install oauth
```
しておきます。
ライブラリとして

```ruby
require 'json'
require 'oauth'
```
が必要です。
Twitter APIの返答がJSONなのでライブラリを入れています。
##Twitter APIのconsumer key/secret、access token/secret
例を挙げておきます（もちろんニセモノ）。

```ruby
consumer_key        = '9Gu1FiE1IfKi32bR8Fw'
consumer_secret     = 'QUnRDVcl5FNCZ9C1j80OAjUJlguMNVyqbdrOrnjtQ'
access_token        = '2194235326-sm2SUkVRHMJ1CdwYG1f04klQMlxc4i05tkSbnZa'
access_token_secret = 'oairK8FMvLZ8dqEVrCgh2brhyL0SCd5wpdkIoNxz62Jdi'
```
取得方法は[twitter OAuthのアクセストークンを取得 - 別館 子子子子子子（ねこのここねこ）](http://d.hatena.ne.jp/riocampos+tech/20130615/p1)を参考にしてください。
#使い方の例
```ruby
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](https://dev.twitter.com/docs/api/1.1/get/statuses/user_timeline)に載っている例です。
APIのエンドポイントURLは次の通りです。
>GET https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=twitterapi&count=2

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

```ruby
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](https://dev.twitter.com/docs/api/1.1/post/statuses/update)
に載っている例です。APIのエンドポイントURLは次の通りです。

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

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

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

```ruby
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](https://qiita-image-store.s3.amazonaws.com/0/19597/8fd5e752-62ab-4cde-4ce1-e9e5e00890e6.png)
半角スペースも日本語も問題なく使えています。
#参考
本記事の詳しい内容（APIの返答やインスタンスの状況など）は
[OAuth gemだけでTwitter APIを使ってみる - 別館 子子子子子子（ねこのここねこ）](http://d.hatena.ne.jp/riocampos+tech/20140522/how_to_access_twitter_api_using_oauth_gem)
に記載しています。
また、Twitterの新機能をAPIアクセスできるか確認した記事もあります。
[ツイッター新機能がAPIに反映されてるか：写真へのタグ付けと写真4枚添付可能 - 別館 子子子子子子（ねこのここねこ）](http://d.hatena.ne.jp/riocampos+tech/20140328/twitter_photos_with_tag)

OAuth gemでのアクセス方法に関してはTwitter公式の記事を参考にしました。
[Single-user OAuth with Examples | Twitter Developers](https://dev.twitter.com/docs/auth/oauth/single-user-with-examples#ruby)