微信消息推送自由!!
在数字化时代,及时获取信息至关重要。而微信则是当下最重要的信息获取渠道。解锁微信消息推送服务,将给我们带来极大的便利。
本文将给大家解锁一款微信消息推送工具 ShowdDoc。
ShowDoc 推送服务作为一款强大工具,能轻松实现从服务器向手机推送消息,为服务器告警、程序监控通知等场景提供便利。本文将深入介绍其使用方法,并分享多个实用示例。
一、ShowDoc 推送服务概述
ShowDoc 推送服务是 ShowDoc 旗下独立工具,它最大的优势在于使用简单、开箱可用,无需复杂配置。而且,它承诺长期维护且持续免费,不限制消息数量和请求数,还极具编程拓展性,能满足多样化需求。
二、使用方法
(一)获取专属推送地址
打开推送服务首页 (建议电脑端访问),切换到右上角“推送”导航菜单,就能看到专属推送地址。这个地址是后续推送消息的关键入口。
(二)接口请求
- 请求URL:即专属推送地址。
- 请求方式:支持GET和POST。选择哪种方式取决于具体应用场景,一般来说,GET适合简单数据传递,POST更适合传递大量数据或敏感信息。
- 参数设置
- title:必填,字符串类型,用于设置推送消息的标题。
- content:必填,字符串类型,支持文本、Markdown和HTML格式,用于设置推送消息的内容。
(三)查看返回结果
- 成功返回示例:当请求成功时,返回数据类似
{"error_code": 0,"error_message": "ok"}
,其中error_code
为0表示请求成功。 - 失败返回示例:若请求失败,如
{"error_code": 10103,"error_message": "url或token不正确"}
,根据error_message
提示的错误信息,可排查问题。
三、使用示例
(一)手动推送
手动推送适用于即时性、临时性的消息通知。例如,在开发过程中,想要快速告知团队成员某个功能模块完成测试。
- 确定专属推送地址。
- 构造请求数据,假设使用GET请求,在浏览器地址栏输入:
[你的专属推送地址]?title=功能模块测试完成&content=用户登录模块已完成测试,目前运行稳定
。回车后,绑定的微信就能收到消息。
(二)自动推送天气(Markdown格式)
借助Python和相关天气API,可实现自动推送天气信息。这里以requests
库获取天气数据、Markdown
格式组织内容为例。
import requests
import time
# 获取专属推送地址
push_url = "[你的专属推送地址]"
# 天气API,以和风天气为例
weather_api = ";key=[你的和风天气API key]"
whileTrue:
try:
# 获取天气数据
weather_response = requests.get(weather_api)
weather_data = weather_response.json()
if weather_response.status_code == 200:
temperature = weather_data['now']['temp']
weather_desc = weather_data['now']['text']
# 构造Markdown格式消息内容
content = f"# 今日天气\n当前温度:{temperature}℃\n天气状况:{weather_desc}"
# 构造请求参数
params = {
"title": "今日天气 Markdown",
"content": content
}
# 发送推送请求
push_response = requests.get(push_url, params=params)
print(push_response.json())
else:
print("获取天气数据失败")
except Exception as e:
print(f"发生错误:{e}")
time.sleep(3600) # 每小时推送一次
(三)自动推送天气(HTML格式)
同样以Python为例,这次用HTML格式组织天气信息。
代码语言:javascript代码运行次数:0运行复制import requests
import time
# 获取专属推送地址
push_url = "[你的专属推送地址]"
# 天气API,以和风天气为例
weather_api = ";key=[你的和风天气API key]"
whileTrue:
try:
# 获取天气数据
weather_response = requests.get(weather_api)
weather_data = weather_response.json()
if weather_response.status_code == 200:
temperature = weather_data['now']['temp']
weather_desc = weather_data['now']['text']
# 构造HTML格式消息内容
content = f"""
<html>
<head><title>今日天气</title></head>
<body>
<h1>今日天气</h1>
<p>当前温度:{temperature}℃</p>
<p>天气状况:{weather_desc}</p>
</body>
</html>
"""
# 构造请求参数
params = {
"title": "今日天气 HTML",
"content": content
}
# 发送推送请求
push_response = requests.get(push_url, params=params)
print(push_response.json())
else:
print("获取天气数据失败")
except Exception as e:
print(f"发生错误:{e}")
time.sleep(3600) # 每小时推送一次
(四)自动推送股票信息
使用腾讯财经API获取股票实时价格,并推送信息。
push.config.json
用于存储配置信息,格式如下:
{
"showdoc_api": "[你的专属推送地址]",
"input_file": "stock_list.csv",
"update_interval": 300
}
stock_list.csv
用于存储股票列表信息,格式如下:
code
sh600000
sz000001
完整程序代码如下:
代码语言:javascript代码运行次数:0运行复制import pandas as pd
import requests
from datetime import datetime
import time
import json
import os
def load_config(config_file='push.config.json'):
"""读取JSON格式的配置文件"""
ifnot os.path.exists(config_file):
print(f"配置文件 {config_file} 不存在!")
returnNone
try:
with open(config_file, 'r', encoding='utf-8') as f:
return json.load(f)
except Exception as e:
print(f"读取配置文件出错: {e}")
returnNone
def read_stock_list(file_path):
"""读取股票列表文件"""
try:
# 尝试读取CSV文件
if file_path.endswith('.csv'):
df = pd.read_csv(file_path)
# 假设CSV文件中有'code'列,存储股票代码
return df['code'].tolist()
# 尝试读取文本文件
else:
with open(file_path, 'r', encoding='utf-8') as f:
return [line.strip() for line in f if line.strip()]
except Exception as e:
print(f"读取股票列表文件出错: {e}")
return []
def get_stock_price_qq(stock_code):
"""使用腾讯财经API获取股票实时价格"""
# 转换股票代码格式
if stock_code.startswith('sh') or stock_code.startswith('sz'):
code = stock_code
else:
# 根据股票代码判断市场
code = f"sh{stock_code}"if stock_code.startswith('6') elsef"sz{stock_code}"
url = f"={code}"
try:
response = requests.get(url)
response.encoding = 'gbk'
data = response.text.split('~')
if len(data) < 2:
returnNone
stock_info = {
"代码": code,
"名称": data[1],
"现价": float(data[3]),
"涨跌幅": float(data[32]),
"今开": float(data[5]),
"最高": float(data[33]),
"最低": float(data[34]),
"昨收": float(data[4]),
"成交量": float(data[6]) / 10000, # 转换为手
"成交额": float(data[37]) , #/ 10000, # 转换为万元
"时间": datetime.now().strftime('%Y-%m-%d %H:%M:%S')
}
return stock_info
except Exception as e:
print(f"获取股票 {code} 数据时出错: {e}")
returnNone
def format_stock_message(stock_data_list):
"""将股票数据格式化为适合手机显示的Markdown格式"""
ifnot stock_data_list:
return"没有获取到股票数据"
current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# 计算涨跌家数
up_count = sum(1for stock in stock_data_list if stock['涨跌幅'] > 0)
down_count = sum(1for stock in stock_data_list if stock['涨跌幅'] < 0)
flat_count = sum(1for stock in stock_data_list if stock['涨跌幅'] == 0)
# 计算整体涨跌情况
total_change = sum(stock['涨跌幅'] for stock in stock_data_list) / len(stock_data_list)
market_trend = "