使用 youtube.search().list 时获取相同的 youtube 频道 ID

Posted

技术标签:

【中文标题】使用 youtube.search().list 时获取相同的 youtube 频道 ID【英文标题】:Gestting same youtube Channel id's when use youtube.search().list 【发布时间】:2021-12-04 05:36:14 【问题描述】:

我使用 Youtube api 获取 10 个随机 youtube 频道 ID 并将它们放在一个列表中,所以我创建了一个函数来返回这个列表:


def youtube_search():
    all_data = []
    search_response = youtube.search().list(
        part='snippet',
        maxResults=10,
        location=None,
        locationRadius=None,
        regionCode = 'TN',
        )
    response = search_response.execute() 
    for i in range(len(response['items'])):
  
       data = response['items'][i]['snippet']['channelId']

       all_data.append(data)
    
    return all_data

问题是它返回了 10 次相同的 id,恰好只有 2 个不同的 id(1 个 id 2 次,另一个 8 次):

channel_data = youtube_search()
channel_data
['UC6UL29enLNe4mqwTfAyeNuw',
 'UC6UL29enLNe4mqwTfAyeNuw',
 'UCvR2R7j218tzejtTsb_X6Rw',
 'UCvR2R7j218tzejtTsb_X6Rw',
 'UCvR2R7j218tzejtTsb_X6Rw',
 'UCvR2R7j218tzejtTsb_X6Rw',
 'UCvR2R7j218tzejtTsb_X6Rw',
 'UCvR2R7j218tzejtTsb_X6Rw',
 'UCvR2R7j218tzejtTsb_X6Rw',
 'UCvR2R7j218tzejtTsb_X6Rw']

怎么了?为什么我得到相同的 id 而不是完全不同?

【问题讨论】:

当我使用 type = "channel" 时它可以工作,但为什么我得到的是随机频道而不是在我在 search.list endpint 中提到的特定区域? ( regionCode='TN'),这意味着我想在我的示例中获得突尼斯频道。 可能是 TN 区域不受支持(引用自 here):如果指定了不受支持的区域,YouTube 可能仍会选择另一个区域,而不是默认值,用于处理查询。 【参考方案1】:

为了从Search.list API 端点获取仅通道项,有以下请求参数:

type(字符串)

type 参数将搜索查询限制为仅检索特定类型的资源。该值是以逗号分隔的资源类型列表。默认值为video,channel,playlist

可接受的值为:

channel playlist video

因此,请将您的 API 调用更改为:

search_response = youtube.search().list(
    type='channel',
    part='snippet',
    maxResults=10,
    location=None,
    locationRadius=None,
    regionCode = 'TN',
)

您将返回的 items 数组将仅包含引用 YouTube 频道的项目。

【讨论】:

它工作正常,但你知道为什么我得到的是随机频道,而不是我在 search.list endpint 中提到的特定区域吗? ( regionCode='TN'),这意味着我想在我的示例中获得突尼斯频道。 可能是 TN 区域不受支持(引用自 here):如果指定了不受支持的区域,YouTube 可能仍会选择另一个区域,而不是默认值,用于处理查询。 您也可以通过公司的own issue tracker site 直接向 Google 提交有关此问题的错误报告。 我使用了另一个区域代码,但它总是让我得到具有相同 id 的相同列表,我认为 RegionCode 参数甚至没有被考虑,即使我删除了它,它也会显示相同的列表。跨度> 我认为这种行为是 API 的错误。因此,我建议向 Google 提交错误报告。他们有办法知道为什么这不能按照Search.list的官方文档的规定工作。

以上是关于使用 youtube.search().list 时获取相同的 youtube 频道 ID的主要内容,如果未能解决你的问题,请参考以下文章

Youtube 数据 API V3 - 无视频网址

如何使用 YouTube Data API v3 更改页面结果

GAS 以编程方式搜索和下载 youtube

检索单个视频的观看次数 - Youtube API V3.0 - JavaScript

YouTube 数据 API 某些视频不返回频道

在 Firebase Cloud Function 中发出 Youtube Data API 请求