Go
AWS
GoogleCalendar
serverless

slack slash custom command + google calendar api + aws lambda/apigateway + golang(2)

続き

シークレットキーセットアップ

前回記事の googleCalendarAPIの有効化 で落としたjsonファイルの内容をコピって適当なパッケージ変数に詰めます。

package sample

var secretJsonBytes = []byte(`
{
json maji json
}`)

別に実行時にこの内容を読めれば良いので、このやり方にこだわる必要はありませんが多分1番楽。多分ね。
ただこれシークレッツな情報なので、gitとかにあげるときはgit-cryptなりopensslなりで暗号化しときましょう。

てきとうなサンプル

動いてるものから色々省いて転載したので動かなかったらゴメンな

package sample

import (
    "golang.org/x/oauth2"
    "golang.org/x/oauth2/google"
    "google.golang.org/api/calendar/v3"
    "fmt"
)

const CALENDARID string = "yourcalendarID@group.calendar.google.com"

func sample() error {
    config, err := google.JWTConfigFromJSON(secretJsonBytes, calendar.CalendarScope)
    if err != nil {
        // error handle
    }

    client := config.Client(oauth2.NoContext)
    srv, err := calendar.New(client)
    if err != nil {
        // error handle
    }

    task := "add" // 実際にはこんなことしてないよ!
    switch task {
    case `add`:
        _, err = srv.Events.Insert(CALENDARID, sampleEvent()).Do()
        if err != nil {
            // error handle
        }
    case `see`:
        // Do以外はoptionalやで
        // mix/maxのフォーマットはRFC3339っぽい JSTじゃない場合は適宜変えてやってくれよな
        list, err := srv.Events.List(CALENDARID).
            Q("フリーワード的な").
            TimeMin("2018-09-15T00:00:00+09:00").
            TimeMax("2018-09-16T00:00:00+09:00").
            Do()
        if err != nil {
            // error handle
        }
        fmt.Println(list)
    }

    return nil
}

func sampleEvent() *calendar.Event {
    return &calendar.Event{
        Summary:     "予定タイトル部分",
        ColorId:     "5", //予定の帯の色 docによると1-11の間で指定
        Description: "予定内容部分 ぶっちゃけSumarryが本体でここが補足だと思う",
        Start: &calendar.EventDateTime{
            Date:     "2018-09-15",
            TimeZone: "Asia/Tokyo",
        },
        End: &calendar.EventDateTime{
            Date:     "2018-09-15",
            TimeZone: "Asia/Tokyo",
        },
    }
}

あとは前回記事と適当に辻褄合わせればいけます。
SAMも全部組み合わせてみた人はそっと動いたかどうか教えてください。