NBa*_*nca 5 python google-app-engine json web-applications spotify
搜索了一段时间后,我找到了以下解决方案,用于需要Delete方法的api调用.
首先尝试:(httplib库)
url = '/v1/users/'+ spotify_user_id +'/playlists/'+ playlist_id +'/tracks'
data = json.dumps({"tracks": [{ "uri" : track_uri }]})
headers = {
'Authorization' : 'Bearer ' + access_token,
'Content-Type' : 'application/json'
}
conn = httplib.HTTPSConnection('api.spotify.com')
conn.request('DELETE', url , data, headers)
resp = conn.getresponse()
content = resp.read()
return json.loads(content)
Run Code Online (Sandbox Code Playgroud)
返回:
{u'error':{u'status':400,u'ssssage':u'Empty JSON body.'}}
第二次尝试:(urllib2库)
url = 'https://api.spotify.com/v1/users/'+ spotify_user_id +'/playlists/'+ playlist_id +'/tracks'
data = json.dumps({"tracks": [{ "uri" : track_uri }]})
headers = {
'Authorization' : 'Bearer ' + access_token,
'Content-Type' : 'application/json'
}
opener = urllib2.build_opener(urllib2.HTTPHandler)
req = urllib2.Request(url, data, headers)
req.get_method = lambda: 'DELETE'
try:
response = opener.open(req).read()
return response
except urllib2.HTTPError as e:
return e
Run Code Online (Sandbox Code Playgroud)
返回:
HTTP 400错误请求
我有JSON工作的其他功能,所以我想问题是DELETE方法,但我不能让它工作.
除此之外,webapp正在谷歌应用程序引擎上运行,所以我无法安装数据包,所以我想留在预安装的图书馆.
任何人都有一个很好的方法在GAE上做删除请求?(我需要发送数据和标题)
该API是spotify:developer.spotify.com/web-api/,我正在尝试从播放列表中删除曲目.
经过大量研究后,我发现这是不可能的。
正如RFC 7231中所述(感谢@lukasa指出 RFC 2616 已过时),关于 DELETE 方法:
DELETE 方法请求源服务器删除目标资源与其当前功能之间的关联。 实际上,这种方法类似于 UNIX中的rm命令:它表达的是对源服务器的URI映射的删除操作,而不是期望删除先前关联的信息。
也就是说,删除曲目不需要在正文中传递 track_uri,但它应该在 URI 中。
另外,在 RFC 中:
DELETE 请求消息中的有效负载没有定义的语义;在 DELETE 请求上发送有效负载正文可能会导致某些现有实现拒绝该请求。
Google App Engine 就是这种情况之一,不允许 DELETE 请求有正文。
话虽如此,Spotify 的回应还是有道理的:
空 JSON 正文。
在谷歌应用程序中获取 URL 的最佳方法可能是他们的 API,我正在使用它来处理其余的请求。(对于那些使用 GAE 并在 httplib、urllib2 和其他之间挣扎的人)。
我用来参考的帖子是这个。
我问 Spotify 是否有替代方案,他们的回应是删除了我对 Disqus 的评论!
归档时间: |
|
查看次数: |
978 次 |
最近记录: |