1

我正在使用名为Mixcloud的服务来尝试上传长达一小时的播客,例如 mp3 文件。我一直在关注 Mixclouds 文档,了解我应该如何使用他们的api通过发布请求上传歌曲,但是我遇到了一些错误。

他们说要提交一个multipart/form-dataPOST 请求,其中包含一个发布请求中所需的所有数据。根据他们在这里所说的是我提出的使用POST请求的 Python 代码:

accessToken = '**Censored**'
postUrl = 'https://api.mixcloud.com/upload/?access_token=' + accessToken
#postUrl = 'http://requestb.in/wqqj8lwq'  ---> For testing what POST request sends.

files = {'mp3': open('/home/jhvisser/Music/driveAt5_'+now.strftime("%y%m%d")+'.mp3', 'rb'),
    'name': 'z103.5 Drive at 5 Streetmix - '+now.strftime("%Y%m%d"),
    'tags-0-tag': 'remix',
    'tags-1-tag': 'radio',
    'tags-2-tag': 'hits',
    'description': 'Daily weekday uploads of the latest drive at 5 music hits'
}

r = requests.post(postUrl,files=files)

我收到以下 JSON 作为对帖子的回复:

{
    "details": {
        "name": [
            "This field is required."
        ]
    },
    "error": {
        "message": "Some posted data was invalid",
        "type": "PostValidationError"
    }
}

我不明白为什么它说我缺少名称字段。我有一个名称字段。其他字段也可能会出错,除非我不确定 Mixcloud 应用程序是否只是在出错时停止验证。

我还向RequestBin发出了一个 POST 请求,以便您可以查看从该请求中发布的确切内容。我将在下面包含一个指向 requestbin 页面的 pastebin 的链接,因为我相信这些链接在 RequestBin 上过期

PasteBin 镜子

为了比较起见,如果使用 CURL,他们在 API 页面上的示例显示要执行的操作:

curl -F mp3=@cloudcast.mp3 \
     -F "name=API Upload" \
     -F "tags-0-tag=Test" \
     -F "tags-1-tag=API" \
     -F "sections-0-chapter=Introduction" \
     -F "sections-0-start_time=0" \
     -F "sections-1-artist=Artist Name" \
     -F "sections-1-song=Song Title" \
     -F "sections-1-start_time=10" \
     -F "percentage_music=75" \
     -F "description=My test cloudcast" \
     https://api.mixcloud.com/upload/?access_token=INSERT_ACCESS_TOKEN_HERE
4

1 回答 1

1

根据文档和你得到的错误,你应该给一个名字

名称必填。cloudcast 的名称 - 这将用于生成 URL,应避免重复名称,但不会导致上传失败。

更新

如评论中所述,使用可选参数 data 发送以下值会上传文件

 data={
    'name': 'z103.5 Drive at 5 Streetmix - '+now.strftime("%Y%m%d"),
    'tags-0-tag': 'remix',
    'tags-1-tag': 'radio',
    'tags-2-tag': 'hits',
    'description': 'Daily weekday uploads of the latest drive at 5 music hits'
 }
 r = requests.post(postUrl,files=files,data=data)
于 2013-10-01T22:52:53.337 回答