引言:
在这篇文章中,我们将探讨如何使用 ALAPI 平台获取每日新闻早报,并通过 WPUSH 消息推送平台将新闻内容推送给用户。此外,我们还会介绍如何使用 GitHub Actions 来自动化整个流程,实现每日定时推送。
代码已开源:https://github.com/WPUSH/wpush_zaobao
平台介绍
ALAPI:是一个免费的API接口平台,里面集成了上百个免费API接口
WPUSH: 一个聚合消息推送平台,可以推送微信、短信、邮件、飞书、钉钉等消息
Github Actions: 自动化CI工具,可以用这个实现自动化构建、定时任务等
每日早报新闻获取
我们首先要从 ALAPI 获取到每天60s早报新闻的数据,ALAPI的接口文档:https://alapi.cn/api/view/93, 请求接口需要获取到 ALAPI的token, 注册好账号后在后台可以看到token秘钥
获取token之后编写代码:
# 获取早报信息
def get_news():
alapi_token = os.getenv('alapi_token')
url = 'https://v2.alapi.cn/api/zaobao'
params = {'token': alapi_token}
response = requests.get(url, params=params)
data = response.json()
if data.get('code') == 200:
return data.get('data')
else:
print(data.get("msg"))
return None
WPUSH消息推送
从 ALAPI 接口获取到正确的早报新闻消息之后就可以通过 WPUSH 平台来推送消息了,
推送消息需要获取到 wpush 平台的apikey ,获取秘钥
获取到apikey之后编写推送消息代码
# 推送消息
def push_message(title, content):
wpush_apikey = os.getenv('wpush_apikey')
url = 'https://api.wpush.cn/api/v1/send'
channel = os.getenv("channel", "wechat")
if channel not in ["wechat", "sms", "mail", "feishu", "dingtalk", "webhook", "wechat_work"]:
channel = "wechat"
params = {'apikey': wpush_apikey, 'title': title, 'content': content, 'channel': channel}
response = requests.post(url, data=params)
data = response.json()
if data.get("code") == 0:
return True
else:
print(data.get("message"))
return False
完整代码
import os
import requests
# 获取早报信息
def get_news():
alapi_token = os.getenv('alapi_token')
url = 'https://v2.alapi.cn/api/zaobao'
params = {'token': alapi_token}
response = requests.get(url, params=params)
data = response.json()
if data.get('code') == 200:
return data.get('data')
else:
print(data.get("msg"))
return None
# 推送消息
def push_message(title, content):
wpush_apikey = os.getenv('wpush_apikey')
url = 'https://api.wpush.cn/api/v1/send'
channel = os.getenv("channel", "wechat")
if channel not in ["wechat", "sms", "mail", "feishu", "dingtalk", "webhook", "wechat_work"]:
channel = "wechat"
params = {'apikey': wpush_apikey, 'title': title, 'content': content, 'channel': channel}
response = requests.post(url, data=params)
data = response.json()
if data.get("code") == 0:
return True
else:
print(data.get("message"))
return False
# 主函数
def main():
if not os.getenv('alapi_token') or not os.getenv('wpush_apikey'):
print('请设置alapi_token和wpush_apikey环境变量!')
return
send_type = os.getenv("type", "image")
if send_type not in ["image", "text"]:
send_type = "image"
news_data = get_news()
if news_data:
date = news_data.get('date')
news_list = news_data.get('news')
image_url = news_data.get('image')
title = '每日60秒早报'
content = f'### 日期:{date}\n\n'
if send_type == "image":
content += f'![image]({image_url})'
else:
content += '#### 新闻:\n'
for news in news_list:
content += f'- {news}\n'
if push_message(title, content):
print('消息推送成功!')
else:
print('消息推送失败!')
else:
print('获取早报信息失败!')
if __name__ == '__main__':
main()
有了完整代码之后,可以通过 github 的 action 定时推送消息
github actions 代码:
name: 每日早报定时推送
on:
workflow_dispatch:
schedule:
- cron: "0 8 * * *" # 每天早上8点推送
jobs:
push:
runs-on: ubuntu-latest
steps:
- name: 拉取代码
uses: actions/checkout@v3
- name: 安装python环境
uses: actions/setup-python@v3
- name: 安装依赖
run: |
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- name: 开始推送
env:
wpush_apikey: ${{ secrets.WPUSH_APIKEY }} # wpush apikey
alapi_token: ${{ secrets.ALAPI_TOKEN }}
type: ${{ secrets.TYPE }}
channel: ${{ secrets.CHANNEL }}
run: |
python main.py
完整部署代码已在 github 开源,开源地址:https://github.com/WPUSH/wpush_zaobao