今回は、Gmail APIをGoで実行するというテーマで進めました。
OAuth2の認証が必要だったので、#18のサンプルコードを見ながら実行するというアプローチをとりました。
goauth2パッケージは結構便利に使えるので良いですね。
リクエストを送信する所は、以前と同じなので、省略するとして、受信後にデータを展開する所は、レスポンスがjson文字列なので、encoding/jsonを使って、Unmarshal()をすればオブジェクトに復元できます。
最初にUsers.messages.listにリクエストを投げました。これは、Gmailのメールのリストが返ってきますが、本文は含まれていません。
// Users.messages.listにアクセス
r, err := transport.Client().Get(request_url)
if err != nil {
fmt.Println("Get: ", err)
return
}
defer r.Body.Close()
buf := bytes.Buffer{}
if _, err = buf.ReadFrom(r.Body); err != nil {
log.Fatalln(err)
}
if err = json.Unmarshal(buf.Bytes(), &l); err != nil {
fmt.Println(buf.String())
log.Fatalln(err)
}
goauth2のtransportから戻ってくるのはio.Readerなので、bytes.Bufferにでもコピーして書き出さないとUnmarshal()に渡す事ができないので、一つ処理を入れています。
jsonをオブジェクトに変換した後は、もう一度、Users.messages.getにリクエストを投げて、詳細を取得しました。
// Users.messages.getにアクセス。(最初の1件目)
r2, err := transport.Client().Get(message_get_url + l.Messages[0].Id)
if err != nil {
fmt.Println("Get: ", err)
return
}
// // Write the response to standard output.
// io.Copy(os.Stdout, r2.Body)
buf2 := bytes.Buffer{}
if _, err = buf2.ReadFrom(r2.Body); err != nil {
log.Fatalln(err)
}
if err = json.Unmarshal(buf2.Bytes(), &t); err != nil {
fmt.Println(buf2.String())
log.Fatalln(err)
}
これで、中身が取得できたのですが、本文がBase64エンコードでエンコードされた状態だったので、復元しないといけなかったのですが、復元には至らず。ここで終了。
それでも、後日時間を取って、粘ってみたら、Base64.Stdencodingを使っていたのを、Base64.URLencodingを使えば本文が読めるようになるというのを+Takanobu Haginoさんが見つけていたので、それを適用して本文が読めるようになりました。
// 本文をエンコードする場合はURLEncodingを使う。
data, encerr := base64.URLEncoding.DecodeString(string(t.Payload.Body.Data))
if encerr != nil {
// fmt.Println("base64", t.Payload.Body.Data[190])
log.Fatalln(encerr)
}
あと、q=is:unreadをつけてリクエストを送信したりしたものがありますが、今は時間がないので、あとで、githubに上げておこうと思います。
However, you don’t wish to be half in} at 2 am and see the sport crash right when you’re about to go all in. Thankfully, Café Casino provides five-star customer service 24 hours a day. You can attain them 토토사이트 by phone or by e-mail and expect a fast response.
返信削除