tools-pyqt/src/change_url/change_url.py

172 lines
14 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import re
import requests
from sqlalchemy import create_engine
from sqlalchemy import text as sql_text
try:
engine = create_engine("mysql+mysqlconnector://ky_tools:HJQY35seXen8patn@1panel.stupidpz.com:3306/ky_tools")
connection = engine.connect()
print('链接成功')
except:
print('连接失败!')
ky_base64 = 'data:image/png;base64,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'
def read_file(filename):
try:
with open(filename, 'r') as file:
return file.read()
except IOError as e:
print(f"Error reading file {filename}: {e}")
raise
def write_file(filename, content):
try:
with open(filename, 'w') as file:
file.write(content)
except IOError as e:
print(f"Error writing to file {filename}: {e}")
raise
def replace_urls(js_content, url_mapping):
for placeholder, url in url_mapping.items():
js_content = js_content.replace(placeholder, url)
return js_content
def get_url_mapping(urls_with_context, template_type):
categories = {"WEB": [], "H5": [], "全站": [], "体育": [], "棋牌": [], "电子": [], "web": [], "h5": [],
"全站APP": [], "体育APP": []}
# 遍历URLs及其前文本的元组列表进行分类
for context, url in urls_with_context:
key = context.strip().replace(" ", "")
if key in categories:
categories[key].append(url)
# 构建映射字典,直接返回结果
if template_type == 'hth':
url_mapping = {
"{{hthApp}}": categories.get("全站", [""])[0] if categories.get("全站", [""]) else
categories.get("全站APP", [""])[0],
"{{hthtyApp}}": categories.get("体育", [""])[0] if categories.get("体育", [""]) else
categories.get("体育APP", [""])[0],
"{{hthPc}}": categories.get("WEB", [""])[0] if categories.get("WEB", [""]) else categories.get("web", [""])[
0],
"{{hthH5}}": categories.get("H5", [""])[0] if categories.get("H5", [""]) else categories.get("h5", [""])[0]
}
elif template_type == 'ky': # ky模板
url_mapping = {
"{{kyPc}}": categories.get("WEB", [""])[0],
"{{kyPc2}}": categories.get("WEB", ["", ""])[1],
"{{kyH51}}": categories.get("H5", [""])[0],
"{{kyH52}}": categories.get("H5", ["", ""])[1],
"{{kyApp1}}": categories.get("全站", [""])[0],
"{{kyApp2}}": categories.get("体育", [""])[0],
# "{{kyApp2}}": categories.get("全站", ["", ""])[1],
"{{kyTy1}}": categories.get("体育", [""])[0],
"{{kyTy2}}": categories.get("全站", [""])[0],
# "{{kyTy2}}": categories.get("体育", ["", ""])[1]
}
elif template_type == 'jy': # jy模板
url_mapping = {
"{{jyPc}}": categories.get("WEB", [""])[0],
"{{jyH5}}": categories.get("H5", [""])[0],
"{{jyApp}}": categories.get("全站", [""])[0],
"{{jyQp}}": categories.get("棋牌", [""])[0],
"{{jyDz}}": categories.get("电子", [""])[0],
"{{jyFljPc}}": categories.get("WEB", [""])[1] if len(categories.get("WEB", [""])) == 2 else '',
"{{jyFljH5}}": categories.get("H5", [""])[1] if len(categories.get("H5", [""])) == 2 else '',
}
else:
print('未知模板')
return
return url_mapping
def extract_urls(text):
# seo_part_index = text.find("SEO 防拦截域名")
# relevant_text = text[:seo_part_index] if seo_part_index != -1 else text
pattern = r'(?:\n|^)\s*([^\n]*?)\s*(https?://[^\s]+)'
# 查找到所有的url
url_type = 'unknown'
is_agent = False
url_list = re.findall(pattern, text)
for context, url in url_list:
try:
response = requests.get(url, headers={
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'})
if response.status_code == 200:
if "开云" in response.text or ky_base64 in response.text or "开云" in text:
url_type = 'ky'
elif '华体会' in response.text:
url_type = 'hth'
elif '九游' in response.text:
url_type = 'jy'
# 判断是后台代理连接
if '马甲包' in response.text:
is_agent = True
if url_type != 'unknown':
update_agent_url(url_list, url_type)
break
except requests.RequestException:
print(f"URL '{url}' 不可用,跳过。")
else:
print(f"未找到匹配的关键词。")
return [(context.strip(), url) for context, url in url_list], url_type, is_agent
def update_agent_url(url_list, url_type):
for context, url in url_list:
if "代理web" in context.replace(" ", "").lower():
try:
update_stmt = sql_text(f"UPDATE ky_tools.ky_account SET url = :url WHERE type = :url_type")
connection.execute(update_stmt, {"url": url, "url_type": url_type})
connection.commit()
except Exception as e:
print(f"执行SQL语句出错{e}")
finally:
connection.close()
break
def change_url(text):
try:
urls_with_context, url_type, is_agent = extract_urls(text)
expected_filename = None
if url_type == 'unknown':
return False, 'unknown.js'
if not is_agent:
template_path = f'/www/wwwroot/change_url/{url_type}.js.template'
js_content = read_file(template_path)
url_mapping = get_url_mapping(urls_with_context, url_type)
updated_content = replace_urls(js_content, url_mapping)
expected_filename = template_path.replace('.template', '')
write_file(expected_filename, updated_content)
return True, expected_filename
return True, '代理更新'
except Exception as e:
print(f"An error occurred: {e}")
return False, expected_filename if expected_filename else 'unknown.js'
if __name__ == '__main__':
text = '''代理 web https://www.krb01.com:8002  
代理 web https://www.k7hhk.com:9015   
代理 web https://www.ku1fs.com:9966    
代理H5 https://www.lwa5x.com:8004
代理H5 https://www.libsz.com:9009  
代理H5   https://www.lqqgl.com:9152'''
# res = requests.get("https://www.e5vj65s.com:9961")
# print(res)
# print("华体会" in res.text)
# print("开云" in res.text)
# print("九游" in res.text)
change_url(text)