微信消息推送自由!!

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

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

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

一、ShowDoc 推送服务概述

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

二、使用方法

(一)获取专属推送地址

打开推送服务首页 (建议电脑端访问),切换到右上角“推送”导航菜单,就能看到专属推送地址。这个地址是后续推送消息的关键入口。

(二)接口请求

  1. 请求URL:即专属推送地址。
  2. 请求方式:支持GET和POST。选择哪种方式取决于具体应用场景,一般来说,GET适合简单数据传递,POST更适合传递大量数据或敏感信息。
  3. 参数设置
    • title:必填,字符串类型,用于设置推送消息的标题。
    • content:必填,字符串类型,支持文本、Markdown和HTML格式,用于设置推送消息的内容。

(三)查看返回结果

  1. 成功返回示例:当请求成功时,返回数据类似{"error_code": 0,"error_message": "ok"},其中error_code为0表示请求成功。
  2. 失败返回示例:若请求失败,如{"error_code": 10103,"error_message": "url或token不正确"} ,根据error_message提示的错误信息,可排查问题。

三、使用示例

(一)手动推送

手动推送适用于即时性、临时性的消息通知。例如,在开发过程中,想要快速告知团队成员某个功能模块完成测试。

  1. 确定专属推送地址。
  2. 构造请求数据,假设使用GET请求,在浏览器地址栏输入:[你的专属推送地址]?title=功能模块测试完成&content=用户登录模块已完成测试,目前运行稳定。回车后,绑定的微信就能收到消息。

(二)自动推送天气(Markdown格式)

借助Python和相关天气API,可实现自动推送天气信息。这里以requests库获取天气数据、Markdown格式组织内容为例。

代码语言: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']
            # 构造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 用于存储配置信息,格式如下:

代码语言: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"={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 = "