微信消息推送自由!!

2025-10-02 01:33:58

在数字化时代,及时获取信息至关重要。而微信则是当下最重要的信息获取渠道。解锁微信消息推送服务,将给我们带来极大的便利。

本文将给大家解锁一款微信消息推送工具 ShowdDoc。

ShowDoc 推送服务作为一款强大工具,能轻松实现从服务器向手机推送消息,为服务器告警、程序监控通知等场景提供便利。本文将深入介绍其使用方法,并分享多个实用示例。

一、ShowDoc 推送服务概述ShowDoc 推送服务是 ShowDoc 旗下独立工具,它最大的优势在于使用简单、开箱可用,无需复杂配置。而且,它承诺长期维护且持续免费,不限制消息数量和请求数,还极具编程拓展性,能满足多样化需求。

二、使用方法(一)获取专属推送地址打开推送服务首页 https://push.showdoc.com.cn (建议电脑端访问),切换到右上角“推送”导航菜单,就能看到专属推送地址。这个地址是后续推送消息的关键入口。

(二)接口请求请求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格式组织内容为例。

代码语言:javascript代码运行次数:0运行复制import requests

import time

# 获取专属推送地址

push_url = "[你的专属推送地址]"

# 天气API,以和风天气为例

weather_api = "https://devapi.qweather.com/v7/weather/now?location=101010100&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 = "https://devapi.qweather.com/v7/weather/now?location=101010100&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"""

今日天气

今日天气

当前温度:{temperature}℃

天气状况:{weather_desc}

"""

# 构造请求参数

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 用于存储配置信息,格式如下:

代码语言:javascript代码运行次数:0运行复制{

"showdoc_api": "[你的专属推送地址]",

"input_file": "stock_list.csv",

"update_interval": 300

}

stock_list.csv 用于存储股票列表信息,格式如下:

代码语言:javascript代码运行次数:0运行复制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"https://qt.gtimg.cn/q={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 = "📈"if total_change > 0else"📉"if total_change < 0else"➡️"

content = f"""## 股市行情速览 {market_trend}

**更新时间:** {current_time}

### 市场概况

`上涨 {up_count}` 🔴 | `下跌 {down_count}` 🟢 | `平盘 {flat_count}` ⚪

平均涨跌:{total_change:+.2f}%

### 行情 TOP {min(len(stock_data_list), 10)}

"""

# 按涨跌幅排序

sorted_stocks = sorted(stock_data_list, key=lambda x: x['涨跌幅'], reverse=True)

# 只显示前10只股票的详细信息

for stock in sorted_stocks[:10]:

# 设置涨跌颜色和箭头

if stock['涨跌幅'] > 0:

trend_icon = "📈"

trend_color = "🔴"

elif stock['涨跌幅'] < 0:

trend_icon = "📉"

trend_color = "🟢"

else:

trend_icon = "➡️"

trend_color = "⚪"

content += f"""

**{stock['名称']}** ({stock['代码']}) {trend_color}

价格:`{stock['现价']:.2f}` | 涨跌:`{stock['涨跌幅']:+.2f}%`

最高:`{stock['最高']:.2f}` | 最低:`{stock['最低']:.2f}`

成交:`{stock['成交量']:.2f}手` / `{stock['成交额']:.0f}万`

---"""

# 如果还有更多股票,显示简要信息

if len(sorted_stocks) > 10:

content += "\n### 其他股票简况\n"

for stock in sorted_stocks[10:]:

if stock['涨跌幅'] > 0:

trend_color = "🔴"

elif stock['涨跌幅'] < 0:

trend_color = "🟢"

else:

trend_color = "⚪"

content += f"`{stock['名称']}` {trend_color}`{stock['涨跌幅']:+.2f}%` "

# content += """

# ### 说明

# - 🔴 上涨 | 🟢 下跌 | ⚪ 平盘

# - 数据来源:腾讯财经

# - 仅供参考,实际交易以交易所数据为准

# """

return content

def push_to_showdoc(title, content, api_url):

"""推送消息到showdoc"""

try:

data = {

"title": title,

"content": content

}

response = requests.post(api_url, json=data)

response.raise_for_status()

return response.json()

except Exception as e:

print(f"推送消息时出错: {e}")

returnNone

if __name__ == "__main__":

# 读取配置

config = load_config()

ifnot config:

print("加载配置失败,程序退出")

exit()

# 读取股票列表

stock_codes = read_stock_list(config['input_file'])

ifnot stock_codes:

print("没有找到股票列表或列表为空")

exit()

print(f"共读取到 {len(stock_codes)} 只股票")

whileTrue:

try:

# 获取股票数据

stock_data_list = []

for code in stock_codes:

stock_info = get_stock_price_qq(code)

if stock_info:

stock_data_list.append(stock_info)

print(f"已获取: {stock_info['名称']} ({stock_info['代码']})")

time.sleep(0.5)

if stock_data_list:

# 格式化消息

title = f"股票实时行情 {datetime.now().strftime('%H:%M')}"

content = format_stock_message(stock_data_list)

# 推送到ShowDoc

result = push_to_showdoc(title, content, config['showdoc_api'])

if result:

print(f"[{datetime.now()}] 数据推送成功!")

else:

print(f"[{datetime.now()}] 数据推送失败!")

else:

print(f"[{datetime.now()}] 没有获取到任何股票数据")

# 等待下次更新

print(f"等待 {config['update_interval']} 秒后更新...")

time.sleep(config['update_interval'])

except KeyboardInterrupt:

print("\n程序已停止运行")

break

except Exception as e:

print(f"运行出错: {e}")

time.sleep(60) # 出错后等待1分钟再重试

ShowDoc 推送服务功能强大且灵活,无论是手动推送简单消息,还是通过编程实现自动推送复杂信息,都能轻松应对。希望这些使用方法和示例能帮助你更好地利用该服务,提升信息获取和传递的效率。