url_shortner / app.py
admin
rm notes
f884e64
raw
history blame
2.54 kB
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()