我正在构建用于在某个团队中学习名字的抽认卡。实现是Slack和Quizlet之间的集成;从Slack中提取名称和照片并将其放入私人Quizlet集中。我昨晚刚刚升级到高级版,所以我应该可以上传图片了。
我在OSX上使用Python3并且已成功通过身份验证。我知道这是因为我能够成功通过API(https://quizlet.com/api/2.0/docs/api-list)制作一套卡片,使用以下代码:
url = 'https://api.quizlet.com/2.0'
headers = {
'Authorization': 'Bearer ' + data["access_token"]
}
def create_set():
#POST /sets - Add a new set
payload = {
'title':'test0',
'terms': names, #names is a preassembled list
'definitions': pictures, #as is pictures
'lang_terms': 'en',
'lang_definitions': 'en',
'visibility': 'password',
'password': 'secret_password'
}
call = requests.post(url+"/sets", headers=headers, json=payload)
return call
既然我能够将名字,甚至Slack个人资料照片的链接放到抽认卡上,我就会发布图片而感到茫然。这是我的代码:
def upload_photos():
#POST https://api.quizlet.com/2.0/images Upload one or more images
url = 'https://api.quizlet.com/2.0'
headers = {'Authorization': 'Bearer ' + data["access_token"]}
# ,'Content-type': 'multipart/form-data'
imageData = {
'imageData': open(pictures[0], 'rb')
}
payload = {
'imageData':pictures[0]
}
call = requests.post(url+"/images", headers=headers, files=imageData, json=payload)
return call
我尝试过以下方法:
b'{"http_code":400,"error":"validation_errors","error_title":"Error","error_description":"The \"imageData\" parameter is missing or not valid.","validation_errors":["The \"imageData\" parameter is missing or not valid."]}'
b'{"http_code":400,"error":"client_developer_error","error_title":"Error","error_description":"Expected a imageData parameter"}'
总结一下,我想弄清楚如何从Slack获取个人资料图片(无论是下载的图片还是网址)到Quizlet的API。提前感谢任何输入。
更新:我在Quizlet API页面上播放了示例curl请求并使其与-f @参数一起使用。似乎@"让curl模拟用户按下提交按钮的填写表单。根据RFC 2388,这会导致使用Content-Type multipart / form-data对POST数据进行curl。这样可以上传二进制文件等。强制使用'内容' part为文件,文件名前缀为@符号。要从文件中获取内容部分,请在文件名前加上符号<前缀。 @和<之间的区别然后,@使文件作为文件上传附加在帖子中,而<创建一个文本字段,然后从文件中获取该文本字段的内容。"如果有人知道如何做Python的等价物,我想我会更接近。