diff --git a/py/iptv-jd.py b/py/iptv-jd.py index f9421f9..9a1a072 100644 --- a/py/iptv-jd.py +++ b/py/iptv-jd.py @@ -969,14 +969,16 @@ print("任务运行完毕,酒店源频道列表可查看文件夹内txt文件 # 获取rtp目录下的文件名 files = os.listdir('rtp') files_name = [] + # 去除后缀名并保存至provinces_isps for file in files: name, extension = os.path.splitext(file) files_name.append(name) + #忽略不符合要求的文件名 provinces_isps = [name for name in files_name if name.count('_') == 1] -# 打印结果 print(f"本次查询:{provinces_isps}的组播节目") + keywords = [] 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: lines = file.readlines() lines = [line.strip() for line in lines if line.strip()] - # 获取第一行中以包含 "rtp://" 的值作为 mcast + # 获取第二行中以包含 "rtp://" 的值作为 mcast if lines: first_line = lines[1] if "rtp://" in first_line: @@ -993,48 +995,38 @@ for province_isp in provinces_isps: except FileNotFoundError: # 如果文件不存在,则捕获 FileNotFoundError 异常并打印提示信息 print(f"文件 '{province_isp}.txt' 不存在. 跳过此文件.") + for keyword in keywords: 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 值 - org = "Chinanet" - others = '' - if isp == "电信" and province_en == "sichuang": - org = "Chinanet" - 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": + if province == "北京" and isp == "联通": + isp_en = "cucc" + org = "China Unicom Beijing Province Network" + elif isp == "联通": isp_en = "cucc" org = "CHINA UNICOM China169 Backbone" - asn = "4837" - elif isp == "联通" and province_en == "beijing": - asn = "4808" - isp_en = "cucc" - else: - asn = "" - org = "" + elif isp == "电信": + org = "Chinanet" + isp_en = "ctcc" + elif isp == "移动": + org == "China Mobile communications corporation" + isp_en = "cmcc" + current_time = datetime.now() timeout_cnt = 0 - result_urls = set() + result_urls = set() while len(result_urls) == 0 and timeout_cnt <= 5: try: 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') # 使用 base64 进行编码 search_txt = base64.b64encode(bytes_string).decode('utf-8') search_url += search_txt 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() # 检查请求是否成功 @@ -1049,7 +1041,9 @@ for keyword in keywords: # 去重得到唯一的URL列表 result_urls = set(urls_all) print(f"{current_time} result_urls:{result_urls}") + valid_ips = [] + # 遍历所有视频链接 for url in result_urls: video_url = url + "/rtp/" + mcast @@ -1080,8 +1074,7 @@ for keyword in keywords: new_data = data.replace("rtp://", f"{url}/rtp/") new_file.write(new_data) print(f'已生成播放列表,保存至{txt_filename}') - else: - print("未找到合适的 IP 地址。") + except (requests.Timeout, requests.RequestException) as e: timeout_cnt += 1 print(f"{current_time} [{province}]搜索请求发生超时,异常次数:{timeout_cnt}") @@ -1090,7 +1083,9 @@ for keyword in keywords: continue else: print(f"{current_time} 搜索IPTV频道源[],超时次数过多:{timeout_cnt} 次,停止处理") -print('playlist制作完成! 文件输出在当前文件夹!') +print('节目表制作完成! 文件输出在当前文件夹!') + + # 合并自定义频道文件# file_contents = [] file_paths = ["playlist/四川电信.txt", "playlist/河南电信.txt", "playlist/河北电信.txt"] # 替换为实际的文件路径列表