gpt4 book ai didi

php - 无法打开流 : HTTP request failed! HTTP/1.0 400 错误请求 - 尝试获取 YouTube API 数据

转载 作者:行者123 更新时间:2023-12-03 05:23:31 24 4
gpt4 key购买 nike

我最近一直在尝试使用 YouTube 的分析 API 获取一些数据。我在一个域上遇到问题,但它在另一个域上运行没有任何错误。

除了从 index.php 更改为 api.php 的表单 action=""之外,它使用完全相同的代码 - 我只是无法弄清楚为什么它在一个域上工作而在另一个域上不工作?!

确切的错误是:

警告:file_get_contents(http://gdata.youtube.com/feeds/api/users/):打开流失败:HTTP 请求失败!第 22 行/customers/2/c/9/catalyst.yt/httpd.www/api.php 中的 HTTP/1.0 400 错误请求警告:file_get_contents(http://gdata.youtube.com/feeds/api/users/?alt=json):打开流失败:HTTP 请求失败!第 24 行/customers/2/c/9/catalyst.yt/httpd.www/api.php 中的 HTTP/1.0 400 错误请求

这是代码

<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 />';


?>

最佳答案

编辑

这是使用 cURL 的 v3 api 请求的示例。因此,您需要在 developer console 中创建一个 api key 。 .如果您还没有服务器 key ,请创建一个新项目,选择它,然后单击“凭据”(在“APIs & auth”中)-> 创建新 key -> 服务器 key -> 创建(您不必如果您在本地机器上开发,请输入任何内容)。

然后将代码中的占位符替换为您的 API key 。

$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 验证,现在它更容易。稍后,您应该正确验证证书。 (在你问之前,我从来没有这样做过)

我希望这对你有用。

原答案

看起来像 allow_url_fopen在 php.ini 中被禁用。如果有一行 allow_url_fopen = Off在您的 php.ini 中,将其更改为 allow_url_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 (可能有一条以分号开头的类似行,您可以删除它)。但在大多数配置中,这已经完成。

关于php - 无法打开流 : HTTP request failed! HTTP/1.0 400 错误请求 - 尝试获取 YouTube API 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26451725/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com