根据电脑开关机提醒钉钉打卡

背景

  1. 钉钉打卡
  2. 工作期间全天使用电脑
  3. 有点强迫症,总担心忘记打卡(确实容易忘)

吐槽一句,让工作的人在工作时间以外,脑中留个线程提醒签到并承担忘记的风险(补卡搞得像是早退一样)。。。忍着吧

思路

  1. 通过邮箱、钉钉、消息推送等方式接收打卡提醒
  2. 编写相关脚本
  3. 笔记本开机、关机触发

简单实现

由于使用邮箱提醒(邮箱和微信绑定,微信提示),不能像浏览器一样通过链接打开钉钉app,故而直接通过钉钉提醒

1. 创建钉钉群,并创建自定义机器人

  • 需要使用电脑版钉钉创建机器人
  • 钉钉机器人操作详见: 钉钉开发文档

2. 编写脚本

我使用python3.6 + bat,如果只是发送简单内容,可直接用curl等命令
以下代码请酌情组合修改

python代码

相关引用, 可能有遗漏和多余…
import hashlib
import hmac
import json
import random
import time
import urllib.parse
import base64
import socket
import requests
import datetime
from DingDingBot import DDBOT

# 钉钉文档提供,我使用的签名,如果是其他限制方式,自动忽略
def generate_sign():
    timestamp = str(round(time.time() * 1000))
    secret = '***'
    secret_enc = secret.encode('utf-8')
    string_to_sign = '{}\n{}'.format(timestamp, secret)
    string_to_sign_enc = string_to_sign.encode('utf-8')
    hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
    sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
    return timestamp, sign
# 通过机器人发送钉钉消息
def send_dingding():
    time_n = datetime.datetime.now()
    gushi = requests.get('https://v2.jinrishici.com/one.json').text
    gushi = json.loads(gushi)
    poem = '天行健,君子以自强不息'
    if gushi and gushi['status'] == 'success':
    	# 获取诗词全文(一句也挺好,但是看全了好像更好~~)
        poem = "\n".join(gushi['data']['origin']['content'])
    # markdown类型,这里我添加了上传到个人服务器的图片地址(平时没留意可以上传图片的网站,否则就用现成的了),图片名1-12.jpg,目的是为了收到的消息花里胡哨点
    message = "# **打卡啦** \n> {}\n> ![screenshot](http://***.jpg)\n> ###### {}点{}分发布 ".format(poem, random.randint(1, 12), time_n.hour,time_n.minute)

    timestamp, sign = generate_sign()
    # 请更换为钉钉机器人创建后的链接
    webhook = 'https://oapi.dingtalk.com/robot/send?access_token=*×tamp={}&sign={}'.format(timestamp, sign)
    # 钉钉封装好的方法(自己写也行), pip install DingDingBot
    xiaoding = DDBOT.DingDing(webhook)
    result = xiaoding.Send_MardDown_Msg(message, "打卡啦")
    print(result)

注:https://www.jinrishici.com/ ,根据天气位置等智能、随机获取诗词,非常好

# 判断是否应该提醒下班打卡,可根据个人实际情况修改条件 
def alert_punch_out():
    time_now = datetime.datetime.now()
    alert = (time_now.weekday() < 5 and ((time_now.hour == 17 and time_now.minute >= 30) or (17 < time_now.hour < 22)))
    return alert
    
# 判断是否应该提醒上班打卡
def alert_punch_in():
    time_now = datetime.datetime.now()
    alert = (time_now.weekday() < 5 and 7 <= time_now.hour <= 9)
    return alert

# ping网络的方法,忘了在哪个博客复制过来的,请见谅
def ping_net(ip):  # 直接ping的方法
    cmd = "ping " + str(ip) + " -n 2"
    exit_code = os.system(cmd)
    if exit_code:
        return False
    return True
# 开机调用主方法,关机时直接判断是否下班打卡就好,不需要循环判断网络
if __name__ == '__main__':
# 考虑到开机时的联网延迟、更换wifi等问题,建议使用循环,网络畅通时调用
	for i in range(1000):
        net_ok = ping_net('www.baidu.com')
        if net_ok:
            if alert_punch_in():
                send_dingding()
            break
        time.sleep(60)

bat脚本
  1. 创建bat文件,内容如下:

    # 编写好的py文件位置
    python **/**.py
    # 关机命令,开机运行脚本请删除
    shutdown -s -t 0
    

    不知道是不是windows强制调出策略组的问题,升级成专业版后策略组关机执行脚本也未生效
    如果有人也考虑家庭版强制调出策略组,请慎重考虑网上的方法
    所以这里就创建关机脚本,将关机的vbe发送到桌面快捷方式,改名、改权限、改图标,也挺方便的
    自定义关机图标
    这是我的关机图标,嗯,满意

  2. 创建vbe文件,为了避免弹出cmd窗口,内容如下:

    set ws=wscript.createobject("wscript.shell")
    # 刚刚的bat文件
    ws.run "**/**.bat /start",0
    
  3. 将vbe开机脚本放到这个目录(适用于win10),开机后会自动执行:
    C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

  4. 关机脚本创建桌面快捷方式,别忘记用就好

测试效果

根据电脑开关机提醒钉钉打卡_第1张图片

结尾

总算在严肃的钉钉里找到点能够轻松的东西,还有就是这个随机诗词的网站感觉真不错,找了挺久随机图片的网站,有个bing的很好,但是文件太大而且markdown不显示,有点遗憾。

你可能感兴趣的:(脚本,windows,python)