Jak uzyskać liczbę wyświetleń wideo za pomocą YouTube API?


84

Pytanie jest bardzo proste. Jak uzyskać liczbę wyświetleń wideo za pomocą YouTube API?

wprowadź opis obrazu tutaj

Zadanie jest proste, ale chciałbym często używać tego zapytania w przypadku dużej liczby filmów. Czy jest jakiś sposób, aby zadzwonić do ich interfejsu API YouTube i go pobrać? (coś w rodzaju facebook http://api.facebook.com/restserver.php?method=links.getStats&urls=developers.facebook.com )


Chcesz używać do tego tylko JavaScript?
Victor,

wszystko, co działa, różni się dobrze. jak już powiedziałem, muszę bardzo często przesyłać zapytania dotyczące dużej liczby filmów.
Ante

Niepowiązane: LOL @ facebook. Jeśli masz restserver.php, wyraźnie nie rozumiesz.
Rudie

sprawdź ten przykładowy adres
Code Spy

Odpowiedzi:


75

Myślę, że najłatwiejszym sposobem jest uzyskanie informacji o wideo w formacie JSON. Jeśli chcesz używać JavaScript, wypróbuj jQuery.getJSON () ... Ale ja wolę 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;
?>

Ref: Youtube API - Pobieranie informacji o pojedynczym filmie


5
Dzięki, zaoszczędziłeś mi 30 minut na kopaniu :)
Martin

ta małpa jest nieaktualna, chociaż? wszystkie moje filmy wideo liczone za pomocą tej metody są o około 100
niższe

YouTube opóźnia wyświetlenia popularnych filmów, niewiele można z tym zrobić.
Dylan Cross,

3
Do Twojej wiadomości doszło około 20 kwietnia 2015 r. I zwróciło tylko informacje dotyczące przeglądania dla youtube.com/watch?v=UKY3scPIMd8, które wskazują na youtube.com/devicesupport . Zasadniczo użyj interfejsu API v3.
Ryan DuVal

1
ERR_INVALID_RESPONSE
Alexey Sh.

66

Możesz skorzystać z nowego YouTube Data API v3

jeśli pobierasz wideo, część statystyki zawiera liczbę wyświetleń :

z dokumentu:

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

statistics.viewCount / liczba wyświetleń wideo.

Możesz pobrać te informacje po stronie klienta lub po stronie serwera, korzystając z niektórych bibliotek klienta:

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

Możesz też przetestować wywołanie API z dokumentu:

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

Próba:

Żądanie:

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

Odpowiedź:

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
To jest do zrobienia teraz, API V2 Google jest nieaktualna od marca 2014 roku dodatkowe wskazówka: można odzyskać wiele części API tak: part=statistics,contentDetails. Co więcej, nawet API V2 wydaje się działać w większości przypadków, nie działa w niektórych filmach.
COil

10

Wersja 2 interfejsu API została wycofana od marca 2014 r., Z której korzystają niektóre z pozostałych odpowiedzi.

Oto bardzo prosty fragment kodu, który pozwala uzyskać liczbę wyświetleń z filmu, używając JQuery w YouTube API v3.

Najpierw musisz utworzyć klucz API za pośrednictwem Google Developer Console .

<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

Oto mały fragment kodu, aby uzyskać widoki wideo YouTube z adresu URL za pomocą JavaScript

Demo poniższego kodu

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

Dzięki za świetne demo!
Gareth

5

Po co używać dowolnego klucza API do pobierania części publicznego kodu HTML!

Najprostszy przykładowy przykład wiersza poleceń unixa, używając curl , grep i cut .

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

Tak, dostajesz pełną stronę html, ta strata nie ma znaczenia w porównaniu z niezliczonymi zaletami.


4

Możesz też tego uż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;
    ?>

Możesz wyjaśnić więcej i jakiego języka użyłeś.
Rahil Wazir,

Wygląda na to, że używany jest stary interfejs API w wersji 2, który jest obecnie przestarzały.
Simon East

3

Korzystanie youtube-dli jq:

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

views fOX1EyHkQwc

2

Użyj klienta Google PHP API: https://github.com/google/google-api-php-client

Oto mała mini klasa służąca do uzyskania statystyk YouTube dla jednego identyfikatora wideo. Można go oczywiście rozszerzyć o tonę za pomocą pozostałej części interfejsu 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

Oto przykład, którego użyłem w mojej aplikacji TubeCount .

Używam również parametru fields do filtrowania wyniku JSON, więc zwracane są tylko te pola, których potrzebuję.

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

Dziękujemy za dodanie parametru zapytania alt = json. Domyślną odpowiedzią jest atom
Jonathan Morales Vélez

1

Oto prosta funkcja w PHP, która zwraca liczbę wyświetleń wideo YouTube. Aby to zadziałało, będziesz potrzebować klucza YouTube Data API (v3). Jeśli nie masz klucza, zdobądź go bezpłatnie pod adresem: 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');

Używam tego rozwiązania w mojej aplikacji i działa od dzisiaj. Więc weź klucz API i identyfikator wideo YouTube i zamień je w powyższym kodzie (druga linia i ostatnia linia) i powinieneś być gotowy.


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

Najpierw przejdź przez to, odkomentowując

//var_dump(json);

a wyświetlenia liczą się jako:

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


1

Możesz użyć JQuery, nie zapomnij zamienić Your-Api-Keyciągu znaków z poniższego kodu, skorzystaj z linku, aby znaleźć własny klucz Api w konsoli programistów 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

Prawdopodobnie nie jest to to, czego chcesz, ale możesz zeskrobać stronę w celu uzyskania informacji, korzystając z następującego narzędzia:

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

1
Youtube ostrzega, kiedy API ma się zmienić. Ale nie ma żadnej umowy z programistami na stronie. Więc to nie jest dobry pomysł
FRAGA
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.