gpt4 book ai didi

youtube - 使用 YouTube API 搜索 channel 返回错误结果

转载 作者:行者123 更新时间:2023-12-03 05:48:15 25 4
gpt4 key购买 nike

使用此代码,我可以搜索 YouTube channel 并返回其统计信息;然而,出于某种原因,只有大约一半的 channel 返回任何结果。
例如,如果我使用这个 link to test the API ,可以看到我搜索了Animal Planet ,这不会产生任何结果。但是,如果我们访问 YouTube 的网站并搜索相同的内容,我们会根据需要获得该 channel 。
为什么会发生这种情况,如何解决?
这是我使用的代码:

    @commands.command()
async def yt_test(self, ctx, *, search):
api_key = '...'
youtube = build('youtube', 'v3', developerKey=api_key)
request = youtube.channels().list(
part="snippet,statistics",
forUsername=search,
maxResults=1
)
response = request.execute()
try:
for item in response['items']:
link = item['id']
thumb_image = item['snippet']['thumbnails']['default']['url']
views = "{:,}".format(int(item['statistics']['viewCount']))
subs = "{:,}".format(int(item['statistics']['subscriberCount']))
vidCount = "{:,}".format(int(item['statistics']['videoCount']))
except:
Notfound = discord.Embed(description= "Sorry, but this Channel was not located, check spelling" , color=0xfc0328)
await ctx.send(embed=Notfound)

finalresult = discord.Embed(title = search, url='https://www.youtube.com/channel/' + link,
description= '**Statistics**\nViews: ' + views + '\nSubscribers: ' + subs + "\nVideos: " + vidCount, color=0x00ff00)
finalresult.set_thumbnail(url = thumb_image)
await ctx.send(embed=finalresult)
print(f"{ctx.author} looked up the profile of {search} --- in #{ctx.guild.name}")

最佳答案

您必须承认调用 Channels.list API 端点,通过将参数 forUsername 传递给它, 与前往 YouTube 的 Web UI 进行手动搜索完全不同。为了让这些事情曝光,请耐心等待我一会儿……
根据官方文档,Channels.list使用 forUsername=... 调用的端点生成与 channel 关联的元数据,其中用户名作为参数 forUsername 的参数给出:

forUsername (string)

The forUsername parameter specifies a YouTube username, thereby requesting the channel associated with that username.


根据 an official Google staff post从 2013 年 7 月 11 日起,不需要每个 channel 都附加用户名。因此, Channels.list 是完全可能的如果 forUsername 的参数,端点根本不返回 channel 不代表 YouTube 用户名。
如果你使用我的一个公开(MIT 许可)Python 3 脚本—— youtube-search.py --,你会看到它没有返回你查询的用户名 Animal Planet :
$ python3 youtube-search.py --user-name "Animal Planet"
youtube-search.py: error: user name "Animal Planet": no associated channel found
但是,如果您按如下方式调用该脚本:
$ python3 youtube-search.py --search-term "Animal Planet" --type channel
UCkEBDbzLyH-LbB2FgMoSMaQ: Animal Planet
UCuTSm59-_kap6J7Se-orUVA: Animal Planet Latinoamérica
UCpvajaPSWvFlyl83xvzs65A: animalplanet românia
UCgyOEJZJLPKclqrDyUkZ6Ag: Animal planet 1
UCypzlOdJyyOR2NhKv0o3zig: 動物星球頻道/ Animal Planet Taiwan
UCmMm-p51c14XJ1p294faCmA: Animal Planet Brasil
UCejVe2sNPjjvfCXg35q_EQQ: Animal Planet Videos
UClQLf_zw2A_nRaB45HWTbtA: Your Animal Planet
UChQEdt9dBiCkcCch6LyrjtA: Cute Animal Planet
UCRIS8Y1kfrFvFF_6vt6_3Cg: Animal Planet Videos
当查询相同的搜索词并过滤 TYPE 时,您将看到与 YouTube 的 Web UI 几乎相同的输出。正在 Channel .
YouTube Web UI Screenshot
请注意,您自己的结果(从 youtube-search.py 获得的结果和 YouTube Web UI 提供的结果)很可能与上述结果不同;之所以如此,是因为 Google 搜索是为发起查询的用户量身定制的。
youtube-search.py获得的匹配结果集背后的解释YouTube 网络用户界面如下:
与 YouTube 自己的可通过其 Web UI 访问的搜索功能相对应的 API 端点就是 Search.list 。 .
请阅读 youtube-search.py 的代码,让自己相信这个说法。 : 当使用 --search-term "Animal Planet" --type channel 调用它时,该脚本执行函数 Service.search_term :
class Service:
...
def search_term(self, term, type = None):
resp = self.youtube.search().list(
q = term,
type = type,
part = 'id,snippet',
fields = 'items(id,snippet(title))',
maxResults = self.max_results
).execute()
...
term等于字符串 Animal Planettype等于字符串 channel .因此,该脚本调用 Search.list端点,将参数 q 传递给它和 type 如前所述。

关于youtube - 使用 YouTube API 搜索 channel 返回错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64395760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com