前回の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の各種値を扱えるようになった。
次回は取得した値を元にチャットワークでタスクの登録を行ってみる。
- 続く -




