0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【非エンジニア向け】KintoneのレコードをKintone APIを利用して一括取得するまでのメモ

Posted at

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);

スクリーンショット 2022-06-27 12.29.06.png
 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データにします。

bash Payment.sh
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. 終わりに

今回は、パラメータのエンコードとデコードに混乱してしまいました。
ドキュメントに書かれているパラメータを、デコードしてから追加したいパラメータを作成する作業に骨が折れました。
しかし、普段使っている検索行為も、検索ワードがエンコードされてから検索されているという、インターネットの世界を垣間見れるいい勉強になりました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?