| 知乎专栏 |
https://www.seniverse.com/dashboard
import requests, time, hmac, hashlib, base64
from urllib import parse
UID = "Pi62K5jkMsbsrfvBW" # 用户ID
KEY = "SU8HCiR5slL8RvBMj" # API key
# UID = "U785B76FC9" # 用户ID
# KEY = "4r9bergjetiv1tsd" # API key
LOCATION = "Huayin" # 所查询的位置,可以使用城市拼音、v3 ID、经纬度等
API = "https://api.seniverse.com/v3/weather/now.json" # API URL,可替换为其他 URL
UNIT = "c" # 单位
LANGUAGE = "zh-Hans" # 查询结果的返回语言
def getJsonpUrl():
ts = int(time.time()) # 当前时间戳
text = "ts={ts}&ttl=300&uid={uid}".format(ts=ts, uid=UID)
key = bytes(KEY, "UTF-8")
raw = bytes(text, "UTF-8")
# 使用 HMAC-SHA1 方式,以 API 密钥(key)对上一步生成的参数字符串(raw)进行加密
digest = hmac.new(key, raw, hashlib.sha1).digest()
# 将上一步生成的加密结果用 base64 编码,并做一个 urlencode,得到签名sig
signature = base64.b64encode(digest)
params = {"location": LOCATION, "language": LANGUAGE, "unit": UNIT, "ts": ts, "ttl": "300", "uid": UID, "sig": signature}
response = requests.get(API, params=params, timeout=10)
if response.status_code == 200:
result = response.json()["results"].pop()
else:
result = {}
return result
def fetchWeather():
params = {"key": KEY, "location": LOCATION, "language": LANGUAGE, "unit": UNIT}
response = requests.get(API, params=params, timeout=10)
if response.status_code == 200:
result = response.json()["results"].pop()
else:
result = {}
return result
if __name__ == "__main__":
print(fetchWeather())
print("-" * 50)
print(getJsonpUrl())