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

使用Python检查YouTube视频列表是否仍然在线,python,python-3.x,Python,Python 3.x,我正在检查4个YouTube视频列表是否仍然在线。我知道其中一个是离线的,有时我想看看是否对其他人采取了任何行动。通过网络搜索并使用少量编码(我是一名初学者),我实现了以下目标: import requests from pprint import pprint videos = ["id1","id2","id3","id4"] for i in videos: id_of_video = i

我正在检查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())
代码运行良好,我收到类似的消息(我只复制了两个结果):

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

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

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

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

如果我跑

url_get.json()

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

因此您想编写一个定期ping Youtube的程序。实现这一目标的最简单方法是

从时间导入睡眠
延迟:int=20
尽管如此:
#我在这儿
睡眠(延迟)
这将每20秒运行一次。 这里有很多问题

  • 它永远运行
  • 停止程序的唯一方法是单击Ctrl+C
  • 也不会正好是20秒
但一开始它会起作用。 我发现了一个很好的问题(线程??) 答案建议使用一些更高级的“事件循环”概念。
如果你有时间的话,这绝对值得一试。

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

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")

因此,您想
打印
一条
'message'
,只有
如果
您的json['pageInfo']['totalResult']
的值是
==0
,您可以为此创建一个cron作业,或者创建一个bot来执行此操作you@Grismar对实际上,我想为每个视频ID打印一条消息!所以,让我们假设:“ID1在线”和“ID2离线”。如果服务器出现故障或系统关闭,那么这将无法工作,程序需要再次运行。最好为此作业创建cron作业谢谢,这是问题的一部分。但我的主要问题是:如何检查每个ID并为每个ID打印消息!所以,让我们假设:“ID1在线”和“ID2离线”。@CartesianCordinateSystem,请在开始之前仔细阅读问题answering@interferemadly,如果这回答了您的问题,请单击复选标记尝试执行此操作,但收到此错误:
TypeError Traceback(最近一次呼叫上次)对于视频中的视频:-->14如果视频[videos][“pageInfo”][“resultsPerPage”]==0:15打印(f“{video.upper()}处于脱机状态”)16其他:类型错误:字符串索引必须是整数
@interferredly-fixed:)嘿,伙计,我不知道我是否遗漏了什么-正如我所说,我是一个初学者。仍在获取和错误:
TypeError Traceback(最近一次调用last)在11 12中用于视频中的视频:-->13如果视频[video][“pageInfo”][“resultsPerPage”]==0:14打印(f“{video.upper()}处于脱机状态”)15 else:TypeError:“Response”对象不可订阅
现在应该修复了,我忘了将其转换为json
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")