前回のGo言語 + kintone + チャットワークでタスクの自動登録アプリを作ってみる1の続き

ざっくりと説明すると、


kintone_app_config


kintoneで上のキャプチャのようなフィールドを設けたアプリを作成して、

指定の月日になったら、チャットワークにラベルをタスク名にして投稿する

というアプリを作成している。


指定の月日になったらというところだけれども、

kintoneの仕様を調べてみると、Linuxでいうところのcronのような機能を見つけられなかった為、

Go言語でkintoneのREST APIを介してチャットワークにタスクを投稿することにしてみた。

SOY Mailの送信予約を使ってみよう

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の各種値を扱えるようになった。


次回は取得した値を元にチャットワークでタスクの登録を行ってみる。


- 続く -