From 9deb947a02b0e781ea19216ce8ca11c4f6e7cc29 Mon Sep 17 00:00:00 2001 From: frxz751113 <156018267+frxz751113@users.noreply.github.com> Date: Sun, 25 Aug 2024 17:06:36 +0800 Subject: [PATCH] Add files via upload --- py/getm3u.py | 123 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 py/getm3u.py diff --git a/py/getm3u.py b/py/getm3u.py new file mode 100644 index 0000000..1d26691 --- /dev/null +++ b/py/getm3u.py @@ -0,0 +1,123 @@ +from bs4 import BeautifulSoup +import requests +import sys +import time + +def parse_list(): + headers = { + 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', + 'Accept-Language': 'en,zh-CN;q=0.9,zh;q=0.8', + 'Connection': 'keep-alive', + 'Referer': 'http://tonkiang.us/', + 'Upgrade-Insecure-Requests': '1', + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36', + } + r = requests.get('http://tonkiang.us/', headers=headers, verify=False) + soup = BeautifulSoup(r.text, 'html.parser') + parse_result = {} + for box in soup.select('div.box'): + box_name = box.find('div').string.strip() + items = [x.string for x in box.select('span > a')] + parse_result[box_name] = items + print(f'打印parse_result:{parse_result}') + return parse_result + +def search_ip(ip: str): + + headers = { + 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', + 'Accept-Language': 'en,zh-CN;q=0.9,zh;q=0.8', + 'Connection': 'keep-alive', + 'Referer': 'http://tonkiang.us/', + 'Upgrade-Insecure-Requests': '1', + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36', + } + + params = { + 's': ip, + } + r = requests.get('http://tonkiang.us/hoteliptv.php', params=params, headers=headers, verify=False) + soup = BeautifulSoup(r.text, 'html.parser') + group_name = [] + group_ip = [] + for a in soup.select('div > i'): + g_name = a.string.strip() + if '组播' in g_name: + index = g_name.index('上线') + 2 + if '酒店' in g_name: + index = g_name.index('上线') + 2 + g_namestring = g_name[index:] + group_name.append(g_namestring.strip()) + for b in soup.select('div.channel > a > b'): + b.img.extract() + group_ip.append(b.string.strip()) + return group_name,group_ip + +def parse(address: str): + headers = { + 'Accept': '*/*', + 'Accept-Language': 'en,zh-CN;q=0.9,zh;q=0.8', + 'Connection': 'keep-alive', + 'Referer': 'http://tonkiang.us/hotellist.html?s=223.10.16.11:8085', + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36', + 'X-Requested-With': 'XMLHttpRequest', + } + + r = requests.get(f'http://tonkiang.us/alllist.php?s={address}&c=false', headers=headers, verify=False) + parse_result = [] + soup = BeautifulSoup(r.text, 'html.parser') + for result in soup.select('div.result'): + name_div = result.find('div', style="float: left;") + m3u8_div = result.find('td', style="padding-left: 6px;") + if name_div and m3u8_div: + parse_result.append({ + "name": name_div.string, + "m3u": m3u8_div.string.strip() + }) + # print(f'打印parse_result:{parse_result}') + return parse_result + +def gen_m3u(group): + with open(sys.path[0] + "\\public\\iptv.m3u", "w+", encoding='utf-8') as f: + f.write('#EXTM3U\n') + f.write(f'#EXT-X-VERSION {int(time.time())}\n') + f.write('\n') + index = 1 + for (group_name, parse_result) in group.items(): + for one in parse_result: + f.write(f'''#EXTINF:-1,tvg-id="{index}-{one['name']}" tvg-name="{index}-{one['name']}" group-title="{group_name}",{one['name']}\n''') + f.write(one['m3u']) + f.write('\n') + index = index + 1 + + print("m3u生成成功!") + + +if __name__ == "__main__": + result = {} + ps = [] + ps_name = [] + parse_list = parse_list() + for (group_name, items) in parse_list.items(): + if group_name == 'Multicast IP': + for ip in items: + mu_name,mu_ip = search_ip(ip) + ps.extend(mu_ip) + ps_name.extend(mu_name) + for (group_name, items) in parse_list.items(): + if group_name == 'Hotel IPTV': + for ip in items: + hot_name, hot_ip = search_ip(ip) + ps.extend(hot_ip) + ps_name.extend(hot_name) + # print(f'ps:{ps}') + print(f'ps_name:{ps_name},{len(ps_name)}') + for x in [x for x in ps if x is not None]: + try: + rs = parse(x) + for y in [y for y in ps_name if y is not None]: + result[y] = rs + # print(f'打印result:{result}') + except Exception as e: + print(e) + gen_m3u(result) \ No newline at end of file