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/
「フォームの設計情報を取得する」がありますが、レイアウトとプロパティを一緒にしたデータが出力されます。
「フォームのレイアウトを変更する」と「フィールドの設定を変更する」もあるので、更新もできるかもしれませんが、今のところ、特定の要素を指定してそれのみを更新することはできていません。
フォームは kintone の画面から変更するものとし、上記の2つのファイルで更新履歴のみを管理できるかなと思っています。
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}")
以下は、「フォームの設計情報を取得する」のプログラムです。出力ファイルは、
フォーム_デザイン_123.txt
になります(数字は指定したアプリID)。
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}")