我正在使用名为Mixcloud的服务尝试上传一些长时间的播客,如mp3文件。我一直在关注如何使用api通过帖子请求上传歌曲的Mixclouds文档,但是我收到了一些错误。
他们说提交multipart/form-data
POST请求,其中包含一个帖子请求中所需的所有数据。基于他们在这里所说的是我用requests用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上过期
为了比较,这里是他们在API页面上的示例显示如果使用CURL:
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
答案 0 :(得分:1)
根据doc和你得到的错误,你应该给出一个名字
名称必填。 cloudcast的名称 - 这将用于生成URL,应避免重复的名称,但不会导致上传失败。
<强>更新强>
如评论中所述,使用可选参数数据发送以下值会上传文件
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)