我正在尝试使用Google Api Discovery HttpMockSequence,但我一直收到以下错误:
InvalidJsonError:
-------------------- >> begin captured logging << --------------------
googleapiclient.discovery: INFO: URL being requested: GET https://www.googleapis.com/discovery/v1/apis/webmasters/v3/rest
googleapiclient.discovery: ERROR: Failed to parse as JSON: /home/user/development/projectname/tests/build_response_data.json
--------------------- >> end captured logging << ---------------------
以下是我要做的事情:
测试.py
build_response = self.datafile('build_response_data.json')
request_data = self.datafile('saved_request_data.json')
http_auth = HttpMockSequence([
({'status': '200'}, build_response),
({'status': '200'}, request_data)
])
service = build('webmasters',
'v3',
http=http_auth,
developerKey='myapikey1234')
你可以在这里看到我的json文件:build_response_data.json
问题发生在文件googleapiclient/discovery.py
中函数_retrieve_discovery_doc
的第253行
我似乎不明白发生了什么…有人能告诉我我在这里做错了什么吗?
为了回答我自己的问题并帮助同舟共济的其他人,问题是函数_retrieve_discovery_doc
试图按照第253:行中的json加载内容
service = json.loads(content)
但由于我没有打开文件并读取其内容,json实际上试图将url加载为json。
因此,第一部分的解决方案是将HttpMockSequence更改为:
http_auth = HttpMockSequence([
({'status': '200'}, open(build_response, 'rb').read()),
({'status': '200'}, open(request_data, 'rb').read())
])
然后要从request_data
文件返回数据,请执行以下操作:
site_url = 'www.example.com'
body = {
'startDate': '2015-09-11',
'endDate': '2015-12-12',
'dimensions': ['date']
}
build_response_data = self.datafile('build_response_data.json')
request_data = self.datafile('saved_request_data.json')
http_auth = HttpMockSequence([
({'status': '200'}, open(build_response_data, 'rb').read()),
({'status': '200'}, open(request_data, 'rb').read())
])
service = build('webmasters',
'v3',
http=http_auth,
developerKey='myapikey1234')
service.searchanalytics().query(siteUrl=site_url, body=body).execute()
希望这能帮助其他人。