需求描述
每周五上午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. 需求文件撰写归档,并配置上线后监控任务,如果后续代码出现问题或者迭代,需要记录到此任务文档中汇总;