2015-08-31 21 views
1

我需要嵌入播放列表中的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循環或合併我是否正確地做了這件事?

回答

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是否等於統計id。

相關問題