youtube数据api v3 php搜索分页?

youtube数据api v3 php搜索分页?,youtube,youtube-api,youtube-data-api,Youtube,Youtube Api,Youtube Data Api,我正在尝试使用youtube api v3 php搜索 我第一次用这个api做这个我是初学者 我有三个问题 1) 如何在下面的搜索列表中显示页码?(每50页结果) 2) 视频持续时间如何显示在列表中?(3:20分:秒) 3) 如何订购viewCount if ($_GET['q']) { require_once 'src/Google_Client.php'; require_once 'src/contrib/Google_YoutubeService.php'; $DEVELO

我正在尝试使用youtube api v3 php搜索

我第一次用这个api做这个我是初学者

我有三个问题

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()));
  }
}
1)如何在下面的搜索列表中显示页码?(每50页结果)

您需要编写自己的缓存逻辑来实现此功能,因为每个结果都会得到两个标记“NextPageToken”和“PreviousPageToken”,后续查询必须包含该标记号才能获得下一页或上一页标记,如下所示

所以,每当结果在缓存中不可用时,您应该发送nextpagetoken或previous page token

特别是在您的情况下,您需要每页50页,并且显示3个分页,如(1,2,NEXT),那么您需要获取两次结果。这两个结果都将保留在缓存中,因此对于第1页和第2页,将从缓存中检索结果。下一步,通过发送nextPageToken,确保您再次在google上进行查询

因此,要显示分页1-n和每50页的结果,您需要对GoogleAPI进行n-1查询。但是,如果您每页显示10个结果,那么您可以对50个结果进行单个查询,使用这些结果,您可以在检索结果的帮助下显示前5页(1-5),接下来您应该再次发送如上所述的下一页标记

注-谷歌youtube api最多提供50个结果

2)视频持续时间如何显示在列表中?(3:20分钟:秒)

Youtube API v3不会在简单的首次搜索响应时返回视频持续时间。要获得视频持续时间,我们需要额外调用youtube api,如下所示

(最多50个ID)

这个问题在“”中突出显示。我也在这里发布了我的答案

因此,如果我们想显示视频持续时间,那么我们需要每次打两个电话

3)如何订购viewCount

下面的触发器查询它将提供按视图计数排序的结果


有关详细信息,请参阅-

youTube API V3与API V2相比有些复杂

对于上面的问题,我的方法不是搜索结果,而是检索用户上传的视频。我相信这是有用的

在v3中创建分页的方式与在v2中创建分页的方式不同,在v2中,您可以像

$youtube = "http://gdata.youtube.com/feeds/api/users/Qtube247/uploads?v=2&alt=jsonc&start-index=1&max-results=50";
在v3中,您需要打两到三个电话,第一个电话是获取频道详细信息,第二个电话是检索播放列表,我们将从中获取频道播放列表Id,最后检索单个视频数据

我正在使用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并提供curl url,然后依次生成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'];
}
然后我们可以创建我们的控制按钮

控制按钮在这里

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

<a href=”?ptk=<?php echo $next?>” >next>></a>
$videoData=json_decode($return,true)

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

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

您可能会得到类似以下内容
('PT2H34M25S')

我已经回答了一个问题,它向您展示了如何转换持续时间数据


您有什么解决方案吗?我也面临着同样的问题?找不到任何解决方案并中断:(如果你也找我共享。可能的示例共享?请在上面的URL中使用你的API令牌。我使用API,localhost search.php在放置服务器时工作。给出错误。
code
Warning:require\u once(contrib/Google\u YoutubeService.php):无法打开流:第26行的/var/www/vhosts/domain.com/httpdocs/youtube/y.php中没有此类文件或目录致命错误:require_once():无法打开所需的“contrib/Google_YoutubeService.php”(include_path='/var/www/vhosts/domain.com/httpdocs/youtube/Google api php-client/src:Google-api-php-client/src'))在第26行的/var/www/vhosts/domain.com/httpdocs/youtube/y.php中
code
我也在使用API,但我没有使用谷歌提供的代码。我正在准备上面的url。你可以用API服务注册你的IP,然后通过任何网络浏览器触发上面的url。所以你需要编写一个脚本,可以触发两个url 1-以获得正常的结果2-为了获得代码片段,我不知道我无法修复此问题。我的英语不足以解释。我将我的网站IP添加到api控制台
<a href=”?ptk=<?php echo $prev?>” ><<prev</a>

<a href=”?ptk=<?php echo $next?>” >next>></a>
$videoDetails="https://www.googleapis.com/youtube/v3/videos?part=id,snippet,contentDetails,statistics,status&id=videoIdHere&key=yourApiKey";