Python连接钉钉群机器人每天自动推送国外天气

Python连接钉钉群机器人每天自动推送国外天气

一、天气获取

我使用的是openweather api,这个api的官方文档写的十分详细,链接:openweather

  1. 打开链接,界面如下:
    Python连接钉钉群机器人每天自动推送国外天气_第1张图片目前只有current weather Data API 和 5 Day / 3 Hour Forecast API是免费的。

  2. 点击上面图片红框里的API doc,可以看到该API的使用方法和示例:
    Python连接钉钉群机器人每天自动推送国外天气_第2张图片
    (1)参数1:lat和lon参数是城市的经纬度,可以利用经纬度获取该地区的天气 状况;除了lat&lon方式外,还可以直接用城市名获取,比如:
    Python连接钉钉群机器人每天自动推送国外天气_第3张图片
    加不加国家缩写都是可以的
    其次,还可以用城市id或邮政编码获取天气,文档里有示例,不再赘述

(2)参数2:appid是密钥,必须加上有效的密钥才可以调用API
密钥的获取方式:点击主页的sign In,然后注册个账号就行了
Python连接钉钉群机器人每天自动推送国外天气_第4张图片
注册后登录,点击右上角自己的名字,点击My API keys可以看到新密钥
Python连接钉钉群机器人每天自动推送国外天气_第5张图片
注意:新密钥生成后得等待15-20分钟后才生效

(3)参数3:还有个重要的参数lang,使用这个参数可以将获取的内容以指定的语言显示(中文简体:zh_cn
在这里插入图片描述

  1. 获取密钥后我们就可以直接调用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
    

    输出如下:
    Python连接钉钉群机器人每天自动推送国外天气_第6张图片
    这里温度是开尔文温度,需要转为摄氏度,减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")
    

二、让钉钉群机器人自动推送天气

  1. 添加群机器人
    钉钉群设置-智能群助手-添加机器人-选择自定义机器人,安全设置勾选加签,会生成一个密钥,复制保存下来,后面会用到
    Python连接钉钉群机器人每天自动推送国外天气_第7张图片
    点击完成后会生成一个webhook地址,这个地址就是用来连接机器人的,也保存下来

  2. 根据加签的密钥生成签名
    使用下面代码生成签名,注意把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)
    
  3. 连接发送消息
    注意把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”}

    如果报错参考钉钉官方文档:钉钉机器人推送设置

三、 设置每天自动推送

可以使用腾讯云函数实现每天定时自动推送,设置比较简单,参考这篇文章即可腾讯云函数定时推送

你可能感兴趣的:(python,钉钉,机器人)