使用Quizlet API为图像和Python3请求发送imageData[]的正确方法

使用Quizlet API为图像和Python3请求发送imageData[]的正确方法,python,json,api,Python,Json,Api,我正在制作抽认卡,以便在团队中学习名字。该实现是Slack和Quizlet之间的集成;从Slack中提取姓名和照片,并将其放入私人Quizlet集合中。我昨晚刚升级到premium,所以我应该可以上传图片了 我正在OSX上使用Python3,并已成功进行身份验证。我之所以知道这一点,是因为我能够使用以下代码通过API()成功地制作一组卡片: url = 'https://api.quizlet.com/2.0' headers = { 'Authorization': 'Bearer '

我正在制作抽认卡,以便在团队中学习名字。该实现是Slack和Quizlet之间的集成;从Slack中提取姓名和照片,并将其放入私人Quizlet集合中。我昨晚刚升级到premium,所以我应该可以上传图片了

我正在OSX上使用Python3,并已成功进行身份验证。我之所以知道这一点,是因为我能够使用以下代码通过API()成功地制作一组卡片:

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 
现在我可以把名字,甚至是松弛的个人资料照片的链接放到抽认卡上了,我对这些图片的发布感到不知所措。这是我的代码:

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
我尝试了以下方法:

  • 玩弄有效负载JSON。当我给它整个图片列表时,与[X]中的一个元素相反:
    b'{“http_code”:400,“error”:“validation_errors”,“error_title”:“error”,“error_description”:“imageData”参数丢失或无效。”,“validation_errors”:[“imageData”参数丢失或无效。”]}
  • 尝试手动添加多部分/表单数据头。(请参见注释掉的行)。然而,这给了我:
    b'{“http\u code”:400,“error”:“client\u developer\u error”,“error\u title”:“error”,“error\u description”:“预期的imageData参数”}
  • 当我尝试发送打开的文件时,我被告知JSON不会以这种方式序列化,这是有道理的
  • 当我只给出文件所在位置的数组列表时,我得到了关于imageData无效的相同错误
  • 我尝试了我能找到的Quizlet的每一个包装器/Python包,但它们似乎都被抛弃了,大部分都缺少文档
总而言之,我想弄清楚如何从Slack(无论是下载的图片还是URL)到Quizlet的API中获取配置文件图片。提前感谢您的任何意见

更新:我在Quizlet API页面上处理了示例curl请求,并让它使用-f@参数。好像是@让curl模拟一个填充表单,其中用户按下了提交按钮。这导致curl根据RFC 2388使用内容类型multipart/formdata发布数据。这允许上载二进制文件等,以强制“内容”部分成为文件,并在文件名前面加上@符号。要仅从文件中获取内容部分,请在文件名前面加上符号