kintone でフォームをダウンロードする Python プログラム

kintone でフォーム（レイアウトとプロパティ）をダウンロードする Python プログラムを作りました。実行すると、
　　フォーム_レイアウト_123.txt
　　フォーム_プロパティ_123.txt
の2つのテキストファイルを作成します（数字は指定したアプリID）。

「sample.cybozu.com」や「UserName:YourPassWord」はお使いの環境に合わせて変更してください。

以下のページを参照しました。

Top > kintone > kintone APIドキュメント > kintone REST API > アプリ > フォーム > フォームのレイアウトを取得する 
https://cybozu.dev/ja/kintone/docs/rest-api/apps/form/get-form-layout/

Top > kintone > kintone APIドキュメント > kintone REST API > アプリ > フォーム > フィールドを取得する（＝フィールドの一覧を取得するAPI） 
https://cybozu.dev/ja/kintone/docs/rest-api/apps/form/get-form-fields/

「[フォームの設計情報を取得する](https://cybozu.dev/ja/kintone/docs/rest-api/apps/form/get-form/)」がありますが、レイアウトとプロパティを一緒にしたデータが出力されます。

「[フォームのレイアウトを変更する](https://cybozu.dev/ja/kintone/docs/rest-api/apps/form/update-form-layout/)」と「[フィールドの設定を変更する](https://cybozu.dev/ja/kintone/docs/rest-api/apps/form/update-form-fields/)」もあるので、更新もできるかもしれませんが、今のところ、特定の要素を指定してそれのみを更新することはできていません。

フォームは kintone の画面から変更するものとし、上記の2つのファイルで更新履歴のみを管理できるかなと思っています。
　

```python:07_form_layout_properties.py
import base64
import urllib.request
import json
from pathlib import Path

appno = 123
#appno = 124
#appno = 125
#appno = 126

uri_layout = "https://sample.cybozu.com/k/v1/app/form/layout.json"
uri_properties = "https://sample.cybozu.com/k/v1/app/form/fields.json"

username_password = "UserName:YourPassWord"
auth_header = base64.b64encode(username_password.encode())

headers = {
    "Host": "sample.cybozu.com:443",
    "X-Cybozu-Authorization": auth_header,
    "Content-Type": "application/json",
}

body = {
    "app": appno,
}

req_layout = urllib.request.Request(
            url=uri_layout,
            data=json.dumps(body).encode(),
            headers=headers,
            method="GET",
            )

response_layout = urllib.request.urlopen(req_layout)
res_dict_layout = json.load(response_layout)

#print(json.dumps(res_dict_layout, indent=4, ensure_ascii=False))

with open("フォーム_レイアウト_" + str(appno) + ".txt", "w", encoding="utf-8") as f:
    json.dump(res_dict_layout, f, indent=4, ensure_ascii=False)
    print(f"{f.name}")

req_properties = urllib.request.Request(
            url=uri_properties,
            data=json.dumps(body).encode(),
            headers=headers,
            method="GET",
            )

response_properties = urllib.request.urlopen(req_properties)
res_dict_properties = json.load(response_properties)

#print(json.dumps(res_dict_properties, indent=4, ensure_ascii=False))

with open("フォーム_プロパティ_" + str(appno) + ".txt", "w", encoding="utf-8") as f:
    json.dump(res_dict_properties, f, indent=4, ensure_ascii=False)
    print(f"{f.name}")

```
　

 以下は、「[フォームの設計情報を取得する](https://cybozu.dev/ja/kintone/docs/rest-api/apps/form/get-form/)」のプログラムです。出力ファイルは、
 　　フォーム_デザイン_123.txt
 になります（数字は指定したアプリID）。

```python:10_form_design.py
import base64
import urllib.request
import json
from pathlib import Path

appno = 123
#appno = 124
#appno = 125
#appno = 126

uri_design = "https://sample.cybozu.com/k/v1/form.json"

username_password = "UserName:YourPassWord"
auth_header = base64.b64encode(username_password.encode())

headers = {
    "Host": "sample.cybozu.com:443",
    "X-Cybozu-Authorization": auth_header,
    "Content-Type": "application/json",
}

body = {
    "app": appno,
}

req_design = urllib.request.Request(
            url=uri_design,
            data=json.dumps(body).encode(),
            headers=headers,
            method="GET",
            )

response_design = urllib.request.urlopen(req_design)
res_dict_design = json.load(response_design)

#print(json.dumps(res_dict_design, indent=4, ensure_ascii=False))

with open("フォーム_デザイン_" + str(appno) + ".txt", "w", encoding="utf-8") as f:
    json.dump(res_dict_design, f, indent=4, ensure_ascii=False)
    print(f"{f.name}")

```