我在请求飞书多维表格的API的时候
出现 21001报错
21001 — Access denied by access control policy. Contact the administrator for assistance. 没有设置白名单,
源码:
[Python] 纯文本查看 复制代码 import json
import urllib.request
# 在这里填写飞书应用与多维表格信息
APP_ID = ""
APP_SECRET = ""
APP_TOKEN = ""
TABLE_ID = ""
SPU_VALUE = "Y201"
PRODUCT_URL = "https://detail.1688.com/offer/XXXXXXX.html?"
API_BASE = "https://open.feishu.cn/open-apis"
def request(method, path, token, body=None):
data = None if body is None else json.dumps(body, ensure_ascii=False).encode("utf-8")
request_obj = urllib.request.Request(
API_BASE + path,
data=data,
method=method,
headers={
"Authorization": f"Bearer {token}",
"Content-Type": "application/json; charset=utf-8",
},
)
with urllib.request.urlopen(request_obj) as response:
result = json.loads(response.read().decode("utf-8"))
if result["code"] != 0:
raise RuntimeError(f"飞书接口调用失败:{result['code']} {result['msg']}")
return result["data"]
def get_tenant_access_token():
body = json.dumps({
"app_id": APP_ID,
"app_secret": APP_SECRET,
}, ensure_ascii=False).encode("utf-8")
request_obj = urllib.request.Request(
"https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal",
data=body,
method="POST",
headers={"Content-Type": "application/json; charset=utf-8"},
)
with urllib.request.urlopen(request_obj) as response:
result = json.loads(response.read().decode("utf-8"))
if result["code"] != 0:
raise RuntimeError(f"获取 tenant_access_token 失败:{result['code']} {result['msg']}")
return result["tenant_access_token"]
def main():
token = get_tenant_access_token()
table_path = f"/bitable/v1/apps/{APP_TOKEN}/tables/{TABLE_ID}"
fields_path = f"{table_path}/fields?page_size=100"
fields_data = request("GET", fields_path, token)
fields = fields_data["items"]
primary_field = next(field for field in fields if field["is_primary"])
if primary_field["field_name"] != "SPU" or primary_field["type"] != 1:
request(
"PUT",
f"{table_path}/fields/{primary_field['field_id']}",
token,
{"field_name": "SPU", "type": 1},
)
url_field = next((field for field in fields if field["field_name"] == "1688链接"), None)
if url_field is None:
url_field = request(
"POST",
f"{table_path}/fields",
token,
{"field_name": "1688链接", "type": 15, "ui_type": "Url"},
)["field"]
record = request(
"POST",
f"{table_path}/records",
token,
{
"fields": {
"SPU": SPU_VALUE,
"1688链接": {
"text": PRODUCT_URL,
"link": PRODUCT_URL,
},
}
},
)
print(f"已写入记录:{record['record']['record_id']}")
if __name__ == "__main__":
main()
来个大佬帮忙看一下 |