-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathapi.py
79 lines (66 loc) · 2.19 KB
/
api.py
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
import time
import requests
from urllib.parse import urljoin
class ShortURL:
"""
短链实例
"""
def __init__(self, ori_url: str, short_url: str, expire_time: int) -> None:
self.ori_url = ori_url
self.short_url = short_url
self.expire_time = expire_time
def __str__(self) -> str:
expire_t = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(self.expire_time))
return f"{self.short_url} -> {self.ori_url}, 将于{expire_t}过期"
class SSUG:
"""
Shauio's short URL generator 调用接口示例
"""
def __init__(self, acc_key: str, service_url: str, ssug_url: str) -> None:
"""
acc_key: API key
service_url: 服务地址
ssug_url: 短链接服务地址
"""
self.__service_url = service_url
self.__acc_key = acc_key
self.__ssug_url = ssug_url
def __get_sl(self, url: str) -> dict:
"""
获取短链接
"""
data = {
"key": self.__acc_key,
"url": url
}
r = requests.post(urljoin(self.__service_url, "add"), data=data)
if r.status_code != 200 and r.json()["data"]["short_url"] == "":
raise Exception("获取短链接失败:" + r.json()["msg"])
return r.json()["data"]
def get_short(self, url: str) -> ShortURL:
"""
获取短链接
"""
try:
data = self.__get_sl(url)
except Exception as e:
raise e
return ShortURL(url, urljoin(self.__ssug_url, data["short_url"]), data["expiration_time"])
def is_running(self) -> bool:
"""
检查服务是否正常运行
"""
try:
r = requests.get(self.__service_url)
except requests.ConnectionError:
return False
if r.status_code != 200:
return False
return True
if __name__ == "__main__":
# 使用默认配置
ssug = SSUG("key123456", "http://127.0.0.1:8000/", "http://127.0.0.1:8000/")
# 检测服务是否运行
assert ssug.is_running(), "SSUG未在指定地址端口运行"
# 获取短链接
print(ssug.get_short("https://www.bilibili.com/video/BV1hq4y1s7VH"))