import time
import requests
import json
import re
import os

regions = {
    #"广东" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iZ3Vhbmdkb25nIg%3D%3D",
    #"陕西" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iU2hhYW54aSI%3D", 
    #"湖南" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0i5rmW5Y2XIg%3D%3D", 
    "河南" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iaGVuYW4i", 
    #"安徽" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iQW5odWki", 
    #"北京" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iQmVpamluZyI%3D", 
    #"重庆" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iQ2hvbmdxaW5nIg%3D%3D", 
    #"贵州" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iR3VpemhvdSI%3D", 
    #"河北" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iSGViZWki", 
    #"湖北" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iSHViZWki", 
    #"江苏" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iSmlhbmdzdSI%3D", 
    #"江西" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iSmlhbmd4aSI%3D", 
    #"辽宁" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iTGlhb25pbmci", 
    #"山东" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iU2hhbmRvbmci", 
    #"上海" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iU2hhbmdoYWki", 
    #"山西" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iU2hhbnhpIg%3D%3D", 
    #"四川" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iU2ljaHVhbiI%3D", 
    #"天津" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iVGlhbmppbiI%3D", 
    #"云南" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iWXVubmFuIg%3D%3D", 
    #"浙江" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iWmhlamlhbmci", 
    #"Zhengzhou" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIGNpdHk9IlpoZW5nemhvdSI%3D",
    #"Xinxiang" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIGNpdHk9IlhpbnhpYW5nIg%3D%3D",
    #"Luoyang" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIGNpdHk9Ikx1b3lhbmci",
    #"Luohe" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIGNpdHk9Ikx1b2hlIg%3D%3D",
    #"Xuchang" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIGNpdHk9Ilh1Y2hhbmci",
    # "Zhoukou" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIGNpdHk9Ilpob3Vrb3Ui",
    #"Pingdingshan" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIGNpdHk9IlBpbmdkaW5nc2hhbiI%3D",
    #"Anyang" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIGNpdHk9IkFueWFuZyI%3D",
    #"Shangqiu" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIGNpdHk9IlNoYW5ncWl1Ig%3D%3D",
    #"Zhumadian" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIGNpdHk9IlpodW1hZGlhbiI%3D",
    #"Puyang" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIGNpdHk9IlB1eWFuZyI%3D"
}


# 使用 requests 获取网页内容并提取符合格式的网址
def process_url(region, url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    }

    try:
        # 发送 GET 请求获取网页内容
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            print(f"{region}：成功获取网页内容。")
            page_content = response.text

            # 查找所有符合指定格式的网址
            pattern = r"http://\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d+"
            urls_all = re.findall(pattern, page_content)
            urls = list(set(urls_all))  # 去重得到唯一的 URL 列表

            if urls:
                print(f"{region}：找到以下网址：")
                for found_url in urls:
                    print(found_url)
            else:
                print(f"{region}：未找到符合格式的网址。")

            # 遍历网址列表，获取JSON文件并解析
            results = []
            for url in urls:
                try:
                    # 发送 GET 请求获取 JSON 文件，设置超时时间为25秒
                    json_url = f"{url}/iptv/live/1000.json?key=txiptv"
                    response = requests.get(json_url, timeout=25)
                    json_data = response.json()

                    # 检查是否包含 'data' 字段，如果没有则跳过
                    if 'data' not in json_data:
                        print(f"{region}：No 'data' field in JSON for URL {json_url}. Skipping...")
                        continue

                    # 解析 JSON 文件，获取 name 和 url 字段
                    for item in json_data['data']:
                        if isinstance(item, dict):
                            name = item.get('name')
                            urlx = item.get('url')
                            urld = f"{url}{urlx}"

                            if name and urlx:
                                # 删除特定文字
                                name = name.replace("中央", "CCTV")
                                name = name.replace("高清", "")
                                name = name.replace("标清", "")
                                name = name.replace("频道", "")
                                name = name.replace("-", "")
                                name = name.replace(" ", "")
                                name = name.replace("PLUS", "+")
                                name = name.replace("(", "")
                                name = name.replace(")", "")
                                results.append(f"{name},{urld}")
                except requests.exceptions.RequestException as e:
                    print(f"{region}：Failed to process JSON for URL {json_url}. Error: {str(e)}")
                    continue
                except json.JSONDecodeError as e:
                    print(f"{region}：Failed to parse JSON for URL {url}. Error: {str(e)}")
                    continue

            return results
        else:
            print(f"{region}：请求失败，状态码: {response.status_code}")
            return []

    except Exception as e:
        print(f"{region}：请求过程中发生错误: {str(e)}")
        return []


# 将结果保存到文本文件
def save_results(results, filename):
    with open(filename, "w", encoding="utf-8") as file:
        for result in results:
            file.write(result + "\n")
            print(f"保存结果：{result}")


directory = "地区源"

# 文件目录不存在，则创建文件目录
if not os.path.exists(directory):
    os.makedirs(directory)

# 删除旧文件
existing_files = os.listdir(directory)
for file_name in existing_files:
    file_path = os.path.join(directory, file_name)
    if os.path.isfile(file_path):
        os.remove(file_path)

# 处理每个地区的URL
for region, url in regions.items():
    results = process_url(region, url)
    save_results(results, os.path.join(directory, f"{region}.txt"))


# 合并结果成一个文件
def merge_txt_files():
    # 获取当前脚本所在目录
    script_dir = os.path.dirname(os.path.abspath(__file__))
    dir_path = os.path.join(script_dir, "地区源")

    # 检查目录是否存在
    if not os.path.exists(dir_path):
        print(f"目录 '地区源' 不存在.")
        return

    # 获取目录下所有的txt文件
    txt_files = [file for file in os.listdir(dir_path) if file.endswith(".txt")]

    # 检查是否有txt文件
    if not txt_files:
        print(f"目录 '地区源' 中没有找到txt文件.")
        return

    # 合并文件内容
    merged_content = ""
    for txt_file in txt_files:
        file_path = os.path.join(dir_path, txt_file)
        with open(file_path, "r", encoding="utf-8") as file:
            merged_content += file.read() + "\n"

    # 将合并后的内容写入新文件
    merged_file_path = os.path.join(script_dir, "合并源.txt")
    with open(merged_file_path, "w", encoding="utf-8") as merged_file:
        merged_file.write(merged_content)

    print(f"合并完成，合并文件保存在: {merged_file_path}")


# 调用函数
merge_txt_files()
