Youtube data api YouTube数据API V3-频道ID的最大搜索结果

Youtube data api YouTube数据API V3-频道ID的最大搜索结果,youtube-data-api,google-data-api,Youtube Data Api,Google Data Api,我偶然发现了API参考文件,内容涉及: :如果您的请求为channelId参数指定了一个值,并将参数值设置为video,[…],则搜索结果最多限制为500个视频 我必须申请付费帐户才能突破500个视频的限制吗?如果是,我该如何申请?如果您需要获取给定频道的所有视频列表(通过其ID标识,例如channel\u ID),则必须按照以下步骤进行: 步骤1:使用参数id=CHANNEL\u id查询API端点,以从API获取: 上面的代码应该只运行一次,以获取上传播放列表ID,如uploads\u ID

我偶然发现了API参考文件,内容涉及:

:如果您的请求为
channelId
参数指定了一个值,并将参数值设置为
video
,[…],则搜索结果最多限制为500个视频


我必须申请付费帐户才能突破500个视频的限制吗?如果是,我该如何申请?

如果您需要获取给定频道的所有视频列表(通过其ID标识,例如
channel\u ID
),则必须按照以下步骤进行:

步骤1:使用参数
id=CHANNEL\u id
查询API端点,以从API获取:

上面的代码应该只运行一次,以获取上传播放列表ID,如
uploads\u ID
,然后根据需要多次使用该ID

通常,频道ID及其相应的上传播放列表ID由
s/^UC([0-9a-zA-Z-]{22})$/UU\1/
关联

第2步:使用先前获得的上传播放列表ID——我们将其命名为
uploads\u ID
——查询API端点以获取该播放列表的所有视频ID的列表:

is_video = lambda item: \
    item['snippet']['resourceId']['kind'] == 'youtube#video'
video_id = lambda item: \
    item['snippet']['resourceId']['videoId']

request = youtube.playlistItems().list(
    playlistId = UPLOADS_ID,
    part = 'snippet',
    fields = 'nextPageToken,items(snippet(resourceId))',
    maxResults = 50
)
videos = []

while request:
    response = request.execute()

    items = response.get('items', [])
    assert len(items) <= 50

    videos.extend(map(video_id, filter(is_video, items)))

    request = youtube.playlistItems().list_next(
        request, response)
请注意,如果列表<代码>视频的长度<代码>N,则上面的代码会减少对<代码>视频的调用次数。列表从<代码>N到<代码>数学地板(N/50)+(1如果N%50,则为0)。这是因为
Videos.list
endpoint的参数可以指定为以逗号分隔的视频ID列表(一个这样的列表中的ID数量最多可以为50)

还要注意,上面的每段代码都使用的request参数来从调用的API端点仅获取实际使用的信息



我还必须提到,根据,对于通过
playlitems.list
endpoint返回的项目数量,design设置了20000个上限。这是不幸的,但却是事实。

不,官方没有办法打破官方文件规定的500英镑上限。但是API功能丰富,因此,请更新您的答案,提及您想要实现的功能,以便我可以指导您进一步。还要提到您正在使用的编程环境。(请注意,该API实际上可以通过公开的Google API库在现代编程环境/语言中使用。)@stvar感谢您的回复。我收集所有YouTube视频元数据用于报告目的。我正在使用python访问数据和分析API。对于每一个视频,我都对viewCount、likeCount、dislikeCount、duration、EstimateMinutesWatches、averageViewDuration等感兴趣。感谢您的步骤。这帮了大忙。我对合并数据和分析API有点问题。我正试图将分析元数据合并到数据部分,结果它搞砸了。当我可以阅读所有视频后,我会问你。在步骤2中,返回的值为空。如果我不是上传视频的原始帐户,这有关系吗?我被授予频道视频的所有者角色。请发布
UU…
ID,以便我可以自己尝试。如果您是帐户所有者,并且正在向API传递授权凭据(即有效的访问令牌),则响应将包括所有上传的视频ID。否则(您不是所有者或使用API密钥访问端点),您将只获得公开视频的ID。我使用API密钥访问端点。你说得对。如果我使用的是GoogleOAuth2.0,我需要使用哪些作用域?我是谷歌OAuth 2.0的新手。使用OAuth时,有没有办法绕过剪切粘贴授权URL链接来获取代码?谢谢
is_video = lambda item: \
    item['snippet']['resourceId']['kind'] == 'youtube#video'
video_id = lambda item: \
    item['snippet']['resourceId']['videoId']

request = youtube.playlistItems().list(
    playlistId = UPLOADS_ID,
    part = 'snippet',
    fields = 'nextPageToken,items(snippet(resourceId))',
    maxResults = 50
)
videos = []

while request:
    response = request.execute()

    items = response.get('items', [])
    assert len(items) <= 50

    videos.extend(map(video_id, filter(is_video, items)))

    request = youtube.playlistItems().list_next(
        request, response)
class Stat:

    def __init__(video_id, view_count, like_count):
        self.video_id = video_id
        self.view_count = view_count
        self.like_count = like_count

stats = []

while len(videos):
    ids = videos[0:50]
    del videos[0:50]

    response = youtube.videos().list(
        id = ','.join(ids),
        part = 'id,statistics',
        fields = 'items(id,statistics)',
        maxResults = len(ids)
    ).execute()

    items = response['items']
    assert len(items) == len(ids)

    for item in items:
        stat = item['statistics']
        stats.append(
            Stat(
                video_id = item['id'],
                view_count = stat['viewCount'],
                like_count = stat['likeCount']
            )
        )