我需要嵌入播放列表中的YouTube視頻並顯示viewCount,播放列表項的YouTube API v3沒有viewCount所以,我需要使用視頻的API V3這給統計的觀看次數做另一個查詢,但需要在查詢中添加逗號分隔的YouTube視頻ID(或多個)的列表 https://www.googleapis.com/youtube/v3/videos?part=statistics&id='.$listofvideoIDfromPlaylistItems.'&key={YOUR_API_KEY}
使用YouTube api v3播放列表項獲取陣列中的videoId列表並構建另一個視頻查詢以獲取統計信息viewCount
這是我爲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?
大量的閱讀:)後
這就是我最終
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;
}
的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)
的$ stats->項目如何將2個foreach循環或合併我是否正確地做了這件事?