Python书签 # 实现用企业微信机器人定时自动发送消息_企微机器人定时发送-程序员宅基地

技术标签: schedule  Timer  企业微信机器人  自动发消息  Python  

楔子:如果开发变成一件简单有趣也很有意义的事,你会不会也变得想去做呢?Python 可能不会感觉我在无中生有暗度陈仓凭空想象。

你可能想每天定时发送一条消息到企业微信工作群,来提醒同志们当天的任务和工作
你可能想创建一个企业微信机器人,解放人力,让它来替你做一些事情
你可能想定时发送一句心灵鸡汤、悄悄话、一句名言名句给TA
你可能如果有需要无中生有暗度陈仓凭空想象......

 

1. 自由极简

在指定时间后自动发送消息。

Timer(定时器)是 Thread 的派生类,用于在指定时间后调用一个方法。即可以控制指定函数在特定时间内执行一次。

import threading

def hello():
    print("hello python")
# 指定2秒后执行hello函数
t = threading.Timer(2, hello)
t.start()

上面程序使用 Timer 延迟2秒后执行指定的 hello 函数。输出:hello python

但是,需求强调的是 Timer 只在指定时间(延时)后执行一次,如果要使用 Timer 控制函数多次重复执行,则需要多次再执行 Timer 调度:

from threading import Timer
import time

# 定义一个计数器,统计定时器需要执行的次数
count = 0
def print_time() :
    global t, count
    print("第 %s 次自动发消息,当前时间:%s" %(count, time.ctime()))
    count += 1
    # 制定一个只执行N次的定时调度
    if count < 5 :
        t = Timer(1, print_time)
        t.start()

# 延迟1秒后自动执行指定函数
t = Timer(1, print_time)
t.start()

输出结果:

第 0 次自动发消息,当前时间:Mon Sep  2 14:54:42 2019
第 1 次自动发消息,当前时间:Mon Sep  2 14:54:43 2019
第 2 次自动发消息,当前时间:Mon Sep  2 14:54:44 2019
第 3 次自动发消息,当前时间:Mon Sep  2 14:54:45 2019
第 4 次自动发消息,当前时间:Mon Sep  2 14:54:46 2019
[Finished in 5.5s]

 

2. 自由进阶

利用 Timer 实现通过企业微信机器人每天给工作群定时发送消息。如下:

from threading import Timer
import requests
import random
import time

# 获取金山词霸每日一句英文和翻译
def get_news():
    url = "http://open.iciba.com/dsapi/"
    res = requests.get(url)
    content = res.json()['content']
    note = res.json()['note']
    translation = res.json()['translation'].replace('小编的话', '美味书签')
    return content, note, translation

# 文本类型消息
def send_msg_txt(content) :
    headers = {"Content-Type" : "text/plain"}
    send_url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=69e3bed5-a20e-45be-9999-e30c0398c16c"
    send_data = {
        "msgtype": "text",  # 消息类型,此时固定为text
        "text": {
            "content": content  # 文本内容,最长不超过2048个字节,必须是utf8编码
        }
    }

    requests.post(url = send_url, headers = headers, json = send_data)

# 自定义消息发送机制:每天自动推送消息
def send_msg_timer() :
    global timer, count
    contents = get_news()

    for text in contents:
        rand_sec = random.randint(1, 5) # 利用随机数让前后消息发送的时间间隔
        time.sleep(rand_sec)
        print("当前时间:%s,消息内容:%s" %(time.ctime(), text))
        send_msg_txt(text)

# 定时发送消息:延迟一天(86400秒)发送消息到企业微信群
timer = Timer(86400, send_msg_timer)
timer.start()

当然,上面的代码只会执行一次,因为 Timer 只在指定时间(延时)后执行一次。

 

3. 自由进击

利用 schedule 实现通过企业微信机器人每天自动给工作群/员工群定时发送消息。如下:

from threading import Timer
import requests
import random
import time
import schedule

# 获取金山词霸每日一句英文和翻译
def get_news():
    url = "http://open.iciba.com/dsapi/"
    res = requests.get(url)
    content = res.json()['content']
    note = res.json()['note']
    translation = res.json()['translation']
    translation = translation.replace('小编的话', '进击物语')
    return content, note, translation

# 文本类型消息
def send_msg_txt(content):
    headers = {"Content-Type" : "text/plain"}
    send_url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=3ac6a62e-443d-487e-9999-cbdaf4e1082b"
    send_data = {
        "msgtype": "text",  # 消息类型,此时固定为text
        "text": {
            "content": content  # 文本内容,最长不超过2048个字节,必须是utf8编码
        }
    }

    requests.post(url = send_url, headers = headers, json = send_data)

def send_job():
    contents = get_news()

    for text in contents:
        rand_sec = random.randint(1, 5)  # 利用随机数让前后消息发送的时间产生延时
        time.sleep(rand_sec)
        # 打印下发送内容
        print("当前时间:%s,消息内容:%s" %(time.ctime(), text))
        send_msg_txt(text)

# 定时每天某个时刻执行一次job函数
schedule.every().day.at("17:30").do(send_job)

while True:
    schedule.run_pending() # 确保schedule一直运行
    time.sleep(2)

 

当然,再加工一下,自我发挥,就可以用来给女朋友、老婆、小哥哥小妹妹小朋友每天定时发消息,实现每日一句自动发送消息给喜欢的人,有木有暖暖的~


异常助手:
schedule 模块安装问题:ModuleNotFoundError: No module named 'schedule'
TAB 与空格问题:IndentationError: unindent does not match any outer indentation level


 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/itanping/article/details/100271662

智能推荐

Linux查看登录用户日志_怎么记录linux设备 发声的登录和登出-程序员宅基地

文章浏览阅读8.6k次。一、Linux记录用户登录信息文件1  /var/run/utmp----记录当前正在登录系统的用户信息;2  /var/log/wtmp----记录当前正在登录和历史登录系统的用户信息;3  /var/log/btmp:记录失败的登录尝试信息。二、命令用法1.命令last,lastb---show a listing of la_怎么记录linux设备 发声的登录和登出

第四章笔记:遍历--算法学中的万能钥匙-程序员宅基地

文章浏览阅读167次。摘要:1. 简介 2. 公园迷宫漫步 3. 无线迷宫与最短(不加权)路径问题 4. 强连通分量1. 简介在计算机科学裡,树的遍历(也称为树的搜索)是圖的遍歷的一种,指的是按照某种规则,不重复地访问某种樹的所有节点的过程。具体的访问操作可能是检查节点的值、更新节点的值等。不同的遍历方式,其访问节点的顺序是不一样的。两种著名的基本遍历策略:深度优先搜索(DFS) 和 广度优先搜索(B...

【案例分享】使用ActiveReports报表工具,在.NET MVC模式下动态创建报表_activereports.net 实现查询报表功能-程序员宅基地

文章浏览阅读591次。提起报表,大家会觉得即熟悉又陌生,好像常常在工作中使用,又似乎无法准确描述报表。今天我们来一起了解一下什么是报表,报表的结构、构成元素,以及为什么需要报表。什么是报表简单的说:报表就是通过表格、图表等形式来动态显示数据,并为使用者提供浏览、打印、导出和分析的功能,可以用公式表示为:报表 = 多样的布局 + 动态的数据 + 丰富的输出报表通常包含以下组成部分:报表首页:在报表的开..._activereports.net 实现查询报表功能

Ubuntu18.04 + GNOME xrdp + Docker + GUI_docker xrdp ubuntu-程序员宅基地

文章浏览阅读6.6k次。最近实验室需要用Cadence,这个软件的安装非常麻烦,每一次配置都要几个小时,因此打算把Cadence装进Docker。但是Cadence运行时需要GUI,要对Docker进行一些配置。我们实验室的服务器运行的是Ubuntu18.04,默认桌面GNOME,Cadence装进Centos的Docker。安装Ubuntu18.04服务器上安装Ubuntu18.04的教程非常多,在此不赘述了安装..._docker xrdp ubuntu

iOS AVFoundation实现相机功能_ios avcapturestillimageoutput 兼容性 ios17 崩溃-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏2次。首先导入头文件#import 导入头文件后创建几个相机必须实现的对象 /** * AVCaptureSession对象来执行输入设备和输出设备之间的数据传递 */ @property (nonatomic, strong) AVCaptureSession* session; /** * 输入设备 */_ios avcapturestillimageoutput 兼容性 ios17 崩溃

Oracle动态性能视图--v$sysstat_oracle v$sysstat视图-程序员宅基地

文章浏览阅读982次。按照OracleDocument中的描述,v$sysstat存储自数据库实例运行那刻起就开始累计全实例(instance-wide)的资源使用情况。 类似于v$sesstat,该视图存储下列的统计信息:1>.事件发生次数的统计(如:user commits)2>._oracle v$sysstat视图

随便推点

Vue router报错:NavigationDuplicated {_name: "NavigationDuplicated", name: "NavigationDuplicated"}的解决方法_navigationduplicated {_name: 'navigationduplicated-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏9次。我最近做SPA项目开发动态树的时候一直遇到以下错误:当我点击文章管理需要跳转路径时一直报NavigationDuplicated {_name: “NavigationDuplicated”, name: “NavigationDuplicated”}这个错误但是当我点击文章管理后,路径跳转却是成功的<template> <div> 文章管理页面 <..._navigationduplicated {_name: 'navigationduplicated', name: 'navigationduplic

Webrtc回声消除模式(Aecm)屏蔽舒适噪音(CNG)_webrtc aecm 杂音-程序员宅基地

文章浏览阅读3.9k次。版本VoiceEngine 4.1.0舒适噪音生成(comfort noise generator,CNG)是一个在通话过程中出现短暂静音时用来为电话通信产生背景噪声的程序。#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)static const EcModes kDefaultEcMode = kEcAecm;#elsestati..._webrtc aecm 杂音

医学成像原理与图像处理一:概论_医学成像与图像处理技术知识点总结-程序员宅基地

文章浏览阅读6.3k次,点赞9次,收藏19次。医学成像原理与图像处理一:概论引言:本系列博客为医学成像原理与图像处理重要笔记,由于是手写,在此通过扫描录入以图片的形式和电子版增补内容将其进行组织和共享。前半部分内容为图像处理基础内容,包括图像的灰度级处理、空间域滤波、频率域滤波、图像增强和分割等;后半部分内容为医学影象技术,包括常规胶片X光机、CR、DR、CT、DSA等X射线摄影技术、超声成像技术、磁共振成像(MRI)技术等。本篇主要内容是概论。_医学成像与图像处理技术知识点总结

notepad++ v8.5.3 安装插件,安装失败怎么处理?下载进度为0怎么处理?_nodepa++-程序员宅基地

文章浏览阅读591次,点赞13次,收藏10次。notepad++ v8.5.3 安装插件,下载进度为0_nodepa++

hive某个字段中包括\n(和换行符冲突)_hive sql \n-程序员宅基地

文章浏览阅读2.1w次。用spark执行SQL保存到Hive中: hiveContext.sql(&quot;insert overwrite table test select * from aaa&quot;)执行完成,没报错,但是核对结果的时候,发现有几笔数据超出指定范围(实际只包含100/200)最终排查到是ret_pay_remark 字段包含换行符,解决方案:执行SQL中把特殊字符替换掉regexp_replace(..._hive sql \n

印象笔记05:如何打造更美的印象笔记超级笔记_好的印象笔记怎么做的-程序员宅基地

文章浏览阅读520次,点赞10次,收藏8次。印象笔记05:如何打造更美的印象笔记超级笔记本文介绍印象笔记的具体使用,如何打造更美更实用的笔记。首先想要笔记更加好看和实用,我认为要使用超级笔记。所谓超级笔记就是具有很多便捷功能的笔记。_好的印象笔记怎么做的

推荐文章

热门文章

相关标签