【问题标题】:How to get number of video views with YouTube API?如何使用 YouTube API 获取视频观看次数?
【发布时间】:2011-03-20 20:36:45
【问题描述】:

这个问题很简单。如何使用 YouTube API 获取视频观看次数?

任务很简单,但我想经常对大量视频使用该查询。有什么方法可以调用他们的 Youtube API 并获取它? (类似于 facebook http://api.facebook.com/restserver.php?method=links.getStats&urls=developers.facebook.com

【问题讨论】:

  • 您只想使用 JavaScript 来执行此操作?
  • 任何有效的东西都各不相同。正如我所说,我必须经常查询大量视频。
  • 无关:哈哈@facebook。如果您有 restserver.php,那么您显然没有抓住重点。

标签: javascript youtube-api


【解决方案1】:

我认为,最简单的方法是获取 JSON 格式的视频信息。如果你想使用 JavaScript,试试jQuery.getJSON()... 但我更喜欢 PHP:

<?php
$video_ID = 'your-video-ID';
$JSON = file_get_contents("https://gdata.youtube.com/feeds/api/videos/{$video_ID}?v=2&alt=json");
$JSON_Data = json_decode($JSON);
$views = $JSON_Data->{'entry'}->{'yt$statistics'}->{'viewCount'};
echo $views;
?>

参考:Youtube API - Retrieving information about a single video

【讨论】:

  • 谢谢,你为我节省了 30 分钟的挖掘时间 :)
  • 这似乎已经过时了?我通过这种方法获得的所有视频观看次数都比视频观看页面上显示的内容少了 100 左右
  • Youtube 会延迟热门视频的观看次数,您对此无能为力。
  • 仅供参考,这在 2015 年 4 月 20 日左右中断,仅返回指向 youtube.com/devicesupportyoutube.com/watch?v=UKY3scPIMd8 的视图信息。基本上,使用 v3 API。
  • ERR_INVALID_RESPONSE
【解决方案2】:

您可以使用新的 YouTube 数据 API v3

如果您检索视频,则 statistics 部分包含 viewCount

来自文档:

https://developers.google.com/youtube/v3/docs/videos#resource

statistics.viewCount / 视频的观看次数。

您可以在客户端或使用某些客户端库在服务器端检索此信息:

https://developers.google.com/youtube/v3/libraries

您可以从文档中测试 API 调用:

https://developers.google.com/youtube/v3/docs/videos/list

示例:

请求:

GET https://www.googleapis.com/youtube/v3/videos?part=statistics&id=Q5mHPo2yDG8&key={YOUR_API_KEY}

Authorization:  Bearer ya29.AHES6ZSCT9BmIXJmjHlRlKMmVCU22UQzBPRuxzD7Zg_09hsG
X-JavaScript-User-Agent:  Google APIs Explorer

回复:

200 OK

- Show headers -

{
 "kind": "youtube#videoListResponse",
 "etag": "\"g-RLCMLrfPIk8n3AxYYPPliWWoo/dZ8K81pnD1mOCFyHQkjZNynHpYo\"",
 "pageInfo": {
  "totalResults": 1,
  "resultsPerPage": 1
 },
 "items": [
  {

   "id": "Q5mHPo2yDG8",
   "kind": "youtube#video",
   "etag": "\"g-RLCMLrfPIk8n3AxYYPPliWWoo/4NA7C24hM5mprqQ3sBwI5Lo9vZE\"",
   "statistics": {
    "viewCount": "36575966",
    "likeCount": "127569",
    "dislikeCount": "5715",
    "favoriteCount": "0",
    "commentCount": "20317"
   }
  }
 ]
}

【讨论】:

  • 这是现在要走的路,V2 Google API 自 2014 年 3 月起已弃用。附加提示:可以像这样检索 API 的多个部分:part=statistics,contentDetails。此外,即使是 V2 API 在大多数情况下似乎都可以正常工作,但在某些视频上却无法正常工作。
【解决方案3】:

API 的第 2 版自 2014 年 3 月起已弃用,其中一些其他答案正在使用该版本。

这是一个非常简单的代码 sn-p,用于获取视频的观看次数,使用 YouTube API v3 中的 JQuery。

您需要先通过Google Developer Console 创建一个 API 密钥。

<script>
  $.getJSON('https://www.googleapis.com/youtube/v3/videos?part=statistics&id=Qq7mpb-hCBY&key={{YOUR-KEY}}', function(data) {
    alert("viewCount: " + data.items[0].statistics.viewCount);
  });
</script>

【讨论】:

    【解决方案4】:

    这是一个小代码 sn-p 使用 Javascript 从 URL 获取 Youtube 视频视图

    Demo of below code

        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);}
    

    【讨论】:

    • 感谢精彩的演示!
    【解决方案5】:

    为什么要使用任何 api 密钥 来检索公共 html 的一部分!

    最简单的 unix 命令行演示示例,使用 curlgrepcut

    curl https://www.youtube.com/watch?v=r-y7jzGxKNo | grep watch7-views-info | cut -d">" -f8 | cut -d"<" -f1
    

    是的,它得到了完整的html页面,这种损失在无数优势面前毫无意义。

    【讨论】:

      【解决方案6】:

      你也可以用这个:

      <?php
          $youtube_view_count = json_decode(file_get_contents('http://gdata.youtube.com/feeds/api/videos/wGG543FeHOE?v=2&alt=json'))->entry->{'yt$statistics'}->viewCount;
          echo $youtube_view_count;
          ?>
      

      【讨论】:

      • 您可以解释更多以及您使用的语言。
      • 这看起来使用的是 API 的旧 v2,现在已弃用。
      【解决方案7】:

      使用youtube-dljq

      views() {
          id=$1
          youtube-dl -j https://www.youtube.com/watch?v=$id |
              jq -r '.["view_count"]'
      }
      
      views fOX1EyHkQwc
      

      【讨论】:

        【解决方案8】:

        使用 Google PHP API 客户端:https://github.com/google/google-api-php-client

        这里有一个小类,只是为了获取单个视频 ID 的 YouTube 统计信息。它显然可以使用 api 的其余部分扩展一吨:https://api.kdyby.org/class-Google_Service_YouTube_Video.html

        class YouTubeVideo
        {
            // video id
            public $id;
        
            // generate at https://console.developers.google.com/apis
            private $apiKey = 'REPLACE_ME';
        
            // google youtube service
            private $youtube;
        
            public function __construct($id)
            {
                $client = new Google_Client();
                $client->setDeveloperKey($this->apiKey);
        
                $this->youtube = new Google_Service_YouTube($client);
        
                $this->id = $id;
            }
        
            /*
             * @return Google_Service_YouTube_VideoStatistics
             * Google_Service_YouTube_VideoStatistics Object ( [commentCount] => 0 [dislikeCount] => 0 [favoriteCount] => 0 [likeCount] => 0 [viewCount] => 5 )  
             */
            public function getStatistics()
            {
                try{
                    // Call the API's videos.list method to retrieve the video resource.
                    $response = $this->youtube->videos->listVideos("statistics",
                        array('id' => $this->id));
        
                    $googleService = current($response->items);
                    if($googleService instanceof Google_Service_YouTube_Video) {
                        return $googleService->getStatistics();
                    }
                } catch (Google_Service_Exception $e) {
                    return sprintf('<p>A service error occurred: <code>%s</code></p>',
                        htmlspecialchars($e->getMessage()));
                } catch (Google_Exception $e) {
                    return sprintf('<p>An client error occurred: <code>%s</code></p>',
                        htmlspecialchars($e->getMessage()));
                }
            }
        }
        

        【讨论】:

          【解决方案9】:

          查看yt:statistics 标签。 它提供viewCountvideoWatchCountfavoriteCount等。

          【讨论】:

            【解决方案10】:

            这是我在TubeCount app 中使用的示例。

            我也使用fields参数来过滤JSON结果,所以只返回我需要的字段。

            var fields = "fields=openSearch:totalResults,entry(title,media:group(yt:videoid),media:group(yt:duration),media:group(media:description),media:group(media:thumbnail[@yt:name='default'](@url)),yt:statistics,yt:rating,published,gd:comments(gd:feedLink(@countHint)))";
            
            var channel = "wiibart";
            
            $.ajax({
                url: "http://gdata.youtube.com/feeds/api/users/"+channel+"/uploads?"+fields+"&v=2&alt=json",
                success: function(data){
            
                    var len = data.feed.entry.length;
            
                    for(var k =0; k<len; k++){
                        var yt = data.feed.entry[k];
                        v.count = Number(yt.yt$statistics != undefined && yt.yt$statistics.viewCount != undefined ? yt.yt$statistics.viewCount : 0);
                    }
                }
            });
            

            【讨论】:

            • 感谢您添加 alt=json 查询参数。默认响应是原子
            【解决方案11】:

            这是 PHP 中的一个简单函数,它返回 YouTube 视频的观看次数。您需要 YouTube 数据 API 密钥 (v3) 才能使其正常工作。如果您没有钥匙,请通过以下地址免费获取:YouTube Data API

            //Define a constant so that the API KEY can be used globally across the application    
            define("YOUTUBE_DATA_API_KEY", 'YOUR_YOUTUBE_DATA_API_KEY');
            
            function youtube_video_statistics($video_id) {
                $json = file_get_contents("https://www.googleapis.com/youtube/v3/videos?part=statistics&id=" . $video_id . "&key=". YOUTUBE_DATA_API_KEY );
                $jsonData = json_decode($json);
                $views = $jsonData->items[0]->statistics->viewCount;
                return $views;
            }
            
            //Replace YOUTUBE_VIDEO_ID with your actual YouTube video Id
            echo youtube_video_statistics('YOUTUBE_VIDEO_ID');
            

            我在我的应用程序中使用了这个解决方案,它从今天开始工作。因此,获取 API 密钥和 YouTube 视频 ID 并在上面的代码(第二行和最后一行)中替换它们,你应该很高兴。

            【讨论】:

              【解决方案12】:

              PHP JSON

              $jsonURL = file_get_contents("https://www.googleapis.com/youtube/v3/videos?id=$Videoid&key={YOUR-API-KEY}&part=statistics");
              $json = json_decode($jsonURL);
              

              首先通过取消注释来浏览这个

              //var_dump(json);
              

              并获得观看次数:

              $vcounts = $json->{'items'}[0]->{'statistics'}->{'viewCount'};
              

              【讨论】:

                【解决方案13】:
                【解决方案14】:

                你可以使用JQuery,别忘了把下面代码中的Your-Api-Key字符串替换掉,点击链接找到你自己的Api keygoogle developers console

                <script>
                    $.getJSON('https://www.googleapis.com/youtube/v3/videospart=statistics&id=Qq7mpb-hCBY&key=Your-Api-Key', function(data) {
                        console.log("viewCount: ", data.items[ 0 ].statistics.viewCount);
                    });
                </script>
                

                【讨论】:

                  【解决方案15】:

                  这可能不是您想要的,但您可以使用以下方法废弃页面以获取信息:

                  document.getElementsByClassName('watch-view-count')[0].innerHTML
                  

                  【讨论】:

                  • 当 API 即将更改时,Youtube 会发出警告。但它与网站上的开发人员没有任何合同。所以这不是一个好主意
                  猜你喜欢
                  • 2023-03-17
                  • 2015-08-30
                  • 2019-03-12
                  • 2019-04-14
                  • 2018-09-02
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2022-01-09
                  相关资源
                  最近更新 更多