为了学习此api,我正在尝试创建一个机器人。
该机器人的工作之一是在频道上传视频时先发表评论。
在某些频道上它可以工作,但是在某些频道上它不能工作。
例如,在此频道https://www.youtube.com/channel/UC295-Dw_tDNtZXFeAPAW6Aw上, 它声称最新的视频是/ /www.youtube.com/watch?v=pceedMMwwcE&t](https://www.youtube.com/watch?v=pceedMMwwcE&t)。
self.youtube = build('youtube', 'v3', developerKey=api, credentials=credentials) self.upload_id = self.youtube.channels().list(id=self.channel_id, part='contentDetails').execute()['items'][0]['contentDetails']['relatedPlaylists']['uploads'] def get_latest_video(self): url = f'https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&maxResults=1&playlistId={self.upload_id}&key={self.api}' json_url = urllib.request.urlopen(url) data = json.loads(json_url.read()) self.quata_spent += 3 return data['items'][0]['snippet']['resourceId']['videoId']
这和调用此 https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&maxResults=1&playlistId= {self.upload_id}&key = {self.api}一样吗?是否有人遇到这种不一致之处?
编辑:
我发现使用搜索方法代替playlistItems可以正常工作。有人知道为什么吗?我负担不起使用搜索方法,因为每个请求要花费100个quata。
这是API的常见陷阱。请仔细考虑以下内容:
向频道的上传列表查询的PlaylistItems端点会生成一个项列表,该列表由videoPublishedAt排序。但是项目本身包含附加的PublishedAt datetime属性。(下面的重点是我的。)
videos#snippet.publishedAt (日期时间) 视频发布的日期和时间。 请注意,此时间可能不同于视频的上传时间。 例如,如果将视频作为私人视频上传,然后在以后公开,则此属性将指定将视频公开的时间。
videos#snippet.publishedAt (日期时间)
视频发布的日期和时间。 请注意,此时间可能不同于视频的上传时间。 例如,如果将视频作为私人视频上传,然后在以后公开,则此属性将指定将视频公开的时间。
然后获得的输出是事实正确的:
$ youtube-data --channel=UC295-Dw_tDNtZXFeAPAW6Aw --uploads --page=+2 --table --relative-date|grep -wEn '^(cZI3Krk59T4|pceedMMwwcE)' 1:cZI3Krk59T4 2 days 8 hours ago 33 LIFE-SAVING OUTDOOR TRICKS YOU NEED TO TRY YOURSELF 62:pceedMMwwcE 8 hours 19 mins ago 25 CRAZY IDEAS TO HAVE FUN WITH FRIENDS $ youtube-data --playlist=UU295-Dw_tDNtZXFeAPAW6Aw --videos --page=+2 --table --relative-date|grep -wEn '^(cZI3Krk59T4|pceedMMwwcE)' 1:cZI3Krk59T4 2 days 8 hours ago 33 LIFE-SAVING OUTDOOR TRICKS YOU NEED TO TRY YOURSELF 62:pceedMMwwcE 8 hours 19 mins ago 25 CRAZY IDEAS TO HAVE FUN WITH FRIENDS