使用Python检查YouTube视频列表是否仍然在线

2024-10-03 02:42:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在检查4个YouTube视频列表是否仍然在线。我知道其中一个是离线的,有时我想看看是否对其他人采取了任何行动。通过网络搜索并使用少量编码(我是一名初学者),我实现了以下目标:

import requests
from pprint import pprint

videos = ["id1","id2","id3","id4"]

for i in videos:
    id_of_video = i
    your_api_key = 'myapi' 
    url = 'https://www.googleapis.com/youtube/v3/videos?id={}&key={}&part=status'.format(id_of_video, your_api_key)
    url_get = requests.get(url)
    pprint(url_get.json())

代码运行良好,我收到类似的消息(我只复制了两个结果):

{'etag': 'somenumbersandcharactershere',
 'items': [{'etag': 'somenumbersandcharactershere',
            'id': 'videoid',
            'kind': 'youtube#video',
            'status': {'embeddable': True,
                       'license': 'youtube',
                       'madeForKids': False,
                       'privacyStatus': 'public',
                       'publicStatsViewable': True,
                       'uploadStatus': 'processed'}}],
 'kind': 'youtube#videoListResponse',
 'pageInfo': {'resultsPerPage': 1, 'totalResults': 1}}

{'etag': 'somenumbersandcharactershere',
 'items': [],
 'kind': 'youtube#videoListResponse',
 'pageInfo': {'resultsPerPage': 0, 'totalResults': 0}}

其中一个在线,另一个不在线。太好了

但我想创建一个代码,不时为我检查它,并说:“这个视频ID不再可用”。但我不知道怎么做

我现在的主要任务是为每个视频ID打印一条消息!所以,让我们说:“ID1在线”和“ID2离线”

我想创建一个if语句来检查“url_get.json()”标记的结果,但它只保存最后一个视频ID

如果我跑

url_get.json()

我只从列表中获取最后一个ID


Tags: keyidjsonurl列表get视频youtube
2条回答

所以你想写一个程序定期ping Youtube。实现这一目标的最简单方法是

from time import sleep

delay : int = 20

while True:
# ping YT here
  sleep(delay)

这将每20秒运行一次。 这里有很多问题

  • 它永远运行
  • 停止程序的唯一方法是单击Ctrl+C
  • 也不会正好是20秒

但一开始它会起作用。 我发现了一个很好的问题(线程???here at stackOverflow 答案建议使用一些更高级的“事件循环”概念。 如果你有时间,这绝对值得一试

你可以用字典来解释这个。首先,我将值设置为None。然后,在遍历字典时,我将值设置为返回的JSON。在程序结束时,我打印IDx is offline or online。不过,您可以对字典中的数据执行任何操作

import requests
from pprint import pprint

videos = {"id1": None, "id2": None, "id3": None, "id4": None}
for i in videos:
    id_of_video = i
    your_api_key = 'myapi' 
    url = 'https://www.googleapis.com/youtube/v3/videos?id={}&key={}&part=status'.format(id_of_video, your_api_key)
    url_get = requests.get(url)
    pprint(url_get.json())
    videos[i] = url_get.json()

for video in videos:
    if videos[video]["pageInfo"]["resultsPerPage"] == 0:
        print(f"{video.upper()} is offline")
    else:
        print(f"{video.upper()} is online")

相关问题 更多 >