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)错误

+1

因此,要使代码正常工作,您需要在URL中添加如下内容:'url ='https://www.youtube.com/results? search_query ='+ search.replace('','+')' 另外,如果你没有实现OAuth,就没有必要使用API​​(只是不行),想想** beautifulsoup **或者** lxml **代替(我完全选择OAuth作为我的第一选择) – 2016-04-24 01:41:50

+0

感谢您的评论。我正在构建一个简单的搜索应用程序,我相信我在Google Dev页面上看过一个基本的API密钥可以工作。我正在使用API​​密钥,因为我需要在JSON页面中打开结果。我稍后将使用该JSON页面解析数据并使用我的搜索结果创建一个列表。我测试了使用'webbrowser.open(url)'打开网址,它工作。只是urllib,我遇到了麻烦。 – brazjul

+0

我明白你的意思了。这不是urllib错误,而是来自您的谷歌控制台的API设置,您已经定义了域或源限制。试过你的代码,它的工作原理,当API端的配置是正确的。 几乎忘记了,您**必须对您的搜索值进行网址编码:''Cat Videos“!=”Cat%20Videos“ – 2016-04-24 02:53:43