pythonを使ってエクセルデータをレコードへ登録

何を実現したいのかを書きましょう

エクセルデータの1行に対して1レコードの登録

発生した問題やエラーメッセージを具体的に書きましょう

Script is starting…
Status code: 400
Response body: {“code”:“CB_VA01”,“id”:“WifXvhCnXwH4paq4bymX”,“message”:“入力内容が正しくありません。”,“errors”:{“records”:{“messages”:[“必須です。”]}}}
Error: {‘code’: ‘CB_VA01’, ‘id’: ‘WifXvhCnXwH4paq4bymX’, ‘message’: ‘入力内容が正しくありません。’, ‘errors’: {‘records’: {‘messages’: [‘必須です。’]}}}

実行したコードをコピー&ペーストしましょう

import requests
import json
import pandas as pd

print(“Script is starting…”)

Excelデータを読み込む

df = pd.read_excel(‘C:\Users\yotar\OneDrive\デスクトップ\aaabbbcb.xlsx’)

レコードを辞書形式のリストに変換

records = df.to_dict(‘records’)

Kintoneの情報を設定

subdomain = ‘bbb’ # サブドメインを指定
app_id = ‘aaa’ # アプリIDを指定
api_token = ‘Tr66hUDyUhgfgvhbluW3aPqdmDYGslsLj2ydlz4fEobD’ # APIトークンを指定

REST APIのエンドポイントURLを作成

url = f"https://{subdomain}.cybozu.com/k/v1/records.json?app={app_id}"

ヘッダー情報を設定

headers = {
“X-Cybozu-API-Token”: api_token,
“Content-Type” : “application/json”
}

各レコードに対してリクエストを送る

for record in records:
# Timestamp オブジェクトを文字列に変換
for key, value in record.items():
if isinstance(value, pd.Timestamp):
record[key] = value.isoformat()

data = {
    "app": app_id,
    "record": record
}
response = requests.post(url, headers=headers, data=json.dumps(data))
print(f"Status code: {response.status_code}")
print(f"Response body: {response.text}")

# レスポンスをチェック
if response.status_code != 200:
    print(f"Error: {response.json()}")

print(“Script has finished.”)

kintoneのアプリに必須項目はなく、
文字列や数値のみです。
すべてCHATGPTで作っています
pythonなどプログラミングはほとんどわかりません。
なぜこのような結果になるのかわかりません。
コードのどの部分に修正が必要か教えて頂きたいです

↓こちらのリクエストパラメータ

と、

data = {
    "app": app_id,
    "record": record
}

をよく見比べると良いと思います。明らかに違う部分があります。
あとはrecordの中身が正しくないと同じようなエラー出ると思います。

また、プログラムよくわからないけどChatGPTでやってみただと、
動かないときにはたぶんいちいちこういった質問しなきゃいけなくなると思います。
それって、最初から書き方教えてと言ってるのとあんまり変わらないですよね。

ですので、ご自分でドキュメントと見比べて書き換えてだめだった~とか試して見られると良いかと。

そういうわけで、ぜひ、Pythonやkintone REST API の勉強もされてみてくださいね。
チュートリアルあるので、こちらで勉強して、試して、わからないときはこちらで聞くようにすると良いと思いますよ。

「いいね!」 2

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。