Home | 简体中文 | 繁体中文 | 杂文 | Github | 知乎专栏 | 51CTO学院 | CSDN程序员研修院 | OSChina 博客 | 腾讯云社区 | 阿里云栖社区 | Facebook | Linkedin | Youtube | 打赏(Donations) | About
知乎专栏多维度架构

29.2. 心知天气

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())