今回は、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.
返信削除