Php 无法打开流:HTTP请求失败!HTTP/1.0 400错误请求-尝试获取YouTube API数据
我最近一直在尝试使用YouTube的分析API获取一些数据。我在一个域上遇到问题,但在另一个域上没有任何错误 除了从index.php改为api.php的表单action=“”,它使用的代码完全相同-我就是不明白为什么它在一个域上工作而在另一个域上不工作 确切的错误是: 警告:文件\获取\内容():无法打开流:HTTP请求失败!HTTP/1.0 400第22行/customers/2/c/9/catalyst.yt/httpd.www/api.php中的错误请求警告:文件\u get\u contents():无法打开流:HTTP请求失败!HTTP/1.0 400第24行的/customers/2/c/9/catalyst.yt/httpd.www/api.php中的错误请求 这是密码Php 无法打开流:HTTP请求失败!HTTP/1.0 400错误请求-尝试获取YouTube API数据,php,api,youtube,youtube-api,Php,Api,Youtube,Youtube Api,我最近一直在尝试使用YouTube的分析API获取一些数据。我在一个域上遇到问题,但在另一个域上没有任何错误 除了从index.php改为api.php的表单action=“”,它使用的代码完全相同-我就是不明白为什么它在一个域上工作而在另一个域上不工作 确切的错误是: 警告:文件\获取\内容():无法打开流:HTTP请求失败!HTTP/1.0 400第22行/customers/2/c/9/catalyst.yt/httpd.www/api.php中的错误请求警告:文件\u get\u con
<html>
<head>
<title>Get YouTube Channel Data</title>
</head>
<body>
<form action="api.php" method="GET">
<input type="text" name="username" />
<input type="submit" value="Submit!" />
</form>
</body>
</html>
<?php
$channelUser = $_GET['username'];
$data = file_get_contents('http://gdata.youtube.com/feeds/api/users/' . $channelUser);
$data = file_get_contents('http://gdata.youtube.com/feeds/api/users/' . $channelUser . '?alt=json');
$data = json_decode($data, true);
$stats_data = $data['entry']['yt$statistics'];
$img_data = $data['entry']['media$thumbnail'];
echo $channelUser . ' Has <strong>'.$stats_data['subscriberCount'].'</strong> Subscribers.<br />';
echo $channelUser . ' Has <strong>'.$stats_data['totalUploadViews'].'</strong> Total Views.<br />';
echo 'Logo: <br /><img src="' .$img_data["url"].'" /><br />';
?>
获取YouTube频道数据
编辑
下面是一个带有cURL的v3api请求示例。因此,您需要在中创建一个api密钥。如果您还没有服务器密钥,请创建一个新项目,选择它,然后单击“凭据”(在“API&auth”中)->创建新密钥->服务器密钥->创建(如果您在本地计算机上开发,则无需输入任何内容)
然后用API密钥替换代码中的占位符
$api_key = 'YOUR_API_KEY';
$url = 'https://www.googleapis.com/youtube/v3/channels?part=snippet,statistics&key=' . $api_key . '&forUsername=' . $_GET['username'];
// initializes the request
$curl = curl_init();
// sets the url
curl_setopt($curl, CURLOPT_URL, $url);
// enables that curl_exec() returns content instead of status code
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// allows redirects
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
// checks if a secure site has been requested
if(preg_match('/^https:\/\//', $url)){
// if so, verification is disabled
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
}
// performs the actual request
$data = curl_exec($curl);
// destructs the request
curl_close($curl);
// this line converts the json string which is returned into a php object
$data = json_decode($data);
// you can access your stats like this:
var_dump($data->items[0]->statistics->subscriberCount);
var_dump($data->items[0]->statistics->videoCount);
var_dump($data->items[0]->snippet->thumbnails->default->url);
请注意,在最终产品中不建议禁用ssl验证,只是现在更容易。稍后,您应该正确验证证书。(在您询问之前,我从未这样做过)
我希望这对你有用
原始答案 看起来php.ini中禁用了
allow\u url\u fopen
。如果php.ini中有一行allow\u url\u fopen=Off
,请将其更改为allow\u url\u fopen=On
但我更喜欢使用cURL:
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://gdata.youtube.com/feeds/api/users/' . $channelUser);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
$data = curl_exec($curl);
curl_close($curl);
还必须启用curl扩展名:
extension=php_curl.dll
(可能有类似的行,以分号开头,您可以删除它)。但在大多数配置中,这已经完成。在web服务器上启用了“实际允许url”。我来试一试,谢谢编辑当试图抓取数据时,这不起作用,不确定为什么(启用了Curl)。请解释什么不起作用或提供一些您得到的输出?此外,您正在使用已弃用的v2 api。您应该创建一个api密钥并使用V3API。我正在做一个例子。