Git Product home page Git Product logo

Comments (14)

ssili126 avatar ssili126 commented on August 15, 2024

一直在稳定运行中

from tv.

SymonChu avatar SymonChu commented on August 15, 2024

我是我我自己frok的仓库,不过好像运行了,我想改时间,这里面的定时是北京时间还是美国时间还是英国时间?我自己一天只需要一次或两次就够了。另外一个是我看到有某卫视中文台,为何没有输出到最终的itvlist?卫视和其他可否自己选择输出的台,有些不想要

from tv.

SymonChu avatar SymonChu commented on August 15, 2024

itvtest.py 这条我改成5为什么还是跑出8条结果呢?result_counter = 5 # 每个频道需要的个数

from tv.

ssili126 avatar ssili126 commented on August 15, 2024

时间好像是加八就是北京时间

from tv.

ssili126 avatar ssili126 commented on August 15, 2024

这个文件没有运行,所以改了没用

from tv.

SymonChu avatar SymonChu commented on August 15, 2024

我改了CCTVpy和卫视py看有没有用,时间我百度了是UTC时间,差不多搞明白了。就是看大佬能否做个功能卫视和其他可否自己选择输出的台,有些不想要不要输出,最好有凤凰那三个台。

from tv.

SymonChu avatar SymonChu commented on August 15, 2024

大佬,我仿照你的脚本想抓去港澳台,为什么它不动呢?请指教。
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()

创建多个工作线程

num_threads = 10
for _ in range(num_threads):
t = threading.Thread(target=worker, daemon=True)
#t = threading.Thread(target=worker, args=(event,len(channels))) # 将工作线程设置为守护线程
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])))
#results.sort(key=lambda x: channel_key(x[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 = {}
#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"#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

from tv.

ssili126 avatar ssili126 commented on August 15, 2024

if '凤凰' in channel_name and '翡翠' in channel_name and '明珠' in channel_name:
channels.append((channel_name, channel_url))
这里写错了,好多台没有,只留凤凰试试

from tv.

SymonChu avatar SymonChu commented on August 15, 2024

好的,我试试,大老。但是如果要多几个台呢?翡翠,明珠我搜了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))

from tv.

ssili126 avatar ssili126 commented on August 15, 2024

中间不用and用or,就是多个频道了

from tv.

SymonChu avatar SymonChu commented on August 15, 2024

谢谢大老,我刚问了chatgpt, 我看到它也是这么写的,我来试一下。

from tv.

ssili126 avatar ssili126 commented on August 15, 2024

👍

from tv.

SymonChu avatar SymonChu commented on August 15, 2024

大佬,跑是跑成功了,但是都没有输出,应该都是用不了的,大佬能加多几个找源的地方就好了。

from tv.

ssili126 avatar ssili126 commented on August 15, 2024

没有合适的了

from tv.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.