import re import json import requests import gradio as gr HEADERS = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 Edg/132.0.0.0", } def is_valid_url(url): pattern = re.compile( r"^(https?://)?" r"([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}" r"(:\d+)?" r"(/[^ ]*)?$" ) return bool(pattern.match(url)) def noxlink(longUrl: str): domain = "https://noxlink.net" api = f"{domain}/zh-CN/shorten" payload = {"longUrl": longUrl} try: response = requests.post(api, json=payload, headers=HEADERS) if response.status_code == 200: retcode = json.loads(response.text) if retcode["success"]: return f"{domain}/" + retcode["message"] return response.text except Exception as e: return f"{e}" def monojson(longUrl: str): api = "https://monojson.com/api/short-link" payload = {"url": longUrl} try: response = requests.post(api, json=payload, headers=HEADERS) if response.status_code == 200: return json.loads(response.text)["shortUrl"] else: return response.text except Exception as e: return f"{e}" def infer(longUrl: str, tool: str): shortUrl = "" if tool == "monojson": shortUrl = monojson(longUrl) elif tool == "noxlink": shortUrl = noxlink(longUrl) else: shortUrl = "Please select an API provider!" if is_valid_url(shortUrl): return f'{shortUrl}' return shortUrl if __name__ == "__main__": gr.Interface( fn=infer, inputs=[ gr.Textbox( label="Input a long URL", placeholder="Input a long URL", show_copy_button=True, ), gr.Dropdown( choices=["noxlink", "monojson"], label="Select an API provider", value="noxlink", ), ], outputs=[ gr.HTML( container=True, show_label=True, label="Output short URL", ) ], title="Short link generator", description="Convert long urls into short, easy-to-share links", flagging_mode="never", examples=[ ["https://www.bing.com", "noxlink"], ["https://www.baidu.com", "monojson"], ], cache_examples=False, ).launch()