Spaces:
Running
Running
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'<a href="{shortUrl}" target="_blank">{shortUrl}</a>' | |
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() | |