Youtube api 当存在超过50个播放列表项时,如何搜索具有视频ID的播放列表项

Youtube api 当存在超过50个播放列表项时,如何搜索具有视频ID的播放列表项,youtube-api,google-api-php-client,Youtube Api,Google Api Php Client,搜索具有特定视频ID的播放列表项时,youtube api似乎只在50个最新播放列表项中进行搜索 我的播放列表中有1000多个项目,搜索某个视频ID的项目不会产生任何结果。因此,我被迫获取播放列表上的所有项目,并在其上迭代以查找特定项目 // This only searches among the first 50 playlist items $videoId = 'ASDFQWER'; $playlistId = 'ASDFASDFQWERQWER'; $part = "contentDe

搜索具有特定视频ID的播放列表项时,youtube api似乎只在50个最新播放列表项中进行搜索

我的播放列表中有1000多个项目,搜索某个视频ID的项目不会产生任何结果。因此,我被迫获取播放列表上的所有项目,并在其上迭代以查找特定项目

// This only searches among the first 50 playlist items
$videoId = 'ASDFQWER';
$playlistId = 'ASDFASDFQWERQWER';
$part = "contentDetails";
$response = $youtube->playlistItems->listPlaylistItems(
    $part,
    array(
        "playlistId" => $playlistId,
        "videoId" => $videoId,
    )
);
$playlistItem = reset($response->getItems());


// This works, but is slow and awkward
$videoId = 'ASDFQWER';
$playlistId = 'ASDFASDFQWERQWER';
$part = "contentDetails";
$playlistItems = array();
$nextPageToken = NULL;        
do {
    $response = $youtube->playlistItems->listPlaylistItems(
        $part,
        array(
            "playlistId" => $playlistId,
            "maxResults" => 50,
            "pageToken" => $nextPageToken,
        )
    );
    $nextPageToken = $response->getNextPageToken();
    $playlistItems = array_merge($playlistItems, $response->getItems());
} while ($nextPageToken);        
$hasVideoId = function($playlistItem) use ($videoId){
    $idOnItem = $playlistItem->getContentDetails()->getVideoId();
    return ($videoId == $idOnItem);
};
$playlistItem = reset(array_filter($playlistItems, $hasVideoId));
我更愿意使用视频的ID在YouTube端进行搜索,而不是从50个项目中提取所有项目并搜索所有项目

所有这些的要点是自动删除旧视频。如果我只删除视频,我的播放列表中将出现无效项目。这就是为什么我需要找到这些播放列表项,这样我就可以将它们与视频一起删除

我首先在GitHub上为PHP客户端打开了一个问题,但这在客户端上似乎并不是一个问题


非常感谢您的帮助。

您是对的,问题不在于客户;所有的客户端以及API浏览器也展示了它。我猜这是playlitems的副产品,与API可以访问的大多数对象不同,playlitems对它们有一个顺序,因此这种行为意味着底层逻辑是一种按顺序在播放列表中迭代的逻辑


然而,这里有一些事情需要考虑。首先,如果您所做的只是获取contentDetails,我不确定我是否理解代码片段的目的,因为PlayItem对象的contentDetails部分只返回videoId(您已经拥有)。当然,这可能是因为你刚刚简化了这篇文章的内容,实际上你将检索其他部分。但是是否有一些独特的东西要求您使用playlitems端点?因为你已经有了videoId,你可以使用videos->list端点,获得播放列表项中几乎所有的信息。。。事实上,您唯一缺少的是视频在播放列表中的位置(但如果这是您想要的,那么您上面的第二个示例可能是您目前的最佳选择)。

感谢您的帮助。我更新了我的问题,更详细地解释了播放列表项目的原因。在我的例子中,我已经习惯了后面的解决方案。这是缓慢而笨拙的,但这是我目前唯一想到的。