我想使用php检索有关Youtube视频的信息。
我有我的API密钥,我正在尝试这个:
$res = file_get_contents("https://www.googleapis.com/youtube/v3/videos?part=snippet&id=<vid-id>&key=<my-key>");
echo $res;
但是我收到了这个警告:
file_get_contents(https://www.googleapis.com/youtube/v3/videos?part=snippet&id=<vid-id&gt;&amp; key =&lt; my-key&gt;):无法打开流:HTTP请求失败! HTTP / 1.0 400错误请求
响应标题如下所示:
["http_response_header"]=>
array(10) {
[0]=>
string(24) "HTTP/1.0 400 Bad Request"
[1]=>
string(45) "Content-Type: application/json; charset=UTF-8"
[2]=>
string(35) "Date: Sun, 25 May 2014 09:50:12 GMT"
[3]=>
string(38) "Expires: Sun, 25 May 2014 09:50:12 GMT"
[4]=>
string(33) "Cache-Control: private, max-age=0"
[5]=>
string(31) "X-Content-Type-Options: nosniff"
[6]=>
string(27) "X-Frame-Options: SAMEORIGIN"
[7]=>
string(31) "X-XSS-Protection: 1; mode=block"
[8]=>
string(11) "Server: GSE"
[9]=>
string(28) "Alternate-Protocol: 443:quic"
}
现在我被卡住了。我不知道下一步该怎么做才能找出问题所在。我错过了什么吗?我做错了吗?我不知道。
任何提示?
修改
感谢hakre,我能够找到错误消息“accessnotconfigured”。
通过这个Stackoverflow Entry (second response),我想到了创建一个新项目。
然后我跳过了在推荐人中的输入,现在它有效了!
问题是什么,我不知道。我怀疑它与推荐人有关。
答案 0 :(得分:0)
Youtube API具有HTTP响应正文的详细错误报告,它不在响应标头内。
因此,每当您从Youtube API(代码400到499或4xx)中获得HTTP错误状态代码时,您需要查看已提供的JSON。
要查看该JSON,您可以在测试中快速将URL输入浏览器。您将获得一些JSON,其中包含更好地描述您提出请求时的错误。
如果您想在PHP中以编程方式执行此操作,则需要通过$context
参数(或HTTP-wrapper used by file_get_contents
)告知setting the default context options它不应返回FALSE
如果出现HTTP错误(全部为400-599个代码),但要返回响应正文,请参阅ingore_errros
in HTTP context options。
示例:
<?php
stream_context_set_default(['http' => ['ignore_errors' => true]]);
$res = file_get_contents("https://www.googleapis.com/youtube/v3/videos?id=<vid-id>&key=<my-key>");
echo $res;
这提供了以下JSON输出:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "required",
"message": "Required parameter: part",
"locationType": "parameter",
"location": "part"
}
],
"code": 400,
"message": "Required parameter: part"
}
}
(你可能会有所不同,因为你已经获得了我没有的实际ID和KEY参数)
答案 1 :(得分:0)
我与picasaweb.google.com/data/feed/api
有类似的问题。 file_get_contents()
的问题在于,当存在HTTP错误时它会返回false
,因此它不提供对响应正文的访问。
在浏览器中使用URL允许我在响应正文中查看错误消息并了解问题。