-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbasicdweet.py
64 lines (48 loc) · 1.56 KB
/
basicdweet.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
"""A python module for very basic APIs of the free dweet service.
- Author: Quan Lin
- License: MIT
"""
__version__ = "0.3.0"
__all__ = ["BasicDweetError", "dweet_for", "get_latest_dweet_for", "get_dweets_for"]
import json
try:
import urequests as requests
except ImportError:
import requests
BASE_URL = "https://dweet.io"
class BasicDweetError(Exception):
pass
def _request(method, url, base_url=BASE_URL, **kwargs):
url = base_url.rstrip("/") + "/" + url.lstrip("/")
request_func = getattr(requests, method)
response = request_func(url, **kwargs)
if not (200 <= response.status_code < 300):
raise BasicDweetError(f"HTTP {response.status_code} response")
response_json = response.json()
if response_json["this"] == "failed":
raise BasicDweetError(response_json["because"])
return response_json["with"]
def dweet_for(thing_name, payload, base_url=BASE_URL, **kwargs):
kwargs["data"] = json.dumps(payload)
kwargs.setdefault("headers", {})
kwargs["headers"].update({"Content-Type": "application/json"})
return _request(
"post",
f"/dweet/for/{thing_name}",
base_url=base_url,
**kwargs,
)
def get_latest_dweet_for(thing_name, base_url=BASE_URL, **kwargs):
return _request(
"get",
f"/get/latest/dweet/for/{thing_name}",
base_url=base_url,
**kwargs,
)
def get_dweets_for(thing_name, base_url=BASE_URL, **kwargs):
return _request(
"get",
f"/get/dweets/for/{thing_name}",
base_url=base_url,
**kwargs,
)