/
bitly.py
47 lines (33 loc) · 1.22 KB
/
bitly.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
import argparse
import os
from dataclasses import dataclass
from client import api_post
BitlinkUrl = str
@dataclass
class Bitlink:
id: str
link: BitlinkUrl
def shorten(long_url: str, token: str) -> Bitlink:
endpoint = "https://api-ssl.bitly.com/v4/shorten"
data = {"long_url": long_url}
response = api_post(endpoint, data, token)
return Bitlink(response["id"], response["link"])
def customize(bitlink_id: str, custom_slug: str, token: str) -> BitlinkUrl:
endpoint = "https://api-ssl.bitly.com/v4/custom_bitlinks"
data = {
"bitlink_id": bitlink_id,
"custom_bitlink": f"bit.ly/{custom_slug}",
}
response = api_post(endpoint, data, token)
return response["bitlink"]["custom_bitlinks"][0]
def main(long_url: str, custom_slug: str, token: str) -> BitlinkUrl:
short_url = shorten(long_url, token)
return customize(short_url.id, custom_slug, token)
if __name__ == "__main__":
bitly_token = os.environ["BITLY_ACCESS_TOKEN"]
parser = argparse.ArgumentParser()
parser.add_argument("long_url")
parser.add_argument("custom_slug")
args = parser.parse_args()
short_url = main(args.long_url, args.custom_slug, bitly_token)
print(f"Created: {short_url}")