通过企业微信和定时任务实现你的提醒小助手

2020-03-26 08:40:56 +08:00
 KevinRed

原文排版更好看哦=>通过企业微信和定时任务实现你的提醒小助手

原文排版更好看哦=>通过企业微信和定时任务实现你的提醒小助手

原文排版更好看哦=>通过企业微信和定时任务实现你的提醒小助手


注册和新建应用的过程就不细说了,现在企业微信申请不用认证任何信息,任意微信号就可以注册


新建应用后按如下截图找到几个信息


1.corpid  企业 id

2.corpsecret 应用的 secret

3.agentid  应用的agentid





发送信息也很好实现,首先获取 token

token有个过期时间,用 redis 存储并设置过期时间,可以很方便的判断是否需要重新获取

获取到 token 之后就可以调用发送消息接口,具体参数可以看官方文档 接口文档


这里提供一个 php 的工具类

/**
 * 发送企业微信
 * @param $content    内容
 * @param $tokenName  token 的 key
 * @param $secret     应用 secret
 * @param $agentId    应用 agentId
 * @author WJ
 * @date 2019-12-18
 */
public function sendWXWork($content, $tokenName, $secret, $agentId)
{
//使用 redis 存储 token,设置一个超时时间,过期后重新获取

$redis = new \Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('****');

$token = $redis->get($tokenName);
if (empty($token)) {

    $curl = curl_init();

    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    
    //换上你的 corpid
    curl_setopt($curl, CURLOPT_URL, "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=****&corpsecret=" . $secret);

    $result = curl_exec($curl);
    curl_close($curl);

    $result = json_decode($result, true);

    if ($result['errcode'] === 0) {
        $token = $result['access_token'];
        $redis->set($tokenName, $token);
        $redis->expire($tokenName, $result['expires_in']);

    } else {
        return;
    }
}


//发送消息
$url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" . $token;

$text_param = array(
    "touser" => "@all",
    "msgtype" => "text",
    "agentid" => $agentId,
    "text" => array("content" => $content)
);
$requestData = json_encode($text_param);


$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Content-Length:' . strlen($requestData)));
curl_setopt($curl, CURLOPT_POSTFIELDS, $requestData);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLINFO_HEADER_OUT, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

//设置请求头
$headers = array();
$header[] = 'User-Agent: iMAG0'; //设置一个你的浏览器 agent 的 header
$header[] = 'token:Test'; //设置一个你的浏览器 agent 的 header
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);

curl_exec($curl);
curl_close($curl);

}




本文以实现一个喝水助手为例



先来说一下 linux 的定时任务


首先通过 crontab  -e 命令新建定时任务,其实就是一个文本文档,格式如下


分        小时    日       月       星期     命令

0-59   0-23   1-31   1-12     0-6     command    


可以用特殊字符表示范围:

“*”代表取值范围内的数字
“/”代表”每”
“-”代表从某个数字到某个数字
“,”分开几个离散的数字



通过 crontab  -l 可以查看当前所有的定时任务


最后通过 curl 命令访问写好的接口就大功告成了


喝水助手的代码如下

public function drink(){
for($i = 1; $i <= 3; $i ++){
    $content = '现在是' . date("Y-m-d H:i:s", time()) . "\n\n 该喝水了!!!\n\n 喝水了!!!\n\n 水了!!!\n\n 了!!!\n\n !!!\n\n !!\n\n !";
    $this->sendWXWork($content, "drinkToken", "************", "************");
    sleep(2);
}

}


定时任务设置如下

30 6 * * * curl 127.0.0.1/drink
30 8 * * * curl 127.0.0.1/drink
0 11 * * * curl 127.0.0.1/drink
0 13 * * * curl 127.0.0.1/drink
30 15 * * * curl 127.0.0.1/drink
0 17 * * * curl 127.0.0.1/drink
30 18 * * * curl 127.0.0.1/drink
0 21 * * * curl 127.0.0.1/drink






1567 次点击
所在节点    程序员
18 条回复
xnode
2020-03-26 08:43:06 +08:00
加一个 该拉屎了!!
justrand
2020-03-26 08:50:49 +08:00
直接滴答清单不就行了,也是微信提醒
renmu
2020-03-26 09:07:12 +08:00
Chrome 有个喝水助手,还挺好用的
KevinRed
2020-03-26 09:13:44 +08:00
@xnode
@renmu
@justrand
喝水助手仅是个例子,还可以用其他触发方式推送很多信息,比如博客的访问记录
xabc
2020-03-26 09:31:19 +08:00
手机闹钟不行吗? 简单问题复杂化 😂
erDaren
2020-03-26 09:34:54 +08:00
只能在企业微信收消息吗?还是微信也可以收到?
naix1573
2020-03-26 09:37:13 +08:00
应该加一个提肛
Aprilming
2020-03-26 09:37:48 +08:00
滴答清单啊,能够实现微信推送的
7654
2020-03-26 09:40:28 +08:00
用企业微信搭了一个报警平台,然后再设置微信接收,每天轰炸不要太酸爽
polythene
2020-03-26 10:21:48 +08:00
这里有一个同样功能的,只不过通过微信公众号实现的提醒机器人
https://github.com/polyrabbit/WeCron
liyaojian
2020-03-26 10:27:24 +08:00
@polythene 用老哥的微提醒好几年了
KevinRed
2020-03-26 10:37:24 +08:00
@xabc
@Aprilming
这个可定制程度很高


@erDaren
微信也可以,关注微服务就行

@7654
哈哈哈,我曾经一天推了一万多条


@polythene
公众号需要认证吧,我记得很费劲还要钱,企业微信啥都不用
chmlai
2020-03-26 10:38:56 +08:00
@naix1573 提肛还行,不明白为啥喝水都要提醒自己
bnm965321
2020-03-26 10:57:37 +08:00
@KevinRed 文档上写每人每天只能接收到一个 「企业号」 30 条推送,你的一万条是针对不同用户吗。

如果要建企业微信聊天群,就可以有更多限额了
raymanr
2020-03-26 11:07:28 +08:00
@7654 我刚给部门写了一个邮件+钉钉机器人的提醒, 现在部门领导正用这个到处发垃圾信息... 各种上万字的邮件, 刷满屏的机器人消息... 我唯一能做的就是把我从邮件接收人和机器人 @列表里面去掉...
polythene
2020-03-26 11:26:28 +08:00
@liyaojian 这么多年了,一直在贴钱运营,感动不 :)
liyaojian
2020-03-26 11:28:34 +08:00
@polythene #16 感动,大佬不差钱
Liutos
2020-03-28 11:40:29 +08:00
我也做了个类似的工具: https://github.com/Liutos/cuckoo

发送给微信用的是方糖的服务,通知栏看的效果可能没有那么好:-p

除了发送到微信之外还会在桌面弹出通知,目前只做了对 macOS 的支持,所以需要一直开着电脑用 2333

欢迎各位大佬试用亲喷,在项目的 wiki 中有使用文档: https://github.com/Liutos/cuckoo/wiki

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/656244

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX