自动化系列(五)Python实现企业微信机器人
上期介绍了如何定时推送数据到钉钉群,这次介绍如何定时推送数据到企业微信群。
添加自定义机器人
创建群聊:企业微信没有场景群,可以拉三五好友进群,然后再给他们踢出去,这样就有了一个只有自己的群。
添加群机器人:右上角...
-> 添加群机器人 -> 添加机器人 -> 创建一个新机器人
查看Webhook:点击右侧刚才创建的机器人 -> 点解链接进入查看详细信息 -> 点击复制
有的公司限制了个人创建自定义机器人的权限,需要找dba帮忙开下权限~
发送文本类消息
import requests
import json# 发送文本消息
def send_text(webhook, content, mentioned_list=None, mentioned_mobile_list=None):header = {"Content-Type": "application/json","Charset": "UTF-8"}data ={"msgtype": "text","text": {"content": content,"mentioned_list":mentioned_list,"mentioned_mobile_list":mentioned_mobile_list}}data = json.dumps(data)info = requests.post(url=webhook, data=data, headers=header)# 发送markdown消息
def send_md(webhook, content):header = {"Content-Type": "application/json","Charset": "UTF-8"}data ={"msgtype": "markdown","markdown": {"content": content}}data = json.dumps(data)info = requests.post(url=webhook, data=data, headers=header)
webhook = "****"send_text(webhook, content='HsuHeinrich', mentioned_mobile_list=[1****])
send_md(webhook, content='# 一级标题 \n 微信搜索HsuHeinrich,发现更多精彩👍')
结果如下:
发送文件
企业微信是支持推送文件的,首先将文件上传至企业微信指定的地址,然后返回给你media_id
。文件应小于20M,且media_id
有效时间为三天。
import pandas as pd
from faker import Faker
from faker.providers import BaseProvider, internet
from random import randint# 构造pandas数据
# 自定义fake
fake = Faker('zh_CN')
class MyProvider(BaseProvider):def myCityLevel(self):cl = ["一线", "二线", "三线", "四线+"]return cl[randint(0, len(cl) - 1)]def myGender(self):g = ['F', 'M']return g[randint(0, len(g) - 1)]def myDevice(self):d = ['Ios', 'Android']return d[randint(0, len(d) - 1)]
fake.add_provider(MyProvider)# 构造假数据
uid=[]
cityLevel=[]
gender=[]
device=[]
age=[]
activeDays=[]
for i in range(10):uid.append(i+1)cityLevel.append(fake.myCityLevel())gender.append(fake.myGender())device.append(fake.myDevice())age.append(fake.random_int(min=18, max=65))activeDays.append(fake.random_int(min=0, max=180))raw_data= pd.DataFrame({'uid':uid,'cityLevel':cityLevel,'gender':gender,'device':device,'age':age,'activeDays':activeDays,})# 通过style美化df
# 增加色阶、标题,隐藏索引、uid列
title = '活跃统计'
df = raw_data.style\.background_gradient(cmap='Pastel1',subset=['activeDays'])\.set_caption(title)\.hide_index()\.hide_columns(subset=['uid'])\.to_excel('file_demo.xlsx', engine='openpyxl', index=False)
# 发送文件
def send_file(webhook, file):# 获取media_idkey = webhook.split('key=')[1]id_url = f'https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?key={key}&type=file'files = {'file': open(file, 'rb')}res = requests.post(url=id_url, files=files)media_id = res.json()['media_id']header = {"Content-Type": "application/json","Charset": "UTF-8"}data ={"msgtype": "file","file": {"media_id": media_id}}data = json.dumps(data)info = requests.post(url=webhook, data=data, headers=header)
webhook = "****"
file = 'file_demo.xlsx'
send_file(webhook, file)
其他类型消息
微信群机器人也支持其他类型的消息,例如图文、各种卡片。只要按照企业微信开发者中心定义数据类型,替换上面函数定义的data
即可,喜欢折腾的同学可以自行尝试~
总结
至此,数据分析系列中的技能实践已经创作结束,当然后续如果发现值得分享的技能技巧,也会再次补充。感谢大家一直以来的支持。祝大家步步高升,薪资大涨~
鉴于数据分析的场景较多,后续会单独开一个专题分析
系列,逐一为大家介绍各种各样场景下的专题分析。咱们下期再见!
共勉~