File size: 2,734 Bytes
d8764a0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25d690e
d8764a0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
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):
    # 定义 URL 的正则表达式
    pattern = re.compile(
        r"^(https?://)?"  # 协议(http 或 https,可选)
        r"([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}"  # 域名
        r"(:\d+)?"  # 端口号(可选)
        r"(/[^ ]*)?$"  # 路径(可选)
    )
    # 使用正则表达式匹配 URL
    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()