hy / app.py
maolili's picture
Update app.py
584b65a verified
import requests
import base64
from urllib.parse import urlencode, quote
from fastapi import FastAPI, Response
import uvicorn
app = FastAPI()
def get_ip_location(ip_address):
try:
api_url = f"http://ip-api.com/json/{ip_address}?lang=zh-CN"
response = requests.get(api_url, timeout=5)
if response.status_code == 200:
data = response.json()
if data.get('status') == 'success':
country = data.get('country', '')
city = data.get('city', '')
return f"{country} {city}".strip()
except:
pass
return "未知位置"
def fetch_config(path_type, index):
urls = [
f"https://www.gitlabip.xyz/Alvin9999/PAC/refs/heads/master/backup/img/1/2/ipp/{path_type}/{index}/config.json",
f"https://gitlab.com/free9999/ipupdate/-/raw/master/backup/img/1/2/ipp/{path_type}/{index}/config.json"
]
for url in urls:
try:
res = requests.get(url, timeout=5)
if res.status_code == 200:
return res.json()
except:
continue
return None
def generate_links():
links = []
# 处理 Hy1
for i in range(1, 5):
cfg = fetch_config("hysteria", i)
if cfg:
server = cfg.get("server", "")
if ":" in server:
host, port = (server.split("]:")[0] + "]", server.split("]:")[1]) if "[" in server else server.split(":")
loc = get_ip_location(host.strip("[]"))
params = {
"upmbps": cfg.get("up_mbps", 11),
"downmbps": cfg.get("down_mbps", 55),
"auth": cfg.get("auth_str", ""),
"peer": cfg.get("server_name", ""),
"insecure": 1 if cfg.get("insecure") else 0,
"alpn": "h3"
}
params = {k: v for k, v in params.items() if v}
link = f"hysteria://{host}:{port}?{urlencode(params)}#{quote(f'{loc} Hy1_发财进行时 {i}')}"
links.append(link)
# 处理 Hy2
for i in range(1, 5):
cfg = fetch_config("hysteria2", i)
if cfg:
server = cfg.get("server", "").split(",")[0]
if ":" in server:
host, port = (server.split("]:")[0] + "]", server.split("]:")[1]) if "[" in server else server.split(":")
loc = get_ip_location(host.strip("[]"))
tls = cfg.get("tls", {})
bw = cfg.get("bandwidth", {})
params = {
"sni": tls.get("sni", ""),
"insecure": 1 if tls.get("insecure") else 0,
"up": bw.get("up", "").replace(" mbps", ""),
"down": bw.get("down", "").replace(" mbps", "")
}
params = {k: v for k, v in params.items() if v}
auth = cfg.get("auth", "")
link = f"hysteria2://{auth}@{host}:{port}?{urlencode(params)}#{quote(f'{loc} Hy2_好运充值成功 {i}')}"
links.append(link)
combined = "\n".join(links)
return base64.b64encode(combined.encode()).decode()
@app.get("/")
def home():
return {"我是小可爱~"}
@app.get("/sub")
def get_sub():
# 返回 Base64 编码的内容
content = generate_links()
return Response(content=content, media_type="text/plain")
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=7860)