2014-09-23 494 views
0

我在最近幾個小時遇到了問題,但沒有找到解決方案。我正在嘗試使用laravel中的php-youtube-api參考link來獲得youtube頻道的名稱。但我只輸出單通道。但我想要一個名爲this的渠道相關名單。當我搜索任何名稱爲「soccerit」的頻道時,返回我按名稱獲取youtube頻道

stdClass Object 
(
[kind] => youtube#channel 
[etag] => "kjEFmP90GvrCl8BObMQtGoRfgaQ/I7mfLJg2NMc3uuc6rLgQDgQ-_3g" 
[id] => UClENohulIkpi8JV18UJIPeg 
[snippet] => stdClass Object 
    (
     [title] => soccer 
     [description] => 
     [publishedAt] => 2005-11-07T19:54:17.000Z 
     [thumbnails] => stdClass Object 
      (
       [default] => stdClass Object 
        (
         [url] => https://yt3.ggpht.com/-NcE9VxoZBwQ/AAAAAAAAAAI/AAAAAAAAAAA/F923oDS5GIc/s88-c-k-no/photo.jpg 
        ) 

       [medium] => stdClass Object 
        (
         [url] => https://yt3.ggpht.com/-NcE9VxoZBwQ/AAAAAAAAAAI/AAAAAAAAAAA/F923oDS5GIc/s240-c-k-no/photo.jpg 
        ) 

       [high] => stdClass Object 
        (
         [url] => https://yt3.ggpht.com/-NcE9VxoZBwQ/AAAAAAAAAAI/AAAAAAAAAAA/F923oDS5GIc/s240-c-k-no/photo.jpg 
        ) 

      ) 

    ) 

[contentDetails] => stdClass Object 
    (
     [relatedPlaylists] => stdClass Object 
      (
       [uploads] => UUlENohulIkpi8JV18UJIPeg 
      ) 

     [googlePlusUserId] => 107844494883714037142 
    ) 

[statistics] => stdClass Object 
    (
     [viewCount] => 763486 
     [commentCount] => 134 
     [subscriberCount] => 1478 
     [hiddenSubscriberCount] => 
     [videoCount] => 32 
    ) 

) 

在此先感謝。

我的代碼是:

YoutubeController.php

class YoutubeController extends BaseController { 

    public function index() 
    { 
     $youtube = new Madcoda\Youtube(array('key' => ##Yuxw99Ka7szK4')); 

     $channel = $youtube->getChannelByName($data['q']); 
     print_r($channel); 
    } 
} 

Youtube.php

public function getChannelByName($username, $optionalParams = false) 
{ 


    $API_URL = $this->getApi('channels.list'); 

    $params = array(
     'forUsername' => $username, 
     'part' => 'id,snippet,contentDetails,statistics,invideoPromotion' 
    ); 


    if($optionalParams){ 
     $params = array_merge($params, $optionalParams); 
    } 


    $apiData = $this->api_get($API_URL, $params); 

    return $this->decodeSingle($apiData); 
} 

public function api_get($url, $params) 
{ 
    //set the youtube key 
    $params['key'] = $this->youtube_key; 

    //boilerplates for CURL 
    // $url = "https://gdata.youtube.com/feeds/api/channels"; 
    $a = $url . (strpos($url, '?') === false ? '?' : '') . http_build_query($params); 
    $tuCurl = curl_init(); 
    curl_setopt($tuCurl, CURLOPT_URL, $a); 

    if (strpos($url, 'https') === false) { 
     curl_setopt($tuCurl, CURLOPT_PORT, 80); 
    } else { 
     curl_setopt($tuCurl, CURLOPT_PORT, 443); 
    } 
    curl_setopt($tuCurl, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($tuCurl, CURLOPT_SSL_VERIFYPEER, 0); 

    $tuData = curl_exec($tuCurl); 
    if (curl_errno($tuCurl)) { 
     throw new \Exception('Curl Error : ' . curl_error($tuCurl)); 
    } 
    return $tuData; 
} 
+0

哪裏是你的代碼? – 2014-09-23 12:26:18

+0

感謝您的回覆@Marcin。我編輯了我的問題,現在你可以檢查我的代碼。 – 2014-09-23 12:39:42

回答

0

看來你正在使用錯誤的方法。方法getChannelByName返回具有確切名稱的通道。如果你想搜索的渠道,你應該使用:

// Search playlists, channels and videos, Return an array of PHP objects 
$channels = $youtube->search($data['q']); 

,或者如果你想搜索合作只應選擇視頻:

// Search only Videos, Return an array of PHP objects 
$channels = $youtube->searchVideos($data['q']); 
+0

謝謝@ Marcin.You是對的。現在它使用$ youtube-> searchAdvanced(array(/ * params * /));功能。再次感謝。 – 2014-09-23 13:21:29