你可以利用阿里云提供的市级天气预报接口来获取天气信息,以下是 Python 的示例代码(务必将其中的 accessKeyId
和 accessSecret
替换为你自己的阿里云账号中的这两个密钥):
import sys
import uuid
import requests
import hashlib
import time
import base64
import hmac
from urllib.parse import quote_plus
def percent_encode(s):
# 注意使用 UTF-8 编码
res = quote_plus(str(s))
# python3 会将空格编码为 '+',需要手动替换为 %20
res = res.replace('+', '%20')
return res
class AliyunWeatherApi:
# 阿里云市级天气预报接口,参考 https://market.aliyun.com/products/57126001/cmapi010812.html
api_url = "http://aliv18.data.moji.com/whapi/json/alicityweather/briefforecast3days"
def __init__(self):
self.accessKey = "<your access key ID>"
self.accessSecret = "<your access key secret>"
def get_weather(self, city_id):
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'application/json',
}
timestamp = time.strftime("%Y-%m-%d") + "T" + time.strftime("%H:%M:%S") + "Z"
nonce = str(uuid.uuid4())
params = {
"cityId": city_id,
"token": "677282c2f1b3d718172c3a970e97dcc8"
}
sorted_params_str = ""
for k, v in sorted(params.items()):
sorted_params_str += "&" + percent_encode(k) + "=" + percent_encode(v)
sorted_params_str = sorted_params_str[1:]
str_to_sign = "POST" + "&" + percent_encode("/") + "&" + percent_encode(sorted_params_str)
hash = hmac.new(bytes(self.accessSecret + "&", encoding="utf-8"), bytes(str_to_sign, encoding="utf-8"), hashlib.sha1)
signature = base64.b64encode(hash.digest()).decode()
headers["Authorization"] = "acs" + " " + self.accessKey + ":" + signature
response = requests.post(self.api_url, headers=headers, data=params)
return response.json()
if __name__ == "__main__":
api = AliyunWeatherApi()
result = api.get_weather("<town id>") # 补充镇江的城市ID
print(result)
Python3代码示例以上。注意在实际使用中要替换其中的<your access key ID>
和<your access key secret>
以及<town id>
为实际的值。
要使用阿里云的天气预报API接口,首先你需要注册一个阿里云的账号,然后购买相应的服务并获取API的接口地址、APP Key和APP Secret。因为这是付费服务,具体的使用细节,你可以在阿里云官网的API调用指南部分找到。
这里是一个python请求阿里云天气预报API的示例代码:
import requests
import json
def get_weather(city):
host = "http://aliv18.data.moji.com" # API接口地址
path = "/whapi/json/alicityweather/forecast24hours"
url = host + path
appcode = "你的APP Key"
querys = {"cityId": city_id}
headers = {
'Authorization': 'APPCODE ' + appcode
}
response = requests.get(url, headers=headers, params=querys)
return response.text
def print_weather(info):
for i in info:
print("{} {} {}℃ {}级风 {} {}".format(i['releaseTime'], i['conditionDay'], i['tempDay'], i['windpowerDay'], i['directionDay'], i['conditionNight']))
if __name__ == '__main__':
city_id = '获取城市的ID' # 你需要查询的城市ID
info = get_weather(city_id)
print_weather(info)
请注意这只是示例代码,对于具体API的参数,可以参考阿里云的API调用指南按需调整。同时,你需要将“你的APP Key”和“获取城市的ID”替换为具体的值。
城市的ID,可以通过阿里云指定的城市查询接口获得。例如,洛阳的城市ID就是101180901,而北京的城市ID就是101010100。
另外,阿里云的API接口需要付费使用,请确保你的账户余额充足。同时,由于网络延迟和其他原因,API接口可能会有一定的响应时间,建议你在程序中添加适当的错误处理和超时处理逻辑。
发布者:luotuoemo,转转请注明出处:https://www.jintuiyun.com/167436.html