使用YouTube API V3 playlistItems另筑视频查询得到的统计数据获取VIDEOID名单数组的观看次数 [英] Getting the list of videoId in array using YouTube api v3 playlistItems and build another videos query to get statistics viewCount

查看:381
本文介绍了使用YouTube API V3 playlistItems另筑视频查询得到的统计数据获取VIDEOID名单数组的观看次数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要从播放列表中嵌入YouTube视频,也显示观看次数的增加,对于playlistitems在YouTube API第3版不具备的观看次数所以,我需要使用API​​ V3为影片赋予的统计数据做另一个查询的观看次数,但需要在查询中添加逗号分隔的YouTube视频ID(S)的列表
    <$c$c>https://www.googleapis.com/youtube/v3/videos?part=statistics&id='.$listofvideoIDfromPlaylistItems.'&key={YOUR_API_KEY}

I need to embed youtube videos from a playlist and also display the viewCount, the YouTube API v3 for playlistitems does not have the viewCount so, i need to do another query using the API v3 for videos which gives the statistics viewCount but need to add a comma-separated list of the YouTube video ID(s) in the query https://www.googleapis.com/youtube/v3/videos?part=statistics&id='.$listofvideoIDfromPlaylistItems.'&key={YOUR_API_KEY}

这是我的 playlistItems

 public function loadPlaylist($maxVideos){    
    if($this->_key && $this->_playlist) {
        $this->_url = filter_var(
            $this->_apiUrl.'playlistItems?part=id,snippet,contentDetails,status&maxResults='.$maxVideos.'&playlistId='.$this->_playlist.'&key='.$this->_key,
            FILTER_SANITIZE_URL
        );

        $curlObj = curl_init();

           curl_setopt($curlObj, CURLOPT_URL, $this->_url);
           curl_setopt($curlObj, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
            curl_setopt($curlObj, CURLOPT_SSL_VERIFYPEER, false);
           curl_setopt($curlObj, CURLOPT_HTTPGET, true);
           curl_setopt($curlObj, CURLOPT_HTTPHEADER, array('Content-type:application/json','Accept: application/json'));
           curl_setopt($curlObj,CURLOPT_RETURNTRANSFER, true);


        $response = curl_exec($curlObj); 

        curl_close($curlObj);

        $json = json_decode($response, true);


        print("<pre>".print_r($json['items'],true)."</pre>");



    }
    return FALSE;
}

的print_r 给我

Array
(
    [0] => Array
        (
            [kind] => youtube#playlistItem
            [etag] => "xxx"
            [id] => xxx
            [snippet] => Array
                (
                    [publishedAt] => xxx
                    [channelId] => xxx
                    [title] => xxx
                    [description] => xxx
                    [thumbnails] => Array
                        (
                            [default] => Array
                                (
                                    [url] => xxx
                                    [width] => 120
                                    [height] => 90
                                )

                            [medium] => Array
                                (
                                    [url] => xxx
                                    [width] => 320
                                    [height] => 180
                                )

                            [high] => Array
                                (
                                    [url] => xxx
                                    [width] => 480
                                    [height] => 360
                                )

                            [standard] => Array
                                (
                                    [url] => xxx
                                    [width] => 640
                                    [height] => 480
                                )

                            [maxres] => Array
                                (
                                    [url] => xxx
                                    [width] => 1280
                                    [height] => 720
                                )

                        )

                    [channelTitle] => xxx
                    [playlistId] => xxx
                    [position] => 0
                    [resourceId] => Array
                        (
                            [kind] => youtube#video
                            [videoId] => videoID
                        )

                )

            [contentDetails] => Array
                (
                    [videoId] => videoID
                )

            [status] => Array
                (
                    [privacyStatus] => public
                )

        )

    [1] => Array
        (
            [kind] => youtube#playlistItem
            [etag] => "xxx"
            [id] => xxx
            [snippet] => Array
                (
                    [publishedAt] => xxx
                    [channelId] => xxx
                    [title] => xxx
                    [description] => xxx
                    [thumbnails] => Array
                        (
                            [default] => Array
                                (
                                    [url] => xxx
                                    [width] => 120
                                    [height] => 90
                                )

                            [medium] => Array
                                (
                                    [url] => xxx
                                    [width] => 320
                                    [height] => 180
                                )

                            [high] => Array
                                (
                                    [url] => xxx
                                    [width] => 480
                                    [height] => 360
                                )

                            [standard] => Array
                                (
                                    [url] => xxx
                                    [width] => 640
                                    [height] => 480
                                )

                            [maxres] => Array
                                (
                                    [url] => xxx
                                    [width] => 1280
                                    [height] => 720
                                )

                        )

                    [channelTitle] => xxx
                    [playlistId] => xxx
                    [position] => 0
                    [resourceId] => Array
                        (
                            [kind] => youtube#video
                            [videoId] => videoID
                        )

                )

            [contentDetails] => Array
                (
                    [videoId] => videoID
                )

            [status] => Array
                (
                    [privacyStatus] => public
                )

        )

)

如何创建逗号分隔videoIDs?

How can I create the comma-separated videoIDs?

在很多阅读:)

这是我结束了

public static function getVideos($params) {

    $key = $params->get('apiKey');
    $list = $params->get('playlistID');
    $maxVideos = $params->get('maxVideos');

    if($key && $list){

        function get_data($url)
        {
          $ch = curl_init();
          $timeout = 5;
          curl_setopt($ch,CURLOPT_URL,$url);
          curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
          curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
          curl_setopt($ch, CURLOPT_HTTPGET, true);
          curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type:application/json','Accept: application/json'));
          curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
          curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
          $data = curl_exec($ch);
          curl_close($ch);
          return $data;
        }

        $apiPlaylist = get_data("https://www.googleapis.com/youtube/v3/playlistItems?part=id,snippet,contentDetails,status&maxResults=".$maxVideos."&playlistId=".$list."&key=".$key."");

        $video = json_decode($apiPlaylist);

        $video2 = json_decode($apiPlaylist);

        //To display video statistics viewCount
        foreach ($video2->items as $statsitem) {
                $videoids = $statsitem->contentDetails->videoId. ",";

                $apiVideostats = get_data("https://www.googleapis.com/youtube/v3/videos?part=id,statistics&id=".$videoids."&key=".$key."");

                $stats = json_decode($apiVideostats);

                var_dump($stats->items);
        }

        $videolist = array();
        //To display embed code, title and description
        foreach ($video->items as $videoitem) {
                $videolist[] = $videoitem;
            }
            return $videolist;
        }
    return false;
}

在$ stats->项目的var_dump返回

the $stats->items var_dump returns

array (size=1)
  0 => 
    object(stdClass)[686]
      public 'kind' => string 'youtube#video' (length=13)
      public 'etag' => string '"xxx"' (length=57)
      public 'id' => string 'xxx' (length=11)
      public 'statistics' => 
        object(stdClass)[687]
          public 'viewCount' => string '465' (length=3)
          public 'likeCount' => string '1' (length=1)
          public 'dislikeCount' => string '0' (length=1)
          public 'favoriteCount' => string '0' (length=1)
          public 'commentCount' => string '0' (length=1)

array (size=1)
  0 => 
    object(stdClass)[690]
      public 'kind' => string 'youtube#video' (length=13)
      public 'etag' => string '"xxx"' (length=57)
      public 'id' => string 'xxx' (length=11)
      public 'statistics' => 
        object(stdClass)[691]
          public 'viewCount' => string '439' (length=3)
          public 'likeCount' => string '2' (length=1)
          public 'dislikeCount' => string '0' (length=1)
          public 'favoriteCount' => string '0' (length=1)
          public 'commentCount' => string '1' (length=1)

如何到2 foreach循环组合还是我做正确的?

How to combine the 2 foreach loops or am i doing this correctly ?

推荐答案

最后,设法得到它的工作,不知道这是正确的方法,但我得到显示嵌入视频和视频浏览次数。不得不做2个独立的功能。

Finally, managed to get it working, not sure if this is the proper method but i get to display the embed video and the video view count. Had to do 2 separate functions.

   public static function getVideos($params) {

    $key = $params->get('apiKey');
    $list = $params->get('playlistID');
    $maxVideos = $params->get('maxVideos');

    if($key && $list){

        function get_data($url)
        {
          $ch = curl_init();
          $timeout = 5;
          curl_setopt($ch,CURLOPT_URL,$url);
          curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
          curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
          curl_setopt($ch, CURLOPT_HTTPGET, true);
          curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type:application/json','Accept: application/json'));
          curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
          curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
          $data = curl_exec($ch);
          curl_close($ch);
          return $data;
        }

        $apiPlaylist = get_data("https://www.googleapis.com/youtube/v3/playlistItems?part=id,snippet,contentDetails,status&maxResults=".$maxVideos."&playlistId=".$list."&key=".$key."");

        $video = json_decode($apiPlaylist);

        $videolist = array();
        //To display embed code, title and description
        foreach ($video->items as $videoitem) {
                $videolist[] = $videoitem;
        }

        return $videolist;

    }
    return false;
}

public static function getStats($params) {

    $key = $params->get('apiKey');
    $list = $params->get('playlistID');
    $maxVideos = $params->get('maxVideos');

    if($key && $list){

        function get_data2($url)
        {
          $ch = curl_init();
          $timeout = 5;
          curl_setopt($ch,CURLOPT_URL,$url);
          curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
          curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
          curl_setopt($ch, CURLOPT_HTTPGET, true);
          curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type:application/json','Accept: application/json'));
          curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
          curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
          $data = curl_exec($ch);
          curl_close($ch);
          return $data;
        }

        $apiPlaylist = get_data2("https://www.googleapis.com/youtube/v3/playlistItems?part=id,snippet,contentDetails,status&maxResults=".$maxVideos."&playlistId=".$list."&key=".$key."");

        $video2 = json_decode($apiPlaylist);

        $videoids = '';
        //To get all videoId from playlist
        foreach ($video2->items as $statsitem) {
                $videoids .= $statsitem->contentDetails->videoId. ",";

            }

        $apiVideostats = get_data2("https://www.googleapis.com/youtube/v3/videos?part=id,statistics&id=".$videoids."&key=".$key."");

        $stats = json_decode($apiVideostats);

        $statslist = array();
        //To display video statistics viewCount
        foreach ($stats->items as $statitem) {
                $statslist[] = $statitem;
        }

        return $statslist;




    }
    return false;
}

在视图页面,我只是要检查视频ID等于统计ID。

in the view page, i just have to check if the videoid is equal to the statistics id.

这篇关于使用YouTube API V3 playlistItems另筑视频查询得到的统计数据获取VIDEOID名单数组的观看次数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆