我正在尝试使用带有https://app.asana.com/api/1.0/tasks端点的Asana API创建新任务。我成功地在所需的项目中创建了一些测试任务。但是我现在正试图设置自定义字段的值,似乎正在遇到障碍。
我正在使用Python请求库。我有一种感觉,这是我格式化帖子的方式的问题。我检查了很多来源,包括这里,以及修改和修改我构造“选项”字典的方式。但它似乎没有帮助。
def postTaskToAsana(taskName, taskURL, taskCreated, taskCompleted, taskDue):
token = "<TOKEN>"
bearerToken = "Bearer " + token
header = {
"Authorization" : bearerToken
}
options = {
"projects" : ["234234234"],
"name" : "Hello, World!",
"notes" : "How are you",
"assignee" : "2342342342",
"custom_fields" : { "234234234234" : "hello" }
}
url = "https://app.asana.com/api/1.0/tasks"
r = requests.post(url, headers=header, data=options)
return r
如果我从上面的选项字典中删除“custom_fields”,那么post请求有效,我可以看到新创建的任务。我从上面的代码中得到的回复是:
{“errors”:[{“message”:“糟糕!处理此请求时发生意外错误。输入可能包含服务器不知道如何处理的内容。有关更多帮助,请联系api-support @ asana.com并在此回复中包含错误短语。“,”短语“:”9“}}}
如this所述,目标是以此格式为请求生成JSON:
{
"data" : {
"custom_fields" : { "2342342342" : "INFO" }
}
}
据我所知,我的代码应该是什么。
对此有任何帮助都很棒,谢谢。
答案 0 :(得分:2)
[解决]
怀疑这个问题与我格式化请求的方式有关。由于原因,我不清楚嵌套的custom_fields字典创建的附加级别是不是以正确的JSON格式格式化。我能够使用请求JSON参数来解决这个问题。
def postTaskToAsana(taskName, taskURL, taskCreated, taskCompleted, taskDue):
token = "<TOKEN>"
bearerToken = "Bearer " + token
header = {
"Authorization" : bearerToken
}
options = {
"data" : {
"projects" : ["123412341234"],
"name" : "Review Task: " + taskName,
"notes" : "Please review this task for where the process failed.\nTask: " + taskURL,
"assignee" : "123412341234",
"followers" : ["123412341234"],
"custom_fields" : {
"123412341234" : taskCreated,
"123412342134" : taskDue,
"123412341234" : taskCompleted
}
}
}
url = "https://app.asana.com/api/1.0/tasks"
r = requests.post(url, headers=header, json=options)
return r