我使用的是openweather api,这个api的官方文档写的十分详细,链接:openweather
打开链接,界面如下:
目前只有current weather Data API 和 5 Day / 3 Hour Forecast API是免费的。
点击上面图片红框里的API doc,可以看到该API的使用方法和示例:
(1)参数1:lat和lon参数是城市的经纬度,可以利用经纬度获取该地区的天气 状况;除了lat&lon方式外,还可以直接用城市名获取,比如:
加不加国家缩写都是可以的
其次,还可以用城市id或邮政编码获取天气,文档里有示例,不再赘述
(2)参数2:appid是密钥,必须加上有效的密钥才可以调用API
密钥的获取方式:点击主页的sign In,然后注册个账号就行了
注册后登录,点击右上角自己的名字,点击My API keys可以看到新密钥
注意:新密钥生成后得等待15-20分钟后才生效
(3)参数3:还有个重要的参数lang,使用这个参数可以将获取的内容以指定的语言显示(中文简体:zh_cn)
获取密钥后我们就可以直接调用API来获取天气了
import requests
import json
#堪培拉
url_c='https://api.openweathermap.org/data/2.5/weather?q=Canberra,AU&appid=e99******************&lang=zh_cn'
response=requests.get(url_c,headers={'Connection':'close','Content-Type': 'charset=utf-8'}).json()
response
输出如下:
这里温度是开尔文温度,需要转为摄氏度,减273.15即可;
dt是时间戳格式,记录的是本地时间,需要先加上timezone转为utc之后再转为datetime格式
import datetime
#开尔文转成摄氏度
def kelvin_to_celsius(kelvin):
celsius=kelvin-273.15
return celsius
#最高温,最低温
temp_kelvin_max=response['main']['temp_max']
temp_celsius_max=kelvin_to_celsius(temp_kelvin_max)
temp_kelvin_min=response['main']['temp_min']
temp_celsius_min=kelvin_to_celsius(temp_kelvin_min)
#时间戳转UTC时间
dt=datetime.datetime.utcfromtimestamp(response['dt']+response['timezone'])
dt=dt.strftime("%Y.%m.%d")
添加群机器人
钉钉群设置-智能群助手-添加机器人-选择自定义机器人,安全设置勾选加签,会生成一个密钥,复制保存下来,后面会用到
点击完成后会生成一个webhook地址,这个地址就是用来连接机器人的,也保存下来
根据加签的密钥生成签名
使用下面代码生成签名,注意把secret换成自己的密钥
import time
import hmac
import hashlib
import base64
import urllib.parse
timestamp = str(round(time.time() * 1000))
secret = 'SEC*********************'
secret_enc = secret.encode('utf-8')
string_to_sign = '{}\n{}'.format(timestamp, secret)
string_to_sign_enc = string_to_sign.encode('utf-8')
hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
print(timestamp)
print(sign)
连接发送消息
注意把base_url换成自己的webhook地址
import requests
import re
import json
import sys
import os
headers = {'Content-Type': 'application/json;charset=utf-8'}
base_url='https://oapi.dingtalk.com/robot/send?access_token=f1b2370***********'
api_url = '{}×tamp={}&sign={}'.format(base_url,timestamp,sign)
##从钉钉机器人设置中拷贝
string=response['name'] + "\n日期:" + dt + "\n天气状况:" + weather + "\n最高温:" + temp_max + "\n最低温:" + temp_min
def msg(text):
json_text= {
"msgtype": "text",
"text": {
"content":text
}
}
print(requests.post(api_url,json.dumps(json_text),headers=headers).content)
msg(string)
如果发送成功会出现下面的信息:
{“errcode”:0,“errmsg”:“ok”}
如果报错参考钉钉官方文档:钉钉机器人推送设置
可以使用腾讯云函数实现每天定时自动推送,设置比较简单,参考这篇文章即可腾讯云函数定时推送