使用服务器为客户端隐藏 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 控制台中执行此操作。 (生产提示)