毎年同じ時期にやらなければならない仕事があって、
その仕事を忘れないようにしておきたい。
できれば、
チャットワーク(ChatWork) | ビジネスが加速するクラウド会議室
チャットワークのタスクとして登録しておきたい。
という相談があった。
PHPでチャットワークAPIを介してメッセージを投稿してみる
kintone - サイボウズのビジネスアプリ作成プラットフォーム
相談者は既にcybozeのkintoneを利用していたので、
タスクの登録はkintoneで、
kintoneと連携して指定の日にチャットワークにタスクを登録する
という流れで対応することになった。
今回の記事では上記の要望に対応した時の作業をメモとして残す。
最初にkintone内で新規のアプリを作成して、
上のキャプチャのようにラベル、月と日のカラムを用意した。
月と日のカラムがタスクの登録日の日の指定で、
チャットワークに登録するタスクの内容はラベルになる。
次にkintoneのアプリのカスタマイズで、
指定の時間にJavaScriptのコードが実行出来るか?探してみたけれども見つからず…
というわけで、
Go言語でkintoneのREST APIを利用しデータを取り出して、
Go言語のコードでチャットワークに投稿するという流れを採用した。
kintone REST API一覧 – cybozu developer network
最初に知るべきことは、
Go言語でkintoneのREST APIを介してデータを取得出来るなので
実際にコードを書いてデータを取得してみた。
コードを書く前にkintoneのアプリ内でトークンを発行しておく必要がある。
諸々端折るが、
作成したアプリの設定にAPIの発行に関するページがあるので、
その画面でAPIを発行する。
APIの発行後、コードを書いてみた。
実際のコードは下記の通り
package main import ( "encoding/base64" "fmt" "io/ioutil" "log" "net/http" ) const ( appId = "{kintoneのアプリのID}" token = "{kintoneのアプリ内で発行したAPIキー" id = "{kintoneにログインするためのIDで上のAPIキーを発行したアカウントのもの}" pw = "{上で指定したアカウント用のパスワード}" ) func main() { // APIキーを作成した時にURLが指定される 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) } req.Header.Add("Cybozu-API-Token", token) // REST APIを利用する時はIDとパスワードを:で繋いでBASE64したものが必要になる hash := base64.StdEncoding.EncodeToString([]byte(id + ":" + pw)) req.Header.Add("X-Cybozu-Authorization", hash) res, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer res.Body.Close() body, err := ioutil.ReadAll(res.Body) if err != nil { log.Fatal(err) } fmt.Println(string(body)) }
上記のコードを実行すると、下記のような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 }
今回はREST APIで返ってくるJSONのデータまで見たけれども、
Go言語でJSONのデータを扱う時は事前に構造体を設けておいて、その構造体にマッピングする必要がある。
これは次回に触れることにしよう。
- 続く -