首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >微信消息推送自由!!

微信消息推送自由!!

作者头像
披头
发布2025-03-31 19:15:20
发布2025-03-31 19:15:20
63100
代码可运行
举报
文章被收录于专栏:datartisandatartisan
运行总次数:0
代码可运行

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

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

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

一、ShowDoc 推送服务概述

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

二、使用方法

(一)获取专属推送地址

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

(二)接口请求

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据科学探究 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、ShowDoc 推送服务概述
  • 二、使用方法
    • (一)获取专属推送地址
    • (二)接口请求
    • (三)查看返回结果
  • 三、使用示例
    • (一)手动推送
    • (二)自动推送天气(Markdown格式)
    • (三)自动推送天气(HTML格式)
    • (四)自动推送股票信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档