使用 Python 实现每日新闻推送功能
本文详细阐述了利用 Python 脚本结合第三方 API 实现每日新闻自动推送至微信的方法。内容涵盖环境安全配置、HTTP 请求处理、数据解析及消息格式化,并深入讲解了如何通过 GitHub Actions 设置定时任务以实现无人值守的自动化运行。
本文详细阐述了利用 Python 脚本结合第三方 API 实现每日新闻自动推送至微信的方法。内容涵盖环境安全配置、HTTP 请求处理、数据解析及消息格式化,并深入讲解了如何通过 GitHub Actions 设置定时任务以实现无人值守的自动化运行。文中还提供了错误处理建议及最佳实践,确保推送服务的稳定性与安全性。

本文详细阐述了利用 Python 脚本结合第三方 API 实现每日新闻自动推送至微信的方法。内容涵盖环境安全配置、HTTP 请求处理、数据解析及消息格式化,并深入讲解了如何通过 GitHub Actions 设置定时任务以实现无人值守的自动化运行。
在开始编写代码之前,需要确保开发环境已安装 Python 3.x 版本,并安装必要的依赖库 requests。
pip install requests
此外,你需要注册 Pushplus 账号以获取推送令牌(Token),这是接收消息的关键凭证。
为了代码的安全性和可维护性,建议将敏感信息(如 Token)存储在环境变量中,而不是硬编码在代码里。
import os
import requests
# 从环境变量获取 Pushplus Token 和 Topic ID
pushplus_token = os.environ.get('PUSHPLUS_TOKEN')
topic = os.environ.get('TOPIC_ID')
# 基础检查:确保必要的环境变量已设置
if not pushplus_token:
raise ValueError("未找到 PUSHPLUS_TOKEN 环境变量")
安全提示:
.env 文件配合 python-dotenv 库进行本地调试,但在部署时务必通过 CI/CD 工具注入环境变量。我们使用公开的免费新闻接口获取每日资讯。该接口支持返回文本或图文格式。
# 定义接口地址
image_url = "https://api.03c3.cn/api/zb" # 图片版本接口
text_url = "https://api.03c3.cn/api/zb?type=text" # 文字版本接口
try:
# 发送 GET 请求,设置超时时间防止阻塞
response = requests.get(text_url, timeout=10)
response.raise_for_status() # 检查 HTTP 状态码
content = response.text
except requests.exceptions.RequestException as e:
print(f"获取新闻失败:{e}")
content = "今日新闻获取失败,请稍后重试。"
Pushplus 支持 HTML 模板,我们可以将新闻内容和配图组合成一条完整的消息。
pushplus_data = {
"token": pushplus_token,
"title": "每天 60 秒读懂世界",
"content": f"{content}<br/><img src='{image_url}' />",
"topic": topic if topic else None, # 可选:指定群组 ID
"template": "html"
}
参数说明:
token: 你的 Pushplus 访问令牌。title: 消息标题,简洁明了。content: 消息正文,支持 HTML 标签,可插入图片。template: 设置为 html 以启用富文本渲染。最后一步是将构造好的 JSON 数据发送给 Pushplus 服务端。
pushplus_url = "https://www.pushplus.plus/send"
try:
res = requests.post(pushplus_url, json=pushplus_data, timeout=10)
if res.status_code == 200:
print("推送成功")
else:
print(f"推送失败:{res.status_code}")
except Exception as e:
print(f"发送异常:{e}")
将上述步骤整合为一个完整的脚本 main.py。
import os
import requests
# 配置部分
pushplus_token = os.environ.get('PUSHPLUS_TOKEN')
topic = os.environ.get('TOPIC_ID')
image_url = "https://api.03c3.cn/api/zb"
text_url = "https://api.03c3.cn/api/zb?type=text"
pushplus_url = "https://www.pushplus.plus/send"
# 执行逻辑
try:
text_response = requests.get(text_url, timeout=10)
text_response.raise_for_status()
content = text_response.text
pushplus_data = {
"token": pushplus_token,
"title": "每天 60 秒读懂世界",
"content": f"{content}<br/><img src='{image_url}' />",
"template": "html"
}
if topic:
pushplus_data["topic"] = topic
requests.post(pushplus_url, json=pushplus_data, timeout=10)
print("新闻推送任务完成")
except Exception as error:
print(f"任务执行出错:{error}")
为了实现每日定时推送,推荐使用 GitHub Actions 作为调度器。无需购买服务器,利用 GitHub 提供的免费 Runner 即可。
在仓库的 .github/workflows/auto_news.yml 文件中添加以下内容:
name: Daily News Push
on:
schedule:
- cron: '30 22 * * *' # UTC 时间,对应北京时间 6:30 AM
workflow_dispatch: # 支持手动触发
env:
PUSHPLUS_TOKEN: ${{ secrets.PUSHPLUS_TOKEN }}
TOPIC_ID: ${{ secrets.TOPIC_ID }}
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v3
with:
python-version: '3.10'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install requests
- name: Run script
run: python main.py
在 GitHub 仓库的 Settings -> Secrets and variables -> Actions 中添加以下密钥:
PUSHPLUS_TOKEN: 你的 Pushplus Token。TOPIC_ID: 你的群组 ID(如果不需要发群则可不填)。cron: '30 22 * * *' 的含义如下:
30: 分钟(第 30 分)22: 小时(UTC 时间 22 点,即北京时间次日 6 点)*: 日期(每天)*: 月份(每月)*: 星期(每周)通过上述方案,你可以低成本地搭建一套稳定的每日新闻推送系统,随时随地掌握最新资讯。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online