Update iptv-jd.py

This commit is contained in:
frxz751113
2024-08-10 19:31:23 +08:00
committed by GitHub
parent 6c3bd07866
commit 3d53b511f1
+24 -29
View File
@@ -969,14 +969,16 @@ print("任务运行完毕,酒店源频道列表可查看文件夹内txt文件
# 获取rtp目录下的文件名 # 获取rtp目录下的文件名
files = os.listdir('rtp') files = os.listdir('rtp')
files_name = [] files_name = []
# 去除后缀名并保存至provinces_isps # 去除后缀名并保存至provinces_isps
for file in files: for file in files:
name, extension = os.path.splitext(file) name, extension = os.path.splitext(file)
files_name.append(name) files_name.append(name)
#忽略不符合要求的文件名 #忽略不符合要求的文件名
provinces_isps = [name for name in files_name if name.count('_') == 1] provinces_isps = [name for name in files_name if name.count('_') == 1]
# 打印结果
print(f"本次查询:{provinces_isps}的组播节目") print(f"本次查询:{provinces_isps}的组播节目")
keywords = [] keywords = []
for province_isp in provinces_isps: for province_isp in provinces_isps:
# 读取文件并删除空白行 # 读取文件并删除空白行
@@ -984,7 +986,7 @@ for province_isp in provinces_isps:
with open(f'rtp/{province_isp}.txt', 'r', encoding='utf-8') as file: with open(f'rtp/{province_isp}.txt', 'r', encoding='utf-8') as file:
lines = file.readlines() lines = file.readlines()
lines = [line.strip() for line in lines if line.strip()] lines = [line.strip() for line in lines if line.strip()]
# 获取第行中以包含 "rtp://" 的值作为 mcast # 获取第行中以包含 "rtp://" 的值作为 mcast
if lines: if lines:
first_line = lines[1] first_line = lines[1]
if "rtp://" in first_line: if "rtp://" in first_line:
@@ -993,48 +995,38 @@ for province_isp in provinces_isps:
except FileNotFoundError: except FileNotFoundError:
# 如果文件不存在,则捕获 FileNotFoundError 异常并打印提示信息 # 如果文件不存在,则捕获 FileNotFoundError 异常并打印提示信息
print(f"文件 '{province_isp}.txt' 不存在. 跳过此文件.") print(f"文件 '{province_isp}.txt' 不存在. 跳过此文件.")
for keyword in keywords: for keyword in keywords:
province, isp, mcast = keyword.split("_") province, isp, mcast = keyword.split("_")
#将省份转成英文小写 #将省份转成英文小写
translator = Translator(from_lang='chinese', to_lang='english')
province_en = translator.translate(province)
province_en = province_en.lower()
# 根据不同的 isp 设置不同的 org 值 # 根据不同的 isp 设置不同的 org 值
org = "Chinanet" if province == "北京" and isp == "联通":
others = '' isp_en = "cucc"
if isp == "电信" and province_en == "sichuang": org = "China Unicom Beijing Province Network"
org = "Chinanet" elif isp == "联通":
isp_en = "ctcc"
asn = "4134"
others = '&& city="Chengdu" '
elif isp == "电信" and province_en != "sichuang":
org = "Chinanet"
isp_en = "ctcc"
asn = "4134"
elif isp == "联通" and province_en != "beijing":
isp_en = "cucc" isp_en = "cucc"
org = "CHINA UNICOM China169 Backbone" org = "CHINA UNICOM China169 Backbone"
asn = "4837" elif isp == "电信":
elif isp == "联通" and province_en == "beijing": org = "Chinanet"
asn = "4808" isp_en = "ctcc"
isp_en = "cucc" elif isp == "移动":
else: org == "China Mobile communications corporation"
asn = "" isp_en = "cmcc"
org = ""
current_time = datetime.now() current_time = datetime.now()
timeout_cnt = 0 timeout_cnt = 0
result_urls = set() result_urls = set()
while len(result_urls) == 0 and timeout_cnt <= 5: while len(result_urls) == 0 and timeout_cnt <= 5:
try: try:
search_url = 'https://fofa.info/result?qbase64=' search_url = 'https://fofa.info/result?qbase64='
search_txt = f'\"udpxy\" && country=\"CN\" && region=\"{province}\"'# && org=\"{org}\" search_txt = f'\"udpxy\" && country=\"CN\" && region=\"{province}\" && org=\"{org}\"'
# 将字符串编码为字节流 # 将字符串编码为字节流
bytes_string = search_txt.encode('utf-8') bytes_string = search_txt.encode('utf-8')
# 使用 base64 进行编码 # 使用 base64 进行编码
search_txt = base64.b64encode(bytes_string).decode('utf-8') search_txt = base64.b64encode(bytes_string).decode('utf-8')
search_url += search_txt search_url += search_txt
print(f"{current_time} 查询运营商 : {province}{isp} ,查询网址 : {search_url}") print(f"{current_time} 查询运营商 : {province}{isp} ,查询网址 : {search_url}")
response = requests.get(search_url, timeout=10) response = requests.get(search_url, timeout=5)
# 处理响应 # 处理响应
response.raise_for_status() response.raise_for_status()
# 检查请求是否成功 # 检查请求是否成功
@@ -1049,7 +1041,9 @@ for keyword in keywords:
# 去重得到唯一的URL列表 # 去重得到唯一的URL列表
result_urls = set(urls_all) result_urls = set(urls_all)
print(f"{current_time} result_urls:{result_urls}") print(f"{current_time} result_urls:{result_urls}")
valid_ips = [] valid_ips = []
# 遍历所有视频链接 # 遍历所有视频链接
for url in result_urls: for url in result_urls:
video_url = url + "/rtp/" + mcast video_url = url + "/rtp/" + mcast
@@ -1080,8 +1074,7 @@ for keyword in keywords:
new_data = data.replace("rtp://", f"{url}/rtp/") new_data = data.replace("rtp://", f"{url}/rtp/")
new_file.write(new_data) new_file.write(new_data)
print(f'已生成播放列表,保存至{txt_filename}') print(f'已生成播放列表,保存至{txt_filename}')
else:
print("未找到合适的 IP 地址。")
except (requests.Timeout, requests.RequestException) as e: except (requests.Timeout, requests.RequestException) as e:
timeout_cnt += 1 timeout_cnt += 1
print(f"{current_time} [{province}]搜索请求发生超时,异常次数:{timeout_cnt}") print(f"{current_time} [{province}]搜索请求发生超时,异常次数:{timeout_cnt}")
@@ -1090,7 +1083,9 @@ for keyword in keywords:
continue continue
else: else:
print(f"{current_time} 搜索IPTV频道源[],超时次数过多:{timeout_cnt} 次,停止处理") print(f"{current_time} 搜索IPTV频道源[],超时次数过多:{timeout_cnt} 次,停止处理")
print('playlist制作完成! 文件输出在当前文件夹!') print('节目表制作完成! 文件输出在当前文件夹!')
# 合并自定义频道文件# # 合并自定义频道文件#
file_contents = [] file_contents = []
file_paths = ["playlist/四川电信.txt", "playlist/河南电信.txt", "playlist/河北电信.txt"] # 替换为实际的文件路径列表 file_paths = ["playlist/四川电信.txt", "playlist/河南电信.txt", "playlist/河北电信.txt"] # 替换为实际的文件路径列表