Closed SymonChu closed 4 months ago
一直在稳定运行中
我是我我自己frok的仓库,不过好像运行了,我想改时间,这里面的定时是北京时间还是美国时间还是英国时间?我自己一天只需要一次或两次就够了。另外一个是我看到有某卫视中文台,为何没有输出到最终的itvlist?卫视和其他可否自己选择输出的台,有些不想要
itvtest.py 这条我改成5为什么还是跑出8条结果呢?result_counter = 5 # 每个频道需要的个数
时间好像是加八就是北京时间
这个文件没有运行,所以改了没用
我改了CCTVpy和卫视py看有没有用,时间我百度了是UTC时间,差不多搞明白了。就是看大佬能否做个功能卫视和其他可否自己选择输出的台,有些不想要不要输出,最好有凤凰那三个台。
大佬,我仿照你的脚本想抓去港澳台,为什么它不动呢?请指教。 run gangao 0s Run python /home/runner/work/IPTVTEST/IPTVTEST/gangao.py python /home/runner/work/IPTVTEST/IPTVTEST/gangao.py shell: /usr/bin/bash -e {0} env: pythonLocation: /opt/hostedtoolcache/Python/3.12.2/x64 LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.12.2/x64/lib
import os import re import time import datetime import threading from queue import Queue import requests import eventlet eventlet.monkey_patch()
task_queue = Queue()
results = []
channels = [] error_channels = []
with open("itv.txt", 'r', encoding='utf-8') as file: lines = file.readlines() for line in lines: line = line.strip() if line: channel_name, channel_url = line.split(',') if '凤凰' in channel_name and '翡翠' in channel_name and '明珠' in channel_name: channels.append((channel_name, channel_url))
def worker(): while True:
channel_name, channel_url = task_queue.get()
try:
channel_url_t = channel_url.rstrip(channel_url.split('/')[-1]) # m3u8链接前缀
lines = requests.get(channel_url).text.strip().split('\n') # 获取m3u8文件内容
ts_lists = [line.split('/')[-1] for line in lines if line.startswith('#') == False] # 获取m3u8文件下视频流后缀
ts_lists_0 = ts_lists[0].rstrip(ts_lists[0].split('.ts')[-1]) # m3u8链接前缀
ts_url = channel_url_t + ts_lists[0] # 拼接单个视频片段下载链接
# 多获取的视频数据进行5秒钟限制
with eventlet.Timeout(5, False):
start_time = time.time()
content = requests.get(ts_url).content
end_time = time.time()
response_time = (end_time - start_time) * 1
if content:
with open(ts_lists_0, 'ab') as f:
f.write(content) # 写入文件
file_size = len(content)
# print(f"文件大小:{file_size} 字节")
download_speed = file_size / response_time / 1024
# print(f"下载速度:{download_speed:.3f} kB/s")
normalized_speed = min(max(download_speed / 1024, 0.001), 100) # 将速率从kB/s转换为MB/s并限制在1~100之间
#print(f"标准化后的速率:{normalized_speed:.3f} MB/s")
# 删除下载的文件
os.remove(ts_lists_0)
result = channel_name, channel_url, f"{normalized_speed:.3f} MB/s"
results.append(result)
numberx = (len(results) + len(error_channels)) / len(channels) * 100
print(f"可用频道:{len(results)} 个 , 不可用频道:{len(error_channels)} 个 , 总频道:{len(channels)} 个 ,总进度:{numberx:.2f} %。")
except:
error_channel = channel_name, channel_url
error_channels.append(error_channel)
numberx = (len(results) + len(error_channels)) / len(channels) * 100
print(f"可用频道:{len(results)} 个 , 不可用频道:{len(error_channels)} 个 , 总频道:{len(channels)} 个 ,总进度:{numberx:.2f} %。")
# 标记任务完成
task_queue.task_done()
numthreads = 10 for in range(num_threads): t = threading.Thread(target=worker, daemon=True)
t.start()
#event.set()
for channel in channels: task_queue.put(channel)
task_queue.join()
def channel_key(channel_name): match = re.search(r'\d+', channel_name) if match: return int(match.group()) else: return float('inf') # 返回一个无穷大的数字作为关键字
results.sort(key=lambda x: (x[0], -float(x[2].split()[0])))
now_today = datetime.date.today()
result_counter = 5 # 每个频道需要的个数
with open("gangao.txt", 'w', encoding='utf-8') as file: channel_counters = {} file.write('港澳频道,#genre#\n') for result in results: channel_name, channel_url, speed = result if '凤凰' in channel_name and '翡翠' in channel_name and '明珠' in channel_name: if channel_name in channel_counters: if channel_counters[channel_name] >= result_counter: continue else: file.write(f"{channel_name},{channel_url}\n") channel_counters[channel_name] += 1 else: file.write(f"{channel_name},{channel_url}\n") channel_counters[channel_name] = 1
with open("gangao.m3u", 'w', encoding='utf-8') as file: channel_counters = {}
for result in results:
channel_name, channel_url, speed = result
if '凤凰' in channel_name and '翡翠' in channel_name and '明珠' in channel_name:
if channel_name in channel_counters:
if channel_counters[channel_name] >= result_counter:
continue
else:
file.write(f"#EXTINF:-1 group-title=\"港澳频道\",{channel_name}\n")
file.write(f"{channel_url}\n")
channel_counters[channel_name] += 1
else:
file.write(f"#EXTINF:-1 group-title=\"港澳频道\",{channel_name}\n")
file.write(f"{channel_url}\n")
channel_counters[channel_name] = 1
if '凤凰' in channel_name and '翡翠' in channel_name and '明珠' in channel_name: channels.append((channel_name, channel_url)) 这里写错了,好多台没有,只留凤凰试试
好的,我试试,大老。但是如果要多几个台呢?翡翠,明珠我搜了itv里面是有一两个台的。 另外,建议大佬把其它那里增加几个筛除广告的几个台。 if '卫视' not in channel_name and 'QTV' not in channel_name and '购物' not in channel_name and 'CCTV' not in channel_name and '测试' not in channel_name and '凤凰' not in channel_name and '翡翠' not in channel_name and '明珠' not in channel_name: channels.append((channel_name, channel_url))
中间不用and用or,就是多个频道了
谢谢大老,我刚问了chatgpt, 我看到它也是这么写的,我来试一下。
👍
大佬,跑是跑成功了,但是都没有输出,应该都是用不了的,大佬能加多几个找源的地方就好了。
没有合适的了
action的worflows不能运行,请楼主检查一下,小白啥也不懂