Ruby で gmail API使用 私的まとめ

##Googleコンソールで認証作成

Googleコンソール https://console.developers.google.com で、使うGoogleアカウントにログインして、左サイドメニューの「ライブラリ」→「Gmail API」をクリック。

![fig01.png](https://qiita-image-store.s3.amazonaws.com/0/80250/113d0a76-bc66-7931-71b4-756de74ffb02.png)

Gmail API を「有効にする」をクリックする（「無効にする」に変わる）

![fig02.png](https://qiita-image-store.s3.amazonaws.com/0/80250/01efc8cf-7889-204f-de3a-783bc2073e7f.png)

左サイドメニュー「認証情報」クリックして、「認証情報を作成」で「OASuthクライアントID」を選択。

![fig03.png](https://qiita-image-store.s3.amazonaws.com/0/80250/ff4a9596-f8c7-47e1-a34f-01d15241bcba.png)

ここで、とりあえずWebアプリじゃなくコマンドなどで作る場合（redirect urlはないとか定まらないとか）「その他」を選ばなければならない。（参考： https://stackoverflow.com/questions/28321570/google-oauth-2-0-error-redirect-uri-mismatch)

![fig04.png](https://qiita-image-store.s3.amazonaws.com/0/80250/46c9d025-1f3e-3803-2e06-6b9ad046afdf.png)

確認ダイアログでクライアントIDとクライアントシークレットをコピー、OKする。

![fig05.png](https://qiita-image-store.s3.amazonaws.com/0/80250/b8f50313-4e01-9e80-c6f0-34e8d54d1d93.png)

これは後でも、一覧の鉛筆ボタンでクライアントIDなどが表示されるので、こちらから取ることもできる。

![fig06.png](https://qiita-image-store.s3.amazonaws.com/0/80250/6ba8e648-bb75-e14e-e2dd-4cb61f2b90ba.png)

##gmail-oauth2-tool oauth2.py をダウンロードして使う

下記URLでgmail-oauth2-tools を入手。

https://github.com/google/gmail-oauth2-tools/wiki/OAuth2DotPyRunThrough

ここに書いてあるとおり、python oauth2.py すると、URLが表示される。

> $ python oauth2.py --generate_oauth2_token --client_id=364545978226.apps.googleusercontent.com --client_secret=zNrNsBzOOnQy8_O-8LkofeTR
>To authorize token, visit this url and follow the directions:
>  https://accounts.google.com/o/oauth2/auth?>client_id=364545978226.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&scope=https%3A%2F%2Fmail.google.com%2F
>Enter verification code:

これにアクセスして、表示されるコードを、その下の `Enter verification code:`のところにペーストすると、`Refresh Token`, `Access Token` が取得できる。ただ `Access Token Expiration Seconds: 3600` とあるように1時間で無効になるので、`Refresh Token`を使えるようにしないといけない。

>Refresh Token: 1/q4SaB2JMQB9I-an6F1rxJE9OkOMtfjaz1bPm1tfDpQM
>Access Token: ya29.AHES6ZRKeUQwH2xhirksSUDSyjg9oPuRMMal05Ty0cfFIT_uRfESHw
>Access Token Expiration Seconds: 3600

## Refresh Token に Httparty を使う
新しいTokenを取得するために、Httparty をつかう。
https://github.com/jnunemaker/httparty
（https://stackoverflow.com/questions/12792326/how-do-i-refresh-my-google-oauth2-access-token-using-my-refresh-token を参考にさせていただきました）

```ruby:qiita.rb
options = {
    body: {
      client_id: <クライアントID>,
      client_secret: <クライアントシークレット>,
      refresh_token: <Refresh Token>,
      grant_type: 'refresh_token'
    },
    headers: {
      'Content-Type' => 'application/x-www-form-urlencoded'
    }
}
response = HTTParty.post('https://accounts.google.com/o/oauth2/token', options)
new_token = response.parsed_response['access_token'] if response.code == 200
```
## gem gmail でAPI叩く
使えるTokenさえあれば、あとはgem gmail で簡単に受信など組める。

https://github.com/gmailgem/gmail

gmail = Gmail.connect(:xoauth2, 'email@domain.com', 'ACCESS_TOKEN')

以上です。

補足1：
僕はどこかのサイトの情報でトークン指定は、 :token => 'ACCESS_TOKEN' と書いてあったのをそのまま信じて使いはまった。:token => は要らないので注意。

補足2：
僕が使った時点では、gem gmail の方にまだ https://github.com/gmailgem/gmail/issues/230 の問題があったので、GitHub の master を使わなければならなかった。

以上