Получение списка videoId в массиве с помощью api v3 playlistItems YouTube и создание другого видео-запроса для получения статистики viewCount

Мне нужно встроить видео с YouTube из списка воспроизведения, а также отобразить viewCount, YouTube API v3 для playlistitems не имеет viewCount, поэтому мне нужно сделать еще один запрос, используя API v3 для видео, которое дает статистику viewCount, но вам нужно добавить разделенный запятыми список идентификаторов видео YouTube в запросе 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 ) ) ) 

Как создать разделяемые запятой идентификаторы видео?

После долгих чтений 🙂

    Вот что я в итоге

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

     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) 

    Как объединить две петли foreach или я делаю это правильно?

    Related of "Получение списка videoId в массиве с помощью api v3 playlistItems YouTube и создание другого видео-запроса для получения статистики viewCount"

    Наконец, удалось заставить его работать, не уверен, что это правильный метод, но я могу показать видео встраивания и количество просмотров видео. Придется делать 2 отдельные функции.

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

    на странице просмотра мне просто нужно проверить, соответствует ли видеоид идентификатору статистики.