前回のGo言語 + kintone + チャットワークでタスクの自動登録アプリを作ってみる2で
Go言語でkintone REST APIを利用して任意のアプリからJSON形式で登録データを取得してみた。
今回は取得したデータをチャットワークにタスクとして登録してみる。
今回の話に入る前にざっくりと説明すると
kintoneで上のキャプチャのようなフィールドを設けたアプリを作成して、
指定の月日になったら、チャットワークにラベルをタスク名にして投稿する
というアプリを作成している。
今回チャットワークに登録するデータはラベルの値で、
フィールドコードをlabelにして登録している。
この設定により属性名を日本語を含むものから半角英字に変更できる。
これを踏まえた上で前回のコードにチャットワークへのタスクの登録のコードを追加してみる。
中途半端に関数を作成していてコードが汚いが、そこは優しい目で見守ってください。
main.go
package main import ( "bytes" "encoding/base64" "encoding/json" "log" "net/http" ) const ( // kintone関連のパラメータ appId = "{kintoneのアプリのID}" token = "{kintoneのアプリ内で発行したAPIキー" id = "{kintoneにログインするためのIDで上のAPIキーを発行したアカウントのもの}" pw = "{上で指定したアカウント用のパスワード}" // chatwork関連のパラメータ cwToken = "{チャットワークの設定の画面で発行したAPIキー}" roomId = "{タスクを登録したいルームのID}" aid = "{タスクの担当者として登録したいアカウントのID}" ) type Field struct { Type interface{} `json:"type"` Value interface{} `json:"value"` } type Record struct { Records []map[string]Field `json:"records"` } func main() { url := "https://**********.cybozu.com/k/v1/records.json?app=" + appId + "&limit=100" req, err := http.NewRequest("GET", url, nil) if err != nil { log.Fatal(err) } hash := base64.StdEncoding.EncodeToString([]byte(id + ":" + pw)) req.Header.Add("Cybozu-API-Token", token) req.Header.Add("X-Cybozu-Authorization", hash) res, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer res.Body.Close() //JSONの読み込み unmarshal var rec Record err = json.NewDecoder(res.Body).Decode(&rec) if err != nil { log.Fatal(err) } for _, record := range rec.Records { /** 諸々のチェックの処理は省略 **/ //構造体の設計だと各種値はinterface{}なので、文字列型に変換する label := record["label"].Value.(string) err = RegisterTaskOnChatWork(label) if err != nil { log.Fatal(err) } } } // チャットワークでタスクの登録 func RegisterTaskOnChatWork(label string) error { url := "https://api.chatwork.com/v2/rooms/" + roomId + "/tasks" param := "body=" + label + "&to_ids=" + aid req, err := http.NewRequest("POST", url, bytes.NewBufferString(param)) if err != nil { return err } req.Header.Add("X-ChatWorkToken", cwToken) req.Header.Add("Content-Type", "application/x-www-form-urlencoded") res, err := http.DefaultClient.Do(req) if err != nil { return err } defer res.Body.Close() return nil }
このコードでいくつかのパラメータとチャットワークのエンドポイントが増えたけれども、
それらの説明は下記の記載されているので省略する。
上記のコードを実行する前に
kintoneで作成したアプリで
こんな感じでレコードを追加した上で上記のコードを実行してみる。
実行後にチャットワークを開いてみると、
指定のルームで、kintoneで登録した通りの文字列でタスクが追加されていた。
後はチャットワークでのタスク登録時のデータの絞り込みだけれども、
それは細かい話になるのでこれ以上は触れないことにする。