Bootstrap

用requests的get检验电视直播源是否有效的方法

常见的电视直播源的检测工具有IPTV Checker、黑鸟播放器等。我自己编写一个Python代码,用requests库的get函数来检测电视直播源是否有效。只要get返回的status_code是200,就判断能连接,但有些电视源的链接是结尾不是.m3u8,而是视频流,用get直接读取会不停地读取数据,因此需要设置get带有stream=True参数,限定timeout=5,每次只读取最多1MB的视频流数据并计时,如果连接成功则输出连接所需的时间,否则输出异常。

本文示范的代码只能测试http(s)的电视源,不支持其他如rtsp、rmp、p2p、mitv等协议。代码如下:

import time
import requests

# ll是电视直播源的链接列表
ll=['http://........','https://.......']
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'}
se=requests.Session()

for i in ll:
    now=time.time()
    try:
        res=se.get(i,headers=headers,timeout=5,stream=True)
        if res.status_code==200:
            for k in res.iter_content(chunk_size=1048576):
                # 这里的chunk_size是1MB,每次读取1MB测试视频流
                # 如果能获取视频流,则输出读取的时间以及链接
                if k:
                    print(f'{time.time()-now:.2f}\t{i}')
                    break
    except Exception:
        # 无法连接并超时的情况下输出“X”
        print(f'X\t{i}')

 

;