自动化系列(五)Python实现企业微信机器人

自动化系列(五)Python实现企业微信机器人

上期介绍了如何定时推送数据到钉钉群,这次介绍如何定时推送数据到企业微信群。

添加自定义机器人

创建群聊:企业微信没有场景群,可以拉三五好友进群,然后再给他们踢出去,这样就有了一个只有自己的群。

添加群机器人:右上角... -> 添加群机器人 -> 添加机器人 -> 创建一个新机器人

查看Webhook:点击右侧刚才创建的机器人 -> 点解链接进入查看详细信息 -> 点击复制

有的公司限制了个人创建自定义机器人的权限,需要找dba帮忙开下权限~

image-20221202233235741

发送文本类消息

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)

image-20221224222709773

其他类型消息

微信群机器人也支持其他类型的消息,例如图文、各种卡片。只要按照企业微信开发者中心定义数据类型,替换上面函数定义的data即可,喜欢折腾的同学可以自行尝试~

总结

至此,数据分析系列中的技能实践已经创作结束,当然后续如果发现值得分享的技能技巧,也会再次补充。感谢大家一直以来的支持。祝大家步步高升,薪资大涨~

鉴于数据分析的场景较多,后续会单独开一个专题分析系列,逐一为大家介绍各种各样场景下的专题分析。咱们下期再见!

共勉~