python如何使用BlockingScheduler设置钉钉定时自动工作通知?

需求描述

每周五上午11点,通过钉钉工作通知向特定人员推送特定文本内容,文本内容来自数据库计算。

代码

from apscheduler.schedulers.blocking import BlockingScheduler
from sqlalchemy import create_engine
import requests
import pandas as pd

# 获取token
def get_access_token(appkey, appsecret):
    """
    获取access_token
    https://open.dingtalk.com/document/orgapp/obtain-orgapp-token

    :param appkey: 应用的唯一标识key
    :param appsecret: 应用的密钥
    :return:
    {
        "errcode": 0,
        "access_token": "xxx",
        "errmsg": "ok",
        "expires_in": 7200
    }
    """
    url = 'https://oapi.dingtalk.com/gettoken'
    params = {
        'appkey': 'xxx',
        'appsecret': 'xxx'
    }

    res = requests.get(url, params=params)
    return res.json()

# 发送应用信息
def send_message(access_token, body):
    """
    发送应用消息
    https://open.dingtalk.com/document/orgapp/asynchronous-sending-of-enterprise-session-messages

    :param access_token:
    :param body: 消息体
    :return:

    {
        "errcode":0,
        "task_id":xxx,
        "request_id":"xxx"
    }
    """
    url = 'https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2'

    params = {
        'access_token': access_token,
    }

    res = requests.post(url, params=params, json=body)
    return res.json()

# 配置推送的信息
def get_content_automatic_push_kpis():
    sql="select XXX from table" # 设置从数据库获取到的需要推送的内容
    
    engine_yun=create_engine('xxxx') # 连接数据库
    df=pd.read_sql(sql,engine_yun)
    message = ''.join(df['push_content'].to_list()) # 设置推送内容的格式
    return message

# 配置推送的设置
def push_content_automatic_push_kpis():
    message=get_content_automatic_push_kpis()
    # 应用的唯一标识key
    appkey = 'xxxx' # 找公司钉钉管理员要相关信息
    # 应用的密钥
    appsecret = 'xxxx' # 找公司钉钉管理员要相关信息
    # 发送消息时使用的微应用的AgentID
    agent_id = 'xxx' # 找公司钉钉管理员要相关信息,需要配置一个微应用
    # 接收者的userid列表
    userid_list = 'xxx,xxx' # 工号,可以输入多个人

    token = get_access_token(appkey, appsecret)
    ret = send_message(token['access_token'], {
        "agent_id": agent_id,
        "userid_list": userid_list,
        "msg": {
            "msgtype": "text",
            "text": {
                "content": message 
            },
        },
    })

# 添加定时任务并执行
schedule=BlockingScheduler()
schedule.add_job(func=push_content_automatic_push_kpis # 定时任务的内容
                 ,trigger='cron'
                 ,day_of_week=4,hour='11'
                 )
schedule.start()

Mysql数据处理成文本技巧

把查询结果返回为保留换行的文本,要怎么处理?

在MySQL中,CONCAT() 函数用于将两个或多个字符串值连接成一个字符串。默认情况下,这个函数不会识别或保留换行符,因为MySQL中的字符串操作通常不会处理换行符(\n)。

如果你需要在连接的字符串中保留换行符,你可以使用 CONCAT_WS() 函数,它允许你指定一个分隔符,并且会保留分隔符在结果字符串中。例如,如果你想要保留换行符作为分隔符,可以这样做:

SELECT CONCAT_WS('\n', 'First line', 'Second line') AS ConcatenatedText;

这将返回:

ConcatenatedText
-----------------
First line
Second line

请注意,这种方法在处理来自不同列的换行符时可能不适用,因为 CONCAT_WS() 会将分隔符放在每个字符串之间,即使它们本身不包含换行符。

如果你需要从不同列中连接字符串并保留换行符,你可能需要使用 GROUP_CONCAT() 函数,它允许你指定一个分隔符,并且可以用于连接来自查询的多行的结果。例如:

SELECT GROUP_CONCAT(column1 SEPARATOR '\n') AS ConcatenatedText
FROM your_table;

这将把 your_table 中的 column1 的值连接成一个字符串,每个值之间用换行符分隔。

代码文档管理(忽略)

1. 确定python代码本地文件命名:主题-作用渠道-内容-相关主表;在python代码文件开头写上代码作用、推送时间、推送人、Linux任务命名

2. 在定时任务管理文档中,把定时任务的相关信息做好记录;

3. 需求文件撰写归档,并配置上线后监控任务,如果后续代码出现问题或者迭代,需要记录到此任务文档中汇总;

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值