メールでTweet! その1
ひでのふは出先でつぶやきたいなあと思った時には、trtw.jp のメールアドレスに
メールを送ってつぶやくサービスを使っていました。2015/3/25 までは!

それが突然こんなこと言われてできなくなっちゃいましたw

http://internet.watch.impress.co.jp/docs/news/20150325_694431.html

ひでのふはガラケーしか持っていません
当面スマホを持つ予定はまったくありませんw
よって、この機能が使えなくなるのは大変痛手なので
仕方なく自分で作ってみることにしました。

最近流行りの REST の勉強も兼ねてってことで。

具体的にやろうとしているのはこんな感じのこと。

STEP1: Bash から cURL を呼び出して REST 使う機能の実装。
→ なんで cURL かって言うと、REST のプリミティブな理解がないと作れないから!
→ php とか javascript とか C# 使うともっと簡単に作れるんだけど
あえてそれはしない。だってお勉強だもの。

STEP2: STEP1 で作ったものを C# で作り直して Microsoft Azure で動かす。
→ なんで Azure かって言うと、ちっちゃいインスタンスなら無料で動かせるから!

今回の連載では STEP1 の実現を目指します。
今回の連載は計4回です。

続きを読む
【2015/08/04】 REST | トラックバック(0) | コメント(0) | page top↑
メールでTweet! その2
▼ 続けて OAuth ってなんなのか?

ひでのふが実際手を出してみた感覚では
REST を理解する過程の内、8割方 OAuth の理解に費やした。
そんなイメージです。

まず、OAuth にはいくつか種類があります。
Twitter を例にとるとこんなことが書いてあります。

https://dev.twitter.com/oauth/overview

ちなみに7つもあります。けっこうありますw

1:Twitter IDでログイン(Sign in with Twitter)
→ 他のサイトにログインする時、Twitter に認証を任せちゃう仕組み。
今回は使用しないので詳細はパス。

2:3-legged OAuth
→ 自分の Web サイトに他人の Twitter の内容を表示させたりする時に使う。
→ 例えば Blog サービス運営者(自分)が、ユーザ自身(他人)の Twitter 用の
ウィジェットを用意する時に等に使われる。
→ 仕組みとしては 'Sign in with Twitter' と同じ。らしい。
今回は使用しないので詳細はパス。

3:PIN を入力して認証(PIN-based OAuth)
→ 別画面で PIN を表示し、その PIN を入力することで認証する仕組み。
→ ブラウザの Twitter 用クライアントなんかで良く使われている手法。
今回は使用しないので詳細はパス。

4:認証を dev.twitter.com から取得(Tokens from dev.twitter.com)
→ 自分自身でアプリケーションを作成し、自分自身の Twitter を操作する時に使う。
今回は、まず最初にこのやり方で臨む。

5:xAuth
→ ユーザ名とパスワードを Twitter 側に送って認証する仕組み。
→ つぶやきの読み書きは出来るけれど、DM が見れない等の制限がある。
他の方式と比べると悪用しやすい所為か、この認証を使用するには Twitter に
理由を説明して許可を貰う必要がある。
次回はこのやり方を使うつもりだけど、詳細もその時w

6:OAuth Echo
→ 何らかの形で認証を取得した後、特別なヘッダーを使って認証する仕組み。
→ たとえば、写真の投稿とつぶやきを同期させる必要があるような時に使う。
今回は使用しないので詳細はパス。

7:アプリケーションのみの認証(Application-only authentication)
→ アプリケーションだけが持つ認証情報のみで認証する仕組み。
→ 出来ることの制限が凄く多いw 基本 Read-Only と理解しておけばOK。
今回は使用しないので詳細はパス。

続きを読む
【2015/08/05】 REST | トラックバック(0) | コメント(0) | page top↑
メールでTweet! その3
▼ REST を試してみる。

Twitter はアプリ開発者向けに REST を試してみるための GUI が用意されています。
手順は以下の通り。

前提条件:twitter のアカウントを持っていること!

1.https://apps.twitter.com/ にアクセスする。
→ [Create New App] ってボタンがあるので、それを押す。

2.Application Details は下記の要領で入力。
Name *:アプリの名前なのでテキトーに。ただし他のアプリと重複する名前は不可。
ひでのふは HidenovMailTweeterTest とした。
Description *:アプリの説明なのでテキトーに。
ひでのふは HidenovMailTweeterTest とした。
Website *:アプリ用のウェブサイトなのでテキトーに。
ひでのふは GitHub のリポジトリとした。
Callback URL :必須でないので入力してない。
OAuth の認証後に戻るページだとのこと。

これらの設定は後からでも変えられます。

3.Keys and Access Tokens のタブを開く。
→ 下の方に[Create Access Token]ってボタンがあるので、それを押す。

4.Details のタブを開く。
→ 右の方に[Test OAuth]ってボタンがあるので、それを押す。

5.OAuth tool の画面に遷移するので、下記の要領でデータを設定。
Request type: → POST を選ぶ
Request URI: → https://api.twitter.com/1.1/statuses/update.json を入力
Request query: → status=テストデショデショ を入力

6.下の方にある Get OAuth signeture のボタンを押す。
→ OAuth Signing Results って画面が表示されて
その中に以下のよーな cURL のコマンドが出ている。
数分以内にcURLコマンドを実行すると、自分のアカウントにtweet が投稿される。


curl --request 'POST' 'https://api.twitter.com/1.1/statuses/update.json'
--data 'status=テストデショデショ'
--header 'Authorization: OAuth oauth_consumer_key="xxxxxxxxxxxxxxxxxxxxxxxxx",
oauth_nonce="532288371a93d4803a61d21a4fe36133",
oauth_signature="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
oauth_signature_method="HMAC-SHA1",
oauth_timestamp="1430207869",
oauth_token="000000000-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
oauth_version="1.0"'
--verbose



7.自分の Twitter を確認する。
手順 5.で status に入力した内容が投稿されてれば大成功です!

※ この時登録した自分のアプリケーション管理画面は、
https://dev.twitter.com/ の画面にアクセスすると、下の方にちっちゃく
Manage Your Apps」ってリンクがあるので、そこをクリックします。


【2015/08/06】 REST | トラックバック(0) | コメント(0) | page top↑
メールでTweet! その4
▼ GMail REST API との連携

STEP1 では、メールサーバとして GMail を使うことにしました。
本当は将来 Azure に持って行くことを考えていたので
Outlook.com を使おうと思っていたのですが、それについてはまた今度w

GMail を使う場合も、Twitter と同じようにアプリの登録が必要です。

手順はここを参考にしました。
http://qiita.com/ryurock/items/4b063372ede81780c3c8

1. gmail に登録してログイン状態になる。

2.https://console.developers.google.com/project/ にアクセスしてプロジェクトを登録。

3.左ペインの APIと認証→API を辿り、APIライブラリのタグを開く。

4.API の検索で「Gmail API」を入力し、GMail API の設定画面を開く。

5.API を有効にする。

6.左ペインの APIと認証→認証情報を辿る。

7.OAuth の「新しいクライアントIDを作成」ボタンを押して、クライアントIDを生成。

8.「クライアントIDの作成」ダイアログが開くので
→ インストールされているアプリケーション
を選ぶ。
その後、同意画面が出たらサービス名にプロジェクト名と同じものを入れて保存。
もう一度「クライアントIDの作成」ダイアログが開くので
→ インストールされているアプリケーション
→ その他
のラジオボタンを選択して「クライアントID作成」ボタンを押す。

クライアントID と クライアントシークレットは
この後使うのでどこかに保存しておくこと。

9.OAuthの許可リクエストページからcodeを取得する
下記のURLをブラウザからアクセスする。


https://accounts.google.com/o/oauth2/auth?client_id={OAuthのクライアントID}&
redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=https://mail.google.com/&
response_type=code&
approval_prompt=force&
access_type=offline


scope の値は、メールの完全削除を行おうと思っているので全権限を付与する
https://mail.google.com/
としている。

ブラウザからアクセスすると、GMail のログイン画面が出るのでログインする。
すると、以下のようなコード(authorization_code:78桁)が得られるはず。

4/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

4/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

10.下記のコマンドを実行して、Refresh token を得る。


curl -d client_id=00000000000-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com
-d client_secret=xxxxxxxxxxxxxxxxxxxxxxxx
-d redirect_uri=urn:ietf:wg:oauth:2.0:oob
-d grant_type=authorization_code
-d code=4/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
https://accounts.google.com/o/oauth2/token


JSON 形式で以下の応答が得られるはず。
access_token は毎度毎度異なるはず(3600秒=1時間で無効になる)なので
refresh_token をどこかに保存しておく。


{
"access_token" : "ya29.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"token_type" : "Bearer",
"expires_in" : 3600,
"refresh_token" : "1/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}


11.下記のコマンドを実行して、Refresh token から Access Token を得る。


curl --silent -d "client_id=00000000000-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.app.googleusercontent.com&
client_secret=xxxxxxxxxxxxxxxxxxxxxxxx&
refresh_token=1/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&
grant_type=refresh_token"
https://accounts.google.com/o/oauth2/token | jq -r '.access_token'


これも JSON 形式で以下の応答が得られるはず。


{
"access_token" : "ya29.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"token_type" : "Bearer",
"expires_in" : 3600
}


12.手順10.で取得した Access Token を使ってメールの一覧を取得。
アクセストークンと書かれている部分を置換してください。

→ メール一覧の取得


curl -H "Authorization: Bearer アクセストークン"
https://www.googleapis.com/gmail/v1/users/me/messages/


→ メール一覧の取得 ※ 未読のみ取得

curl -H "Authorization: Bearer アクセストークン"
'https://www.googleapis.com/gmail/v1/users/me/messages/?labelIds=UNREAD'


※ ここから先は、メール一覧の取得で取得したメッセージIDが必要になります。

→ メール本文の取得


curl --silent -H "Authorization: Bearer アクセストークン"
https://www.googleapis.com/gmail/v1/users/me/messages/ メッセージID

※ これで取得してもメールは未読のまま

→ 未読の確認


curl --silent -H "Authorization: Bearer アクセストークン"
https://www.googleapis.com/gmail/v1/users/me/messages/ メッセージID | jq -r '.labelIds[]' | grep UNREAD

※ 標準出力に UNREAD があれば未読

→ From アドレスの取得


curl --silent -H "Authorization: Bearer アクセストークン"
https://www.googleapis.com/gmail/v1/users/me/messages/ メッセージID
| jq -r '.payload.headers[] | select(.name=="From") | .value'


→ body の取得


curl --silent -H "Authorization: Bearer アクセストークン"
https://www.googleapis.com/gmail/v1/users/me/messages/ メッセージID
| jq -r '.payload.body.data' | base64 -d


→ メールの削除


curl --request 'DELETE' -H "Authorization: Bearer アクセストークン"
https://www.googleapis.com/gmail/v1/users/me/messages/ メッセージID


→ 未読メールを既読にする


curl --request 'POST' -H "Authorization: Bearer アクセストークン"
-H 'Content-Type:application/json' -H "Content-length:29"
-d '{"removeLabelIds":["UNREAD"]}' https://www.googleapis.com/gmail/v1/users/me/messages/ メッセージID/modify


ポイントは、
 → REST のアクセスには access_token が必要。
 → access_token は短い時間で無効になる。
 → access_token を取り直す時に必要になる、別の token が必要

続きを読む
【2015/08/07】 REST | トラックバック(0) | コメント(0) | page top↑
| ホーム |