如何使用YouTube API获得视频观看次数?


84

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

在此处输入图片说明

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


您只想使用JavaScript来做到这一点?
维克多

任何可行的方法都各不相同。正如我所说,我必须经常查询大量视频。
安特

不相关:哈哈@facebook。如果您有一个,restserver.php您显然会错过重点。
鲁迪

检查此YouTube数据API v3示例API网址freakyjolly.com/youtube-data-v3-api-sample-api-get-url
Code Spy

Answers:


75

我认为,最简单的方法是获取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-检索有关单个视频的信息


5
谢谢,您为我节省了30分钟的挖掘时间:)
Martin

这似乎是过时的了吗?通过此方法,我所有的视频观看次数
都比

Youtube延迟了热门视频的观看,您对此无能为力。
Dylan Cross

3
FYI这打破了围绕2015年4月20日,只有返回查看信息youtube.com/watch?v=UKY3scPIMd8哪个点youtube.com/devicesupport。基本上,使用v3 API。
瑞安·杜瓦尔

1
ERR_INVALID_RESPONSE
阿列克谢。

66

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

如果您检索视频,则统计信息部分包含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"
   }
  }
 ]
}

2
这是现在要走的路,自2014年3月起不推荐使用V2 Google API。另一个提示:可以像这样检索API的多个部分:part=statistics,contentDetails。而且,即使在大多数情况下,即使V2 API似乎都可以使用,但在某些视频中却无法使用。
15

10

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

这是一个非常简单的代码段,可使用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>

8

这是一个小代码段,可使用Javascript从URL获取Youtube视频观看次数

以下代码的演示

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

感谢出色的演示!
加雷斯2015年

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页面,这种损失对无数优势没有任何意义。


4

您也可以使用此:

<?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;
    ?>

您可以解释更多信息以及使用的语言。
Rahil Wazir 2014年

这似乎是使用API​​的旧版本2(现已弃用)。
西蒙·伊斯特


2

使用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()));
        }
    }
}


1

这是我在TubeCount应用程序中使用的示例。

我还使用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查询参数。默认响应是“ atom”
Jonathan MoralesVélez15

1

这是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并将其替换为上面的代码(第二行和最后一行),您应该一切顺利。


1

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


1

您可以使用JQuery,别忘了Your-Api-Key从下面的代码中替换字符串,请点击链接以找到您自己的Api关键字Google开发人员控制台

<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>

-7

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

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

1
当API即将更改时,Youtube会发出警告。但这与网站上的开发人员没有任何合同。所以这不是一个好主意
FRAGA
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.