Làm cách nào để có được số lượt xem video với YouTube API?


84

Câu hỏi rất đơn giản. Làm cách nào để có được số lượt xem video với YouTube API?

nhập mô tả hình ảnh ở đây

Nhiệm vụ rất đơn giản nhưng tôi muốn sử dụng truy vấn đó trên số lượng lớn video rất thường xuyên. Có cách nào để gọi API Youtube của họ và lấy nó không? (đại loại như facebook http://api.facebook.com/restserver.php?method=links.getStats&urls=developers.facebook.com )


Bạn chỉ muốn sử dụng JavaScript để làm điều này?
Victor

bất cứ điều gì hoạt động tốt khác nhau. như tôi đã nói, tôi phải truy vấn số lượng lớn video thường xuyên.
Ante

Không liên quan: LOL @ facebook. Nếu bạn có, restserver.phpbạn rõ ràng đang thiếu điểm.
Rudie

kiểm tra điều này liệu API của YouTube mẫu v3 API Url freakyjolly.com/youtube-data-v3-api-sample-api-get-url
Mã Spy

Câu trả lời:


75

Tôi nghĩ, cách dễ nhất là lấy thông tin video ở định dạng JSON. Nếu bạn muốn sử dụng JavaScript, hãy thử jQuery.getJSON () ... Nhưng tôi thích PHP hơn:

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

Tham khảo: Youtube API - Truy xuất thông tin về một video


5
Cảm ơn, bạn đã tiết kiệm cho tôi 30 phút đào xung quanh :)
Martin

điều này có thể lỗi thời tho ?? tất cả video của tôi xem đếm thông qua phương pháp này là một tốt 100 hoặc lâu hơn đằng sau những gì được thể hiện trên trang xem video
mdskinner

Youtube trì hoãn lượt xem đối với các video phổ biến, bạn thực sự không thể làm được gì nhiều.
Dylan Cross

3
FYI điều này đã xảy ra vào khoảng ngày 20 tháng 4 năm 2015 và chỉ trả về thông tin lượt xem cho youtube.com/watch?v=UKY3scPIMd8 trỏ đến youtube.com/devicesupport . Về cơ bản, sử dụng API v3.
Ryan DuVal

1
ERR_INVALID_RESPONSE
Alexey Sh.

66

Bạn có thể sử dụng API dữ liệu YouTube v3 mới

nếu bạn truy xuất video, phần thống kê chứa số lượt xem :

từ tài liệu:

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

Statistics.viewCount / Số lần video đã được xem.

Bạn có thể truy xuất thông tin này ở phía máy khách hoặc phía máy chủ bằng cách sử dụng một số thư viện máy khách:

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

Và bạn có thể kiểm tra lệnh gọi API từ tài liệu:

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

Mẫu vật:

Yêu cầu:

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

Phản ứng:

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
Đây là cách để đi ngay bây giờ, API V2 Google bị phản đối từ tháng năm 2014. tip khác: người ta có thể lấy nhiều phần của API như thế này: part=statistics,contentDetails. Hơn nữa, ngay cả API V2 dường như hoạt động trong hầu hết các trường hợp, nó không hoạt động trên một số video.
COil

10

Phiên bản 2 của API đã không được dùng nữa kể từ tháng 3 năm 2014, mà một số câu trả lời khác đang sử dụng.

Đây là một đoạn mã rất đơn giản để tính số lượt xem từ một video, sử dụng JQuery trong YouTube API v3.

Trước tiên, bạn cần tạo khóa API thông qua Bảng điều khiển dành cho nhà phát triển của Google .

<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

Đây là một đoạn mã nhỏ để lấy lượt xem video trên Youtube từ URL bằng Javascript

Demo mã bên dưới

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

Cảm ơn vì bản demo tuyệt vời!
Gareth

5

Tại sao lại sử dụng bất kỳ khóa api nào để truy xuất một phần html công khai!

Ví dụ minh họa dòng lệnh unix đơn giản nhất, sử dụng curl , grepcut .

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

Vâng, nó có được trang html đầy đủ, mất mát này không có ý nghĩa gì so với vô số lợi thế.


4

Bạn cũng có thể sử dụng cái này:

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

Bạn có thể giải thích thêm và bạn đã sử dụng ngôn ngữ nào.
Rahil Wazir

Điều này có vẻ như đang sử dụng v2 cũ của API hiện không được dùng nữa.
Simon East,

3

Sử dụng youtube-dljq:

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

views fOX1EyHkQwc

2

Sử dụng Ứng dụng khách API PHP của Google: https://github.com/google/google-api-php-client

Đây là một lớp học nhỏ chỉ để lấy số liệu thống kê trên YouTube cho một id video. Rõ ràng nó có thể được mở rộng thêm một tấn bằng cách sử dụng phần còn lại của 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

Đây là một ví dụ mà tôi đã sử dụng trong ứng dụng TubeCount của mình .

Tôi cũng sử dụng tham số các trường để lọc kết quả JSON, vì vậy chỉ những trường tôi cần mới được trả về.

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

Cảm ơn bạn đã thêm tham số truy vấn alt = json. Phản hồi mặc định là nguyên tử
Jonathan Morales Vélez

1

Đây là một hàm đơn giản trong PHP trả về số lượt xem mà một video YouTube có. Bạn sẽ cần Khóa API dữ liệu YouTube (v3) để khóa này hoạt động. Nếu bạn không có khóa, hãy nhận một khóa miễn phí tại: 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');

Tôi đang sử dụng giải pháp này trong ứng dụng của mình và nó đang hoạt động cho đến hôm nay. Vì vậy, hãy lấy Khóa API và ID video YouTube và thay thế chúng trong mã trên (Dòng thứ hai và Dòng cuối cùng) và bạn nên bắt đầu.


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

Đầu tiên hãy xem qua vấn đề này bằng cách bỏ ghi chú

//var_dump(json);

và nhận được lượt xem được tính là:

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


1

Bạn có thể sử dụng JQuery, đừng quên thay thế Your-Api-Keychuỗi từ mã bên dưới, theo liên kết để tìm bảng điều khiển dành cho nhà phát triển Google khóa Api của riêng bạn

<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

Đây có thể không phải là những gì bạn muốn nhưng bạn có thể loại bỏ trang để lấy thông tin bằng cách sử dụng như sau:

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

1
Youtube cảnh báo khi API sắp thay đổi. Nhưng nó không có bất kỳ hợp đồng nào với các nhà phát triển trên trang web. Vì vậy, đây không phải là một ý tưởng hay
FRAGA
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.