我一直在研究这个问题,似乎无法超越这个障碍。
我可以使用v3 api创建服务,并且可以获取一些用户特定数据,但是当涉及添加播放列表时,我收到的错误似乎无法解决。
- 编辑 - 传递对象而不是jsonified字符串将起作用。
json_obj = {'snippet':{'title':title}}
#json_str = json.dumps(json_obj)
playlist = self.service.playlists().insert(part='snippet, status', body=json_obj)
playlist.execute()
这给了我这样的东西:
请求标题:
{'Authorization': u'Bearer TOKEN',
'accept': 'application/json',
'accept-encoding': 'gzip, deflate',
'content-length': '73',
'content-type': 'application/json',
'user-agent': 'google-api-python-client/1.0'}
请求正文:
'"{\\"snippet\\":{\\"title\\":\\"2013newTest\\"}}"'
响应标题:
{'cache-control': 'private, max-age=0',
'content-type': 'application/json; charset=UTF-8',
'date': 'Tue, 08 Jan 2013 01:40:13 GMT',
'expires': 'Tue, 08 Jan 2013 01:40:13 GMT',
'server': 'GSE',
'status': '400',
'transfer-encoding': 'chunked',
'x-content-type-options': 'nosniff',
'x-frame-options': 'SAMEORIGIN',
'x-xss-protection': '1; mode=block'}
回应机构:
'{"error": {
"errors": [
{"domain": "youtube.parameter",
"reason": "missingRequiredParameter",
"message": "No filter selected.",
"locationType": "parameter",
"location": ""}
],
"code": 400,
"message": "No filter selected."}}'
图书馆提出的回应是:
Traceback (most recent call last):
File "playlist.py", line 190, in <module>
yt_pl.add_playlist('2013newTest')
File "playlist.py", line 83, in add_playlist
playlist.execute()
File "oauth2client/util.py", line 121, in positional_wrapper
return wrapped(*args, **kwargs)
File "apiclient/http.py", line 693, in execute
raise HttpError(resp, content, uri=self.uri)
apiclient.errors.HttpError: <HttpError 400 when requesting https://www.googleapis.com/youtube/v3/playlists?alt=json&part=snippet%2C+status&key=[KEY] returned "No filter selected.">
我唯一能找到某人得到同样错误的东西只是含糊不清,而且是在C#中。有没有人能够在python中使用v3添加播放列表,如果是这样,你能看到我做错了吗?
答案 0 :(得分:3)
body
中发送的有效负载必须是可以序列化为JSON的对象。
这是因为默认JsonModel
used for your request正文有一个serialize
方法,总是dumps
到json:
class JsonModel(BaseModel):
...
def serialize(self, body_value):
if (isinstance(body_value, dict) and 'data' not in body_value and
self._data_wrapper):
body_value = {'data': body_value}
return simplejson.dumps(body_value)
因此,当您传入已经JSON序列化的字符串时,您将获得双序列化。
例如:
>>> json.dumps({'a': 'b'})
'{"a": "b"}'
>>> json.dumps('{"a": "b"}')
'"{\\"a\\": \\"b\\"}"'
这基本上是您的请求正文发生的事情:
'"{\\"snippet\\":{\\"title\\":\\"2013newTest\\"}}"'
你能否指出一些让你误入歧途的文件,以便修复它?