使用服务器为客户端隐藏 YouTube API
Hiding YouTube API for client using server
我的经验不足使我无法理解如何隐藏 API 密钥。抱歉,我已经离开 Web 开发 15 年了,因为我专注于关系数据库,并且发生了很多变化。
我读了很多文章,但不知道如何利用它们。我想将我的 YouTube API 密钥放在服务器上,但让客户端能够使用它们 w/o 曝光。我不明白如何在我的服务器(ISP 提供)上设置 API 密钥使客户端能够访问与该项目关联的 YouTube 频道。有人可以给我解释一下吗?
我不确定您想要做什么,但是对于我从事的项目,我需要从 YouTube 获取特定的播放列表并将内容 public 提供给网站的访问者。
我做的是一种代理。我设置了一个包含 api 键的 php 文件,然后让最终用户通过这个 php 文件获取 YT 内容。
php 文件使用 curl 从 YT 获取内容。
希望对您有所帮助。
编辑 1
隐藏密钥的方法是将其放在服务器上的PHP文件中。
此 PHP 文件将连接到 youtube 并在您的客户端页面上检索您想要的数据。
此代码示例,使用正确的 api 键和正确的播放列表 ID 将获得一个 json 文件,其中包含播放列表的前 10 个曲目。
$resp 将包含 json 数据。要提取它,必须将其解码为关联数组。一旦进入数组,它就可以很容易地混入将在客户端浏览器上呈现的 html。
<?php
$apiKey = "AIza...";
$results = "10";
$playList = "PL0WeB6UKDIHRyXXXXXXXXXX...";
$request = "https://www.googleapis.com/youtube/v3/playlistItems?part=id,contentDetails,snippet&maxResults=" . $results .
"&fields=items(contentDetails%2FvideoId%2Cid%2Csnippet(position%2CpublishedAt%2Cthumbnails%2Fdefault%2Ctitle))" .
"&playlistId=" . $playList .
"&key=" . $apiKey;
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_URL => $request,
CURLOPT_SSL_VERIFYPEER => false
));
$resp = curl_exec($curl);
if (curl_errno($curl)) {
$status = "CURL_ERROR";
}else{
// check the HTTP status code of the request
$resultStatus = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($resultStatus == 200) {
$status = "OK";
//Do something with the $resp which is in JSON format.
//Like decoding it into an associative array
} else {
$status = "YT_ERROR";
}
}
curl_close($curl);
?>
<html>
<!-- your html here -->
</html>
注:CURLOPT_SSL_VERIFYPEER
设置为false。这是在开发中。对于产品,它应该是真实的。
另请注意,以这种方式使用 api,您可以将对 api 键的调用限制在您的域中。您可以在 googla api 控制台中执行此操作。 (生产提示)
我的经验不足使我无法理解如何隐藏 API 密钥。抱歉,我已经离开 Web 开发 15 年了,因为我专注于关系数据库,并且发生了很多变化。
我读了很多文章,但不知道如何利用它们。我想将我的 YouTube API 密钥放在服务器上,但让客户端能够使用它们 w/o 曝光。我不明白如何在我的服务器(ISP 提供)上设置 API 密钥使客户端能够访问与该项目关联的 YouTube 频道。有人可以给我解释一下吗?
我不确定您想要做什么,但是对于我从事的项目,我需要从 YouTube 获取特定的播放列表并将内容 public 提供给网站的访问者。
我做的是一种代理。我设置了一个包含 api 键的 php 文件,然后让最终用户通过这个 php 文件获取 YT 内容。
php 文件使用 curl 从 YT 获取内容。
希望对您有所帮助。
编辑 1
隐藏密钥的方法是将其放在服务器上的PHP文件中。 此 PHP 文件将连接到 youtube 并在您的客户端页面上检索您想要的数据。
此代码示例,使用正确的 api 键和正确的播放列表 ID 将获得一个 json 文件,其中包含播放列表的前 10 个曲目。
$resp 将包含 json 数据。要提取它,必须将其解码为关联数组。一旦进入数组,它就可以很容易地混入将在客户端浏览器上呈现的 html。
<?php
$apiKey = "AIza...";
$results = "10";
$playList = "PL0WeB6UKDIHRyXXXXXXXXXX...";
$request = "https://www.googleapis.com/youtube/v3/playlistItems?part=id,contentDetails,snippet&maxResults=" . $results .
"&fields=items(contentDetails%2FvideoId%2Cid%2Csnippet(position%2CpublishedAt%2Cthumbnails%2Fdefault%2Ctitle))" .
"&playlistId=" . $playList .
"&key=" . $apiKey;
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_URL => $request,
CURLOPT_SSL_VERIFYPEER => false
));
$resp = curl_exec($curl);
if (curl_errno($curl)) {
$status = "CURL_ERROR";
}else{
// check the HTTP status code of the request
$resultStatus = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($resultStatus == 200) {
$status = "OK";
//Do something with the $resp which is in JSON format.
//Like decoding it into an associative array
} else {
$status = "YT_ERROR";
}
}
curl_close($curl);
?>
<html>
<!-- your html here -->
</html>
注:CURLOPT_SSL_VERIFYPEER
设置为false。这是在开发中。对于产品,它应该是真实的。
另请注意,以这种方式使用 api,您可以将对 api 键的调用限制在您的域中。您可以在 googla api 控制台中执行此操作。 (生产提示)