php 如何在网站上显示YouTube观看次数

yzuktlbb  于 2023-04-04  发布在  PHP
关注(0)|答案(2)|浏览(185)

我想在一个网站中显示一个youtube视频的视图计数。下面的代码是为它写的。但它不打印视图计数,只显示youtube视频。
这是我的代码

`<!DOCTYPE html>
<html>
<head>
    <title>How to put PHP in HTML - Simple Example</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script type="text/javascript">
        function videoViews() {
            var rex = /[a-zA-Z0-9\-\_]{11}/,
            videoUrl = $('input').val() === '' ? alert('Enter a valid Url'):$('input').val(),
            videoId = videoUrl.match(rex),
            jsonUrl = 'http://gdata.youtube.com/feeds/api/videos/' + videoId + '?v=2&alt=json',
            embedUrl = '//www.youtube.com/embed/' + videoId,
            embedCode = '<iframe width="350" height="197" src="' + embedUrl + '" frameborder="0" allowfullscreen></iframe>';
    
            //Get Views from JSON
            $.getJSON(jsonUrl, function (videoData) {
                var videoJson = JSON.stringify(videoData),
                vidJson = JSON.parse(videoJson),
                views = vidJson.entry.yt$statistics.viewCount;
                $('.views').text(views);
            });
    
            //Embed Video
            $('.videoembed').html(embedCode);
        }
    </script>
</head>
<body>
    <input type="url" placeholder="Enter Youtube video URL"> 
    <a href="#" onClick="videoViews()">GO</a>
    
    <div class="videoembed"></div>
    <div class="views"></div>

    <?php
    if(isset($_GET['url'])) {
        $video_ID = substr($_GET['url'], -11);
        $JSON = file_get_contents("https://www.googleapis.com/youtube/v3/videos?part=statistics&id={$video_ID}&key=AIzaSyAGquK-QPs8yaddEqhL1AEmYbrJKT6xs04");
        $JSON_Data = json_decode($JSON);
        $views = $JSON_Data->items[0]->statistics->viewCount;
        echo "<script>$('.views').text($views);</script>";
    }
    ?>
</body>
</html>`

我想在我的网站中显示给定视频的视图数。

uxh89sit

uxh89sit1#

在JavaScript代码中,您正在使用YouTube Data API获取YouTube视频的观看次数,并使用该次数更新.views元素。然而,在PHP代码中,您正在尝试使用不同的API端点执行相同的操作。
要修复此问题并使用YouTube Data API显示视图计数,您可以删除PHP代码并更新JavaScript代码,如下所示:
1.将现有的jsonUrl变量替换为以下内容:

var jsonUrl = 'https://www.googleapis.com/youtube/v3/videos?id=' + videoId + '&part=statistics&key=YOUR_API_KEY';

将YOUR_API_KEY替换为您自己的YouTube数据API密钥。
1.更新$.getJSON函数以处理API响应并更新页面上的视图计数。将现有的$.getJSON函数替换为以下内容:

$.getJSON(jsonUrl, function (data) {
    var views = data.items[0].statistics.viewCount;
    $('.views').text(views);
});

这段代码从JSON响应中获取视图计数,并使用该计数更新.views元素。
通过这些更改,您的代码现在应该显示指定YouTube视频的观看次数。请注意,您需要拥有有效的YouTube Data API密钥,并将其包含在API请求中以检索观看次数。

k5ifujac

k5ifujac2#

这里有一个更抽象的方法来实现可重用性和使用普通的javascript函数。
我们为API调用声明一个返回promise的函数。然后我们声明一个仅返回API响应中的viewCount属性的函数。

function getVideoResponse(video_id) {
        const API_KEY = 'XXX-XXX-XXX-XXX'
        const endpoint = `https://www.googleapis.com/youtube/v3/videos?id=${video_id}&key=${API_KEY}&part=snippet,statistics`
        return new Promise((resolve, reject) => {
            fetch(endpoint)
                .then((response) => response.json())
                .then((data) => {
                    /**
                     * We return the first item of the array
                     * If we insert the parameter statistics at the youtube API endpoint
                     * then an object with the below structure is returned from the API call
                     * 
                     * commentCount: string
                     * favoriteCount: string
                     * likeCount: string
                     * viewCount: string
                     */
                    resolve(data.items[0]);
                })
                .catch((error) => {
                    reject(error);
                });
        });
    }
    
    async function getYouTubeViewCount(video_id) {
        // We destructure the statistics object and then access viewCount property as described ton api call method above 
        const {statistics} = await getVideoResponse(video_id);
        return statistics.viewCount;
    }
    
    // Call the function to get the views count
    getYouTubeViewCount('VIDEO_ID-XXX-XXX').then((viewsCount) => {
        // do something with the views count here
    })

相关问题