当播放列表项超过 50 个时,如何搜索带有视频 ID 的播放列表项

问题描述 投票:0回答:1

搜索具有特定视频 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 客户端打开了一个问题,但这似乎在客户端上确实不是问题。

非常感谢任何帮助。

php youtube-api google-api-php-client
1个回答
0
投票

你是对的,问题不在于客户;而是在于客户。所有客户端以及 API 浏览器也会展示它。我的猜测是,这是以下事实的副产品:与 API 可以访问的大多数对象相反,playlistItems 具有顺序,因此这种行为意味着底层逻辑是按顺序迭代的逻辑播放列表。

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

© www.soinside.com 2019 - 2024. All rights reserved.