前回のGo言語 + kintone + チャットワークでタスクの自動登録アプリを作ってみる1の続き
ざっくりと説明すると、
kintoneで上のキャプチャのようなフィールドを設けたアプリを作成して、
指定の月日になったら、チャットワークにラベルをタスク名にして投稿する
というアプリを作成している。
指定の月日になったらというところだけれども、
kintoneの仕様を調べてみると、Linuxでいうところのcronのような機能を見つけられなかった為、
Go言語でkintoneのREST APIを介してチャットワークにタスクを投稿することにしてみた。
kintone REST API一覧 – cybozu developer network
前回、Go言語でkintone REST APIを介してJSON形式のデータを取得してみた。
その時のデータは下記の通り
※一部フィールドの値を省略
{ "records": [ { "レコード番号": { "type": "RECORD_NUMBER", "value": "3" }, "month": { "type": "NUMBER", "value": "8" }, "label": { "type": "SINGLE_LINE_TEXT", "value": "hogeラベル" }, "$revision": { "type": "__REVISION__", "value": "1" }, "day": { "type": "NUMBER", "value": "10" }, "$id": { "type": "__ID__", "value": "3" } }, { "レコード番号": { "type": "RECORD_NUMBER", "value": "2" }, "month": { "type": "NUMBER", "value": "7" }, "label": { "type": "SINGLE_LINE_TEXT", "value": "○○のタスクを追加" }, "$revision": { "type": "__REVISION__", "value": "3" }, "day": { "type": "NUMBER", "value": "18" }, "$id": { "type": "__ID__", "value": "2" } } ], "totalCount": null }
今回は取得したJSONをGo言語で使用するための構造体の設計とマッピングを行ってみる。
で、実際に書いたコードは下記の通り
main.go
package main import ( "encoding/base64" "encoding/json" "fmt" "log" "net/http" ) const ( appId = "{kintoneのアプリのID}" token = "{kintoneのアプリ内で発行したAPIキー" id = "{kintoneにログインするためのIDで上のAPIキーを発行したアカウントのもの}" pw = "{上で指定したアカウント用のパスワード}" ) 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) } //unmarshalの結果の確認 fmt.Println(rec) //試しに0番目のレコードのラベルカラムの値を取得してみる 次回詳細を記載するがラベルカラムのフィールドコードをlabelにしている fmt.Println(rec.Records[0]["label"].Value) }
実行結果は端折るけれども、
上記のコードでkintoneの各種値を扱えるようになった。
次回は取得した値を元にチャットワークでタスクの登録を行ってみる。
- 続く -