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

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

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

1

Решение

Наконец, удалось заставить это работать, не уверенный, является ли это правильным методом, но я получаю, чтобы показать видео вставки и количество просмотров видео. Пришлось сделать 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;
}

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]