Python - urllib.error.HTTPError:HTTP错误400:错误请求(Youtube API)。
问题描述:
我使用Youtube API来打开搜索结果。我希望打开搜索结果,将结果追加到JSON中,并从这些结果中创建一个列表。我测试了这个url,它和我的API密钥一起工作。但我得到:Python - urllib.error.HTTPError:HTTP错误400:错误请求(Youtube API)。
> urllib.error.HTTPError: HTTP Error 400: Bad Request error.
。有人会知道我可以如何成功打开这个URL吗?我使用的是Python 3.5,但我也会采用2.7的建议。 在python2.7我尝试使用urllib2.quote(url)
,但它没有奏效。我得到了同样的错误。
search = input('Search for a Video:')
输入:猫影片
urllib.parse.parse_qsl(search)
url = 'https://www.googleapis.com/youtube/v3/search?part=snippet+&maxResults=5&order=rating&q='+search+'&key='+API_KEY
with urllib.request.urlopen(url) as response:
html = response.read()
。异常错误:
Search for a Video:cat videos
Traceback (most recent call last):
File "Project.py", line 15, in <module>
with urllib.request.urlopen(url) as response:
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/urllib/request.py", line 162, in urlopen
return opener.open(url, data, timeout)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/urllib/request.py", line 471, in open
response = meth(req, response)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/urllib/request.py", line 581, in http_response
'http', request, response, code, msg, hdrs)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/urllib/request.py", line 509, in error
return self._call_chain(*args)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/urllib/request.py", line 443, in _call_chain
result = func(*args)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/urllib/request.py", line 589, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 400: Bad Request
答
这狗屎是不是让我回应还这么...... 您是否尝试过使用here的例子吗?
您需要为您的应用程序申请一个auth_token,然后才能继续处理您的请求,但您显示的内容中没有足够的上下文来告诉您实际正在实施OAuth,但我会从此处开始,不太可能是这样就像那样,事情就像Curl一样工作。
然而,您例如,你可以随便拉从一个GET unfancy调用的结果不会对API,但前端,如:
https://www.youtube.com/results?search_query=cute+cats
编辑: 的原因错误的请求(400)是由于搜索参数缺少或url编码。 API上的错误配置可能会导致(403)错误
因此,要使代码正常工作,您需要在URL中添加如下内容:'url ='https://www.youtube.com/results? search_query ='+ search.replace('','+')' 另外,如果你没有实现OAuth,就没有必要使用API(只是不行),想想** beautifulsoup **或者** lxml **代替(我完全选择OAuth作为我的第一选择) – 2016-04-24 01:41:50
感谢您的评论。我正在构建一个简单的搜索应用程序,我相信我在Google Dev页面上看过一个基本的API密钥可以工作。我正在使用API密钥,因为我需要在JSON页面中打开结果。我稍后将使用该JSON页面解析数据并使用我的搜索结果创建一个列表。我测试了使用'webbrowser.open(url)'打开网址,它工作。只是urllib,我遇到了麻烦。 – brazjul
我明白你的意思了。这不是urllib错误,而是来自您的谷歌控制台的API设置,您已经定义了域或源限制。试过你的代码,它的工作原理,当API端的配置是正确的。 几乎忘记了,您**必须对您的搜索值进行网址编码:''Cat Videos“!=”Cat%20Videos“ – 2016-04-24 02:53:43