0.背景
所属部門が利用している各種サービスへの支払い先一覧の作成を依頼されました。
Kintoneのレコードを一つ一つ開いて、コピペをすることもできるのですが、
ヒューマンエラーを極力避けたいと思ったので、APIを利用してエンジニアリングすることにしました。
1. APIで取得したいレコード
1. Kintoneアプリ内の作成したフィールドから特定の項目で絞り込む
例:支出部門というフィールドの「開発部」という項目で絞り込みたい
2. レコード作成日が最新から500件
2.トークンを作成する
APIからデータを取得する際には、トークンが必要なので、管理アカウントでトークンを発行します。上長に確認を取るといいでしょう。(トークンの作成方法(cybozu))
3. APIのURI・アプリ・パラメータの確認
・URIはこちら
https://(サブドメイン名).cybozu.com/k/v1/records.json
・アプリのIDの確認
1. Kintoneのアプリを開く
2. 開発者ツールでconsoleを開く
3. 以下のコードを実行する
const appId = kintone.app.getId();
console.log(appId);
4.表示されたアプリIDを後ほど、繋げます
詳細は、公式ドキュメントをご覧ください(cybozu)
・リクエストパラメータを指定します。詳細はこちら→(cybozu)
パラメータ名 | 指定する値 | 必須 | 説明 |
---|---|---|---|
fields | 文字列の配列 | 省略可 | レスポンスに含めるフィールドコードを指定します。省略した場合は、閲覧権限を持つすべてのフィールドの値が返されます。 |
app | 数値又は文字列 | 必須 | アプリのID を指定します。 |
query | 文字列 | 省略可 | レスポンスに含めるレコードの条件を指定するクエリ文字列です。 クエリ文字列内では、後述の演算子とオプションが使用できます。省略した場合は、閲覧権限を持つすべてのレコードが返されます。 |
totalCount | 真偽値又は文字列 | 省略可 | 「query」パラメータで指定した条件にあてはまるレコードの件数を取得する場合、「true」を指定します。 指定を省略した場合、レスポンスにはtotalCountの値としてnullが返されます。 |
パラメータメモ
%%20desc%20limit%20500
→500件のレコードを降順で取得
%E6%94%AF%E5%87%BA%E9%83%A8%E9%96%80+in+%28%22%E9%96%8B%E7%99%BA%E9%83%A8%22%29"
→支出部門というフィールドで、開発部を指定
わからなくなったら、エンコードしてくれるサイトを利用する(エンコード⇄デコード)
4. パラメータを繋げて、APIからデータを取得する
apykey=XXXXXXXXXXXX ##作成したトークンを入れています
curl -H "X-Cybozu-API-Token: $apikey" "https://サブドメイン.cybozu.com/k/v1/records.json?app=XXX&query=XXXXX%20desc%20limit%20500" |jq . > kintone500
# 一度、ファイルに吐き出します
5. 取得したデータを確認する
一部、わかりやすいようにテストデータをいじってます。
{
"records": [
{
"支払先": {
"type": "SINGLE_LINE_TEXT",
"value": "ABC会社"
},
"レコード番号": {
"type": "RECORD_NUMBER",
"value": "1234"
},
"支払方法": {
"type": "RADIO_BUTTON",
"value": "クレジットカード"
},
"作成日時": {
"type": "CREATED_TIME",
"value": "2022-06-14T23:12:00Z"
},
"請求書データ": {
"type": "FILE",
"value": [
{
"fileKey": "abcdefg",
"name": "請求書.pdf",
"contentType": "application/pdf",
"size": "100000"
}
]
},
#中略
}
6. recordsだけを剥いて、別ファイルにする
jq .records[] kintone500>records500
7. shellscriptを作成して、一覧を作る
簡単ですが、jsonで保存したレコードのlength
分回して、欲しいデータを変数に入れて、
最後に、echo
して、,(カンマ)
でつないでCSVデータにします。
length=$(jq length records500)
nums=$(seq 0 $length)
for num in $nums
do
payOption=$(jq .[$num].'"支払方法".value' records500)
payReason=$(jq .[$num].'"支払内容".value' records500 )
payTo=$(jq .[$num]'."支払先".value' records500 )
invoice=$(jq .[$num]'."請求書データ".value[].name' records500 )
dateReceived=$(jq .[$num]'. "請求書受領日".value' records500 )
accountType=$(jq .[$num]'."勘定科目".value' records500 )
echo ${payTo},${payReason},${dateReceived},${payOption},${accountType},${invoice}>>payment.csv
done
8. 終わりに
今回は、パラメータのエンコードとデコードに混乱してしまいました。
ドキュメントに書かれているパラメータを、デコードしてから追加したいパラメータを作成する作業に骨が折れました。
しかし、普段使っている検索行為も、検索ワードがエンコードされてから検索されているという、インターネットの世界を垣間見れるいい勉強になりました。