2014-03-07 138 views
5

我試圖與YouTube API V3 PHP搜索...youtube data api v3 php search分頁?

我第一次使用此API爲了這個,我是初學者...

我有3個問題;

1)下面的搜索列表如何顯示分頁數? (每頁50個結果)

2)視頻持續時間如何顯示在列表中? (3:20分鐘:秒)

3)如何可以訂購觀看次數

if ($_GET['q']) { 
    require_once 'src/Google_Client.php'; 
    require_once 'src/contrib/Google_YoutubeService.php'; 
    $DEVELOPER_KEY = 'my key'; 

    $client = new Google_Client(); 
    $client->setDeveloperKey($DEVELOPER_KEY); 
    $youtube = new Google_YoutubeService($client); 

    try { 
    $searchResponse = $youtube->search->listSearch('id,snippet', array(
     'q' => $_GET['q'], 
     'maxResults' => 50, 
     'type' => "video", 
    )); 

    foreach ($searchResponse['items'] as $searchResult) { 

    $videos .= '<li style="clear:left"><img src="'.$searchResult['snippet']['thumbnails']['default']['url'].'" style="float:left; margin-right:18px" alt="" /><span style="float:left">'.$searchResult['snippet']['title'].'<br />'.$searchResult['id']['videoId'].'<br />'.$searchResult['snippet']['publishedAt'].'<br />'.$item['contentDetails']['duration'].'</span></li>'; 
} 




$htmlBody .= <<<END 
    <ul>$videos</ul> 
END; 
    } catch (Google_ServiceException $e) { 
    $htmlBody .= sprintf('<p>A service error occurred: <code>%s</code></p>', 
     htmlspecialchars($e->getMessage())); 
    } catch (Google_Exception $e) { 
    $htmlBody .= sprintf('<p>An client error occurred: <code>%s</code></p>', 
     htmlspecialchars($e->getMessage())); 
    } 
} 
+0

你有任何解決方案轉換?我也面臨同樣的問題? – virus

+0

找不到任何解決方案,打破:(如果你發現跟我分享一下了。 – gokhan

回答

16

1)所示搜索列表如何表示分頁號碼? (每頁50個結果)

您需要編寫自己的緩存邏輯來實現此功能,因爲每次得到兩個令牌「NextPageToken」和「PreviousPageToken」,隨後的查詢必須包含該令牌號以獲取下一頁或以下頁面令牌。

因此,只要緩存中的結果不可用,您就應該發送nextpagetoken或上一頁的令牌。

https://www.googleapis.com/youtube/v3/search?key=API_KEY&part=snippet&q=japan&maxResults=10&order=date&pageToken=NEXT_or_PREVIOUS_PAGE_TOKEN

特別是你的情況,你需要每頁50頁,你是顯示像3分頁(1,2,NEXT),那麼你需要兩次取結果。您將保存在緩存中的結果,以便第1頁和第2頁的結果將從緩存中檢索。對於下一步,您可以確保您通過發送nextPageToken再次查詢Google。

因此,要顯示分頁1-n和每頁50個結果,則需要對google api進行n-1個查詢。但是,如果每頁顯示10個結果,那麼您可以使用50個結果進行單個查詢,您可以藉助檢索結果顯示前5個頁面(1-5),然後再次發送下一個頁面令牌。

注 - 谷歌youtube API提供50個結果最大。

2)視頻持續時間如何顯示在列表中? (3:20分:秒)

Youtube API v3不會在簡單的第一個搜索響應中返回視頻持續時間。爲了獲得視頻持續時間,我們需要像下面那樣對YouTube進行一次額外的呼叫。

https://www.googleapis.com/youtube/v3/videos?id=VIDEO_ID1%2CVIDEO_ID2&part=contentDetails&key=API_KEY(最多50個ID)的

這個問題在 「http://code.google.com/p/gdata-issues/issues/detail?id=4294」。我強調張貼在這裏我的答案了。

因此,如果我們想要顯示視頻時長,那麼我們需要每次進行兩次調用。

3)如何調用下面的查詢,那麼將提供查看次數排序結果的觀看次數

觸發。

https://www.googleapis.com/youtube/v3/search?key=KEY&part=snippet&q=japan&maxResults=5&order=viewCount

更多詳情請瀏覽本 - https://developers.google.com/youtube/v3/docs/search/list#order

+0

可能的例子份額? – gokhan

+0

請使用您的API憑證上面的網址。 – virus

+0

我使用的API,本地主機的search.php工作,當我把服務器。給錯誤。 'code' 警告:require_once(的contrib/Google_YoutubeService.php):未能打開流:在上線/var/www/vhosts/domain.com/httpdocs/youtube/y.php沒有這樣的文件或目錄26致命錯誤:require_once():所需 '的contrib/Google_YoutubeService.php'(包含路徑='/無功/網絡/虛擬主機/ domain.com /的httpdocs /的YouTube/Google-API的PHP的客戶端/ SRC失敗開口:谷歌-API -php-client/src')在/var/www/vhosts/domain.com/httpdocs/youtube/y.php 26行 'code' – gokhan

2

YouTube的API V3是某種複雜的比較API V2。

對於上面的問題,我的方法不是搜索結果,而是檢索用戶上傳的視頻。我相信

References

您創建V3分頁的方式是不一樣的在V2,你可以讓你的電話簡直像

$youtube = "http://gdata.youtube.com/feeds/api/users/Qtube247/uploads?v=2&alt=jsonc&start-index=1&max-results=50"; 

在v3中,你需要使這個可能是有用的兩個或三個調用第一個將獲得頻道詳細信息,第二個調用將從我們將獲得頻道播放列表Id的位置檢索播放列表,最後檢索單個視頻數據。

我使用PHP捲曲

$youtube = 「https://www.googleapis.com/youtube/v3/channels?part=snippet%2CcontentDetails%2Cstatistics&id=yourChannelIdgoeshere&key=yourApiKey」; 

在這裏,我們檢索用戶的播放列表ID

$result = json_decode($return, true); 
$playlistId=$result['items'][0]['contentDetails']['relatedPlaylists']['uploads']; 

我們定義pagetoken

$pageToken=’’; 

每次用戶點擊控制按鈕,我們從會話檢索pagetoken []並提供curl url,並反過來會產生nextpagetoken或prevpagetoken。無論您提供什麼url,Api都知道要填充的列表集合。

if(isset($_REQUEST['ptk']) && $_REQUEST['ptk’]!==''){ 
$pageToken=$_REQUEST['ptk’]; 

} 

在這裏,我們檢索用戶的播放列表

​​

如果用戶擁有比maxResult多,我們應該有nextPageToken這個,採取一個例子用戶200個上傳的視頻,第一pagetoken可能CDIQAA和下一頁可能是CGQQAA而以前可能是CDIQAQ,類似的東西,所以不是一個數字。

在這裏我們保存pagetoken

if(isset($result['nextPageToken'])) { $_SESSION[nextToken]=$result['nextPageToken']; 
} 

if(isset($result['prevPageToken'])) { $_SESSION[prevToken]=$result['prevPageToken']; 
} 

我們就可以創造我們的控制按鈕<>

$next=$_SESSION[nextToken]; 

$prev=$_SESSION[prevToken]; 

控制按鈕這裏

<a href=」?ptk=<?php echo $prev?>」 ><<prev</a> 

<a href=」?ptk=<?php echo $next?>」 >next>></a> 

從這裏當用戶點擊鏈接它在會話變量中設置next或prev頁面(繼續查看這個工作如何)

要獲得視頻持續時間,我們使用相同的PHP捲曲

$videoDetails="https://www.googleapis.com/youtube/v3/videos?part=id,snippet,contentDetails,statistics,status&id=videoIdHere&key=yourApiKey"; 

$可視數據= json_decode($回報,真正的);

$ duration = $ videoData ['items'] [0] ['contentDetails'] ['duration'];

$ viewCount = $ videoData ['items'] [0] ['statistics'] ['viewCount'];

你可能會得到這樣的事情('PT2H34M25S')

我回答一個問題Here它告訴你如何持續時間數據

See Working Demo Here