首页 > 解决方案 > 检查视频是否有年龄限制

问题描述

您好,我如何能够搜索视频属性以检查视频是否有年龄限制,如果是,那么它会启动一个 if 语句

@commands.command()
    async def yt(self, ctx, *, search):
        query_string = urllib.parse.urlencode({'search_query': search})
        htm_content = urllib.request.urlopen('http://www.youtube.com/results?' + query_string)
        search_results = re.findall(r'/watch\?v=(.{11})',htm_content.read().decode())
        await ctx.send('http://www.youtube.com/watch?v=' + search_results[0])

一点背景故事:我将我的机器人提交给了一个机器人托管网站 top.gg,但它被拒绝了,因为该机器人能够在非 NSFW 频道中发送“NSFW”内容,我真的很想继续工作,所以所有的帮助都很大赞赏

标签: python-3.xyoutubediscorddiscord.pyyoutube-data-api

解决方案


根据 YouTube 的数据 API 文档,您可以使用以下属性附加到有年龄限制的视频:

contentDetails.contentRating.ytRating(细绳)

YouTube 用来识别有年龄限制的内容的分级。

此属性的有效值为:

  • ytAgeRestricted

您必须调用Videos.listAPI 端点,将参数idas传递给它id=VIDEO_ID,其中VIDEO_ID是您感兴趣的视频的 ID。也不必忘记拥有part包含值的参数contentDetails

JSON 响应文本将包含您需要的值items[0].contentDetails.contentRating.ytRating;如果等于 with ,则应检查该值ytAgeRestricted。另请注意,该属性ytRating很可能不存在;在这种情况下,视频不受年龄限制。


在 Python 的上下文中,如果您使用Google APIs Client Library for Python,那么您对Videos.list端点的调用将如下所示:

from googleapiclient.discovery import build
youtube = build('youtube', 'v3', developerKey = APP_KEY)

response = youtube.videos().list(
    id = VIDEO_ID,
    part = 'contentDetails',
    fields = 'items(contentDetails(contentRating(ytRating)))',
    maxResults = 1
).execute()

age_restricted = response['items'][0] \
    ['contentDetails'] \
    ['contentRating'] \
    .get('ytRating') == \
    'ytAgeRestricted'

请注意,上面的代码被简化了很多,因为没有错误处理。

另请注意,上面的代码使用参数for仅从fields端点获取属性。从 API 中只询问真正需要的信息总是好的。ytRating


推荐阅读