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)