上期介绍了如何定时推送数据到钉钉群,这次介绍如何定时推送数据到企业微信群。
创建群聊:企业微信没有场景群,可以拉三五好友进群,然后再给他们踢出去,这样就有了一个只有自己的群。
添加群机器人:右上角...
-> 添加群机器人 -> 添加机器人 -> 创建一个新机器人
查看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_id
key = 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
即可,喜欢折腾的同学可以自行尝试~
至此,数据分析系列中的技能实践已经创作结束,当然后续如果发现值得分享的技能技巧,也会再次补充。感谢大家一直以来的支持。祝大家步步高升,薪资大涨~
鉴于数据分析的场景较多,后续会单独开一个专题分析
系列,逐一为大家介绍各种各样场景下的专题分析。咱们下期再见!
共勉~