目标是每天早上让企业微信群里自动出现一条上海天气。做法:群里加一个自定义机器人,Python 抓天气网页、把描述文本 POST 到机器人的 webhook,再挂 crontab。
群里添加机器人
在群设置里添加自定义机器人,复制生成的 webhook 地址,后面脚本里的 webhook 就填它。

推送脚本
脚本从墨迹天气的城市页取 description meta 里的天气描述,作为 text 消息发给 webhook;mentioned_list 与 isAtAll 控制是否 @ 全体,不需要就去掉。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import requests
import re
import urllib.request
import json
import sys
import os
headers = {'Content-Type': 'application/json;charset=utf-8'}
##拷贝企业微信机器人生成的webhook
webhook = "企业微信机器人webhook"
def msg(text):
message= {
"msgtype": "text",
"text": {
"content": text, ##注意后面跟【逗号】
"mentioned_list":["@all"] ##@群里所有人,可以不加
},
"at": {
"isAtAll": True
}
}
print(requests.post(webhook,json.dumps(message),headers=headers).content)
url = "https://tianqi.moji.com/weather/china/shanghai/minhang-district" ##要爬取天气预报的网址(china后面是各个省市的地址)
par = '(<meta name="description" content=")(.*?)(">)'
opener = urllib.request.build_opener()
urllib.request.install_opener(opener)
html = urllib.request.urlopen(url).read().decode("utf-8")
##提取需要爬取的内容
data = re.search(par,html).group(2)
msg(data)
执行与结果
加执行权限跑一次,返回 errcode:0 即成功:
[root@localhost script]# chmod +x weather.py
[root@localhost script]# ./weather.py
b'{"errcode":0,"errmsg":"ok"}'
群里收到的消息效果:

之后用 crontab 定时执行就能做到每天自动发送。
只在工作日推送
更进一步:调节假日接口判断当天日期,工作日推送、节假日跳过。完整脚本如下,注意这个版本请求头的字符集改成了 gbk,年份变量按需要更新。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import requests
import re
import urllib.request
import json
import sys
import os
import time
import time,datetime
holiday_info = {}
CUR_YEAR = '2020' #定义年份
##这里字符集改为了gbk
headers = {'Content-Type': 'application/json;charset=gbk'}
webhook = "企业微信机器人webhook"
url = "https://tianqi.moji.com/weather/china/shanghai/minhang-district"
par = '(<meta name="description" content=")(.*?)(">)'
opener = urllib.request.build_opener()
urllib.request.install_opener(opener)
html = urllib.request.urlopen(url).read().decode("utf-8")
data = re.search(par,html).group(2)
def msg(text):
message= {
"msgtype": "text",
"text": {
"content": text,
"mentioned_list":["@all"]
}
}
print(requests.post(webhook,json.dumps(message),headers=headers).content)
def init_holiday_info():
global holiday_info
rep = requests.get('http://tool.bitefu.net/jiari/?d=' + CUR_YEAR)
info_txt = rep.content.decode()
holiday_info = json.loads(info_txt)
def check_if_is_work_day():
day_info = time.strftime("%m%d",time.localtime(time.time()))
print(day_info)
if day_info in holiday_info[CUR_YEAR]:
return False
week = datetime.datetime.now().weekday()
if 0 <= week and 4 >= week:
msg(data) #调用期企业微信推送内容
return False
if __name__ == "__main__":
init_holiday_info()
check_if_is_work_day()
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END



















暂无评论内容