共计 3373 个字符,预计需要花费 9 分钟才能阅读完成。
这里利用了 Py 脚本监控 + go_cqhttp 机器人实现。
准备阶段:
安装 Python
在终端中输入以下命令来安装 Python:
sudo apt update
sudo apt install python3
这将安装 Python 3.x 版本。如果您需要安装 Python 2.x 版本,请将上述命令中的“python3”替换为“python”。
安装所需的库
在终端中输入以下命令来安装所需的 Python 库:
apt install python3-pip
pip3 install requests
pip3 install beautifulsoup4
pip3 install python-telegram-bot
这将安装 requests、beautifulsoup4 和 python-telegram-bot 库。
1. 创建 Py 监控脚本 web_monitor.py
!注意如果在 linux 运行头部要加这行代码:#!/usr/bin/env python3
#-*- codeing = utf-8 -*-
#@Time :2023/4/1 15:25
#@Author : zh
#@File : web_monitor.py
#@Software: PyCharm
import datetime
import requests
import asyncio
import smtplib
from email.mime.text import MIMEText
from bs4 import BeautifulSoup
# 发送群号
group_id = '112'
# Telegram Bot 群组 id (需要把 bot 加入群组,并点打开点开始。再把 @get_id_bot 加入群组 /start,即可知道群组 id,完事后可以移除 @get_id_bot)
telegram_user_id = '-xxx'
# 填写 Telegram Bot 的 API token 和您的 Telegram 用户 ID
bot_token = 'xxxxxx'
# 发送文本范式
template_txt = '''
商 品: {name} 补货了
详 情: {url}
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
'''.strip()
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36",
}
# 发送消息到 QQ 机器人
def send_group_msg(group_id, message):
# 发送的机器人通信
send_group_msg_url = 'http://127.0.0.1:5700/send_group_msg'
params = {
'group_id': group_id,
'message': message,
}
print(params)
requests.get(send_group_msg_url, params).json()
# 发送到 tg 机器人消息
async def send_tg_msg(msg):
bot = telegram.Bot(token=bot_token)
await bot.send_message(chat_id=telegram_user_id, text=msg)
def check_stock():
try:
print("start...")
urlList = [
{
'url':'https://example.xxx.com/order/?shop_id=28',
'name':'商品名称'
}
]
for item in urlList:
print(item.get('url'))
response = requests.get(item.get('url') , headers=headers, timeout=50)
print(response.status_code)
if response.status_code == 200:
# 这里是自己写的规则
# 解析网站内容,获取商品库存信息
soup = BeautifulSoup(response.text, "html.parser")
# 寻找元素
change_currency_element = soup.find_all(class_='col-md-3 package-boxes')
now_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 获取当前时间
# 判断是否能打开页面
if len(change_currency_element)<=0:
print(now_time, '缺货:' + item.get('name'))
continue
# 取第一个下拉列表
qty_text = change_currency_element[0].text.strip()
# 判断下拉文本按钮是否为 Select 状态
if qty_text is not None and 'Select' in qty_text:
# 发送邮件通知有货
# send_email_notification(url)
# 文本赋值
msg = template_txt.format(name=item.get('name'), url=item.get('url'))
print(now_time, '有货:' + item.get('name'))
# 发送消息到 QQ 机器人
send_group_msg(group_id, msg)
# 异步发送消息到 TG 机器人
asyncio.run(send_tg_msg(msg))
else:
print(now_time, '缺货:' + item.get('name'))
print("end")
except Exception as e:
print('错误', e)
if __name__ == '__main__':
check_stock()
这里的机器人通信服务接口 http://127.0.0.1:5700/send_group_msg
可以参考我上一篇文章部署。 部署 QQ 消息机器人
2. 开始监控
脚本和机器人都部署到服务器上后,go_cqhttp 机器人可以运行命令
./go-cqhttp -d
在后台运行。
py 脚本 则需使用定时任务
为了让 Python 代码定期运行,您可以使用 Linux 的定时任务工具 cron。在终端中输入以下命令以编辑 cron 表:
crontab -e
然后添加以下行来设置定时任务,例如每隔 10 秒运行一次:
* * * * * sleep 10 && /usr/bin/python3 /root/web_monitor.py > /root/web_monitor.log
要填绝对路径。保存并退出 cron 表后,定时任务将自动启动,并按照您设置的时间间隔运行 Python 代码。运行日志将保存到 /root/web_monitor.log
3. 这里贴一下 qq 邮件的发送方法,自行选择。
def send_email_notification(buy_link):
# 邮件 SMTP 配置
smtp_server = 'smtp.qq.com'
smtp_port = 465 # 或者其他端口号
sender_email = '发件人 [email protected]'
sender_password = '服务密码,可以去邮箱查看'
receiver_email = '收件人 [email protected]'
# 邮件内容
message = MIMEText('xx 商品补货了 Buy it at: {}'.format(buy_link), 'plain', 'utf-8')
message['From'] = sender_email
message['To'] = receiver_email
message['Subject'] = 'commodity is available now!'
# 发送邮件
smtp_server = smtplib.SMTP_SSL(smtp_server, smtp_port)
smtp_server.login(sender_email, sender_password)
smtp_server.sendmail(sender_email, [receiver_email], message.as_string())
smtp_server.quit()
print("邮件发送完成")
正文完