YouTube data api v3 PHP поиск по страницам?
Я пытаюсь с youtube api v3 php search...
первый раз, когда я использую этот api для этого, я новичок...
У меня 3 вопроса;
1) как можно ниже списка поиска, отображающего номера страниц? (на странице 50 результат)
2) как продолжительность видео может отображаться в списке? (3:20 мин:сек)
3) Как заказать viewCount
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()));
}
}
2 ответов
1) как можно ниже списка поиска, отображающего номера страниц? (на странице 50 результат)
вам нужно написать свою собственную логику кэширования для реализации этой функции, потому что с каждым результатом вы получаете два маркера "NextPageToken" и "PreviousPageToken", а последующий запрос должен содержать этот номер маркера, чтобы получить следующую страницу или предыдущий маркер страницы, как показано ниже.
поэтому, когда результаты недоступны в кэше, вы должны отправить либо nextpagetoken, либо предыдущий маркер страницы.
в частности, ваш случай, когда вам нужно 50 страниц на страницу,и вы показываете 3 страницы, как (1,2, далее), то вам нужно получить результаты два раза. Оба результата вы будете хранить в кэше, поэтому для страниц 1 и 2 результаты будут извлечены из кэша. Для следующего вы убедитесь, что вы делаете запрос google снова, отправив nextPageToken.
таким образом, чтобы показать разбиение на страницы 1-n и каждую страницу 50 результатов, то вам нужно сделать N-1 запросов к Google api. Но если вы показываете 10 результатов на страницу, вы можете сделать один запрос из 50 результатов, используя которые вы можете показать первые 5 страниц (1-5) с помощью полученных результатов, а затем вы должны снова отправить маркер следующей страницы, как указано выше.
Примечание-Google youtube api обеспечивает максимум 50 результатов.
2) как может ли продолжительность видео отображаться в списке? (3:20 мин:сек)
Youtube API v3 не возвращают продолжительность видео при простом первом ответе на поиск. Чтобы получить продолжительность видео, нам нужно сделать один дополнительный звонок в YouTube api, как показано ниже.
https://www.googleapis.com/youtube/v3/videos?id=VIDEO_ID1%2CVIDEO_ID2&part=contentDetails&key=API_KEY (макс 50 идентификаторов)
эта проблема выделена в "http://code.google.com/p/gdata-issues/issues/detail?id=4294".Я тоже отправил свой ответ здесь.
следовательно, если мы хотим отобразить продолжительность видео, нам нужно сделать два звонка каждый раз.
3) Как заказать viewCount
триггер ниже запроса он предоставит результаты, упорядоченные по виду рассчитывать.
для деталей пожалуйста см. Это -https://developers.google.com/youtube/v3/docs/search/list#order
youTube API V3 как-то сложно сравнить с API V2.
на вопрос выше, мой подход не для результата поиска, а для получения загруженных пользователем видео. Я считаю, что это может быть полезным
способ создания разбиения на страницы в v3 не такой, как в v2, где вы можете сделать свой вызов просто как
$youtube = "http://gdata.youtube.com/feeds/api/users/Qtube247/uploads?v=2&alt=jsonc&start-index=1&max-results=50";
в v3 вам нужно сделать два или три вызова, первый из которых будет получить деталь канала и второй вызов будут получать список воспроизведения, откуда мы получим идентификатор списка воспроизведения канала и, наконец, получить отдельные видеоданные.
Я использую Php CURL
$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 из сеанса[] и передаем url-адрес curl, а в свою очередь будет производить nextpagetoken или prevpagetoken. Что угодно вы вводите url-адрес, Api знает, какой набор списка для заполнения.
if(isset($_REQUEST['ptk']) && $_REQUEST['ptk’]!==''){
$pageToken=$_REQUEST['ptk’];
}
здесь мы получаем список воспроизведения пользователя
$ playlistItems =”https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&pageToken=”.$pageToken.”&maxResults=50&playlistId=$playlistId&key= yourApiKey”;
если пользователь имеет больше, чем maxResult, мы должны иметь nextPageToken, взять для примера пользователь имеет 200 загруженных видео, первый pagetoken может быть CDIQAA и следующий pagetoken может быть 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>
отсюда, когда пользователь нажимает ссылку, он устанавливает следующую или предварительную страницу в переменной сеанса (перейдите к up, чтобы увидеть, как это работает)
чтобы получить продолжительность видео, мы используем тот же Php curl
$videoDetails="https://www.googleapis.com/youtube/v3/videos?part=id,snippet,contentDetails,statistics,status&id=videoIdHere&key=yourApiKey";
$videoData = json_decode ($return, true);
$duration = $videoData ['items'] [0] ['contentDetails'] ['длительность'];
$viewCount = $videoData ['items'] [0] ['statistics'] ['viewCount'];
вы можете сделать что-то вроде этого ('PT2H34M25S')
у меня есть ответ на вопрос здесь которые показывают вам, как конвертировать данные продолжительности