想要每天定时发布公众号图文?方法在这
title: 结尾推荐文章
最近,我在公众号上注意到有些账号每天发布的内容非常相似,就像是新闻简报一样,如下图所示,这让我好奇,这些内容是不是通过某种自动化方式发布的呢?
带着这些疑问,我满怀好奇地打开了微信公众号的开发文档。令人高兴的是,文档中详细介绍了一些用于图文创建和发布的接口功能。
有了这些接口,实现您想要的功能就会变得轻松许多啦。废话不多说,跟着我教程一起来实现吧。
分析实现原理
- 可以通过使用现有的API接口或自己动手编写爬虫程序来收集你感兴趣的内容哦。
- 然后呢,可以将这些内容转换成HTML格式,让它们看起来更加美观易读。
- 接下来就是根据微信公众号开发文档,编写一些接口,实现自动创建图文和发送图文功能。
- 最后一步就是设置定时任务,让你的精彩图文能够按时自动发布出去!
代码实现
获取最新热点
为了更高效地完成任务,我选择利用一些现有的API接口。今天我想分享一个我经常使用且非常实用的免费API资源。这个网站提供了多种类型的接口服务,覆盖了生活信息、新闻资讯等多个领域,真的非常全面且方便!
我们采用该网址中的每日早报接口,该接口会返回15条全球新闻速报,每日微语数据。而且该接口是免费,每天有100次的请求,足够我们使用了。
使用方式也很简单,先个人中心->token管理中创建一个token
,如下图所示:
有了token,就可以编写函数调用该接口了。关键代码如下:
import requests
url = "https://v3.alapi.cn/api/zaobao"
payload = {
"token": "请在token管理生成token",
"format": "json"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
创建一个微信公众号工具类
利用Python语言编写一个微信公众号工具类,功能包括获取access_token
、上传图片、创建图文和发布图文功能。
- 操作微信公众号所有功能前提,先要获取
access_token
,如下是获取access_token
的关键代码
def get_access_token(self, force_refresh=False):
"""获取微信access_token,带缓存机制"""
# 如果token未过期且不需要强制刷新,则返回现有token
if not force_refresh and self.access_token and time.time() < self.token_expires:
return self.access_token
url = "https://api.weixin.qq.com/cgi-bin/token"
params = {
"grant_type": "client_credential",
"appid": self.appid,
"secret": self.appsecret
}
try:
response = requests.get(url, params=params)
response.raise_for_status()
data = response.json()
if "access_token" in data:
self.access_token = data["access_token"]
# 提前5分钟过期,防止边界情况
self.token_expires = time.time() + data["expires_in"] - 300
return self.access_token
else:
raise Exception(f"获取access_token失败: {data}")
except Exception as e:
raise Exception(f"获取access_token异常: {str(e)}")
获取
access_token
需要在微信公众号后台,添加白名单的。设置如下图
- 创建公众号图文信息,需要封面图片,如下是把封面图上传到公众号的素材库中,上传成功后会返回两个参数,一个是
media_id
,另外一个是url
。
def upload_image(self, image_path, is_online=False):
"""上传永久图片素材,返回media_id和url"""
url = "https://api.weixin.qq.com/cgi-bin/material/add_material"
params = {
"access_token": self.get_access_token(),
"type": "image"
}
try:
if is_online:
# 处理在线图片
response = requests.get(image_path)
response.raise_for_status()
files = {"media": (Path(image_path).name, response.content)}
else:
# 处理本地图片
with open(image_path, "rb") as f:
files = {"media": (Path(image_path).name, f)}
response = requests.post(url, params=params, files=files)
response.raise_for_status()
data = response.json()
if "media_id" in data:
return {
"media_id": data["media_id"],
"url": data.get("url", "")
}
else:
raise Exception(f"上传图片失败: {data}")
except Exception as e:
raise Exception(f"上传图片异常: {str(e)}")
- 有了封面图片,我们就可以创建图文草稿。以下是创建图文的关键代码:
def create_draft(self, articles):
"""创建图文草稿"""
url = "https://api.weixin.qq.com/cgi-bin/draft/add"
params = {
"access_token": self.get_access_token()
}
payload = {
"articles": articles
}
try:
response = requests.post(
url,
params=params,
data=json.dumps(payload, ensure_ascii=False).encode("utf-8")
)
response.raise_for_status()
data = response.json()
if data.get("errcode", 0) == 0:
return data["media_id"]
else:
raise Exception(f"创建草稿失败: {data}")
except Exception as e:
raise Exception(f"创建草稿异常: {str(e)}")
- 创建好图文草稿,我们就可以编写发布图文草稿的接口了。以下是关键代码
def public_article(self, media_id):
"""发布草稿为正式文章"""
url = "https://api.weixin.qq.com/cgi-bin/material/publish_draft"
params = {
"access_token": self.get_access_token()
}
payload = {
"media_id": media_id
}
try:
response = requests.post(
url,
params=params,
data=payload
)
response.raise_for_status()
data = response.json()
except requests.exceptions.RequestException as e:
raise Exception(f"发布草稿异常: {str(e)}")
渲染成HMTL内容
在之前的文章介绍过一款MD2CARD
的软件,我们可以利用它这些好看的卡片样式。选择一款自己喜欢的样式,把它导出为html
格式,如下图所示:
然后,编写一个把工具类,把获取的内容渲染成好看的样式。关键代码如下:
# 新增模板渲染模块
class TemplateRenderer:
def __init__(self):
# 设置模板目录
self.env = Environment(
loader=FileSystemLoader("templates"),
autoescape=True,
trim_blocks=True,
lstrip_blocks=True
)
def render_news(self, data: dict) -> str:
"""渲染新闻模板"""
template = self.env.get_template("template_2.html")
return template.render(**data)
项目演示
本项目会全部开源的,感兴趣的小伙伴可以关注后私信回复“脚本链接”即可获取。
该项目的目录结构如下:
.
├── main.py
├── templates
│ ├── card_template.html
│ ├── template_1.html
│ └── template_2.html
└── utils
├── WeChatOfficialAccount.py
├── __init__.py
└── zaobao.py
使用之前,在该项目根目录添加一个.env
文件添加微信公众号的APP_ID
和APP_SECRET
,还有ALAPI_TOKEN
等信息,内容如下:
APP_ID=""
APP_SECRET=""
ALAPI_TOKEN =""r
执行如下命令:
python3 main.py
执行成功后,会输出如下结果
2025-04-26 17:17:25,325 - INFO - 成功获取新的 access_token
2025-04-26 17:17:26,994 - INFO - 图片上传成功,media_id: SZ1CVdaOa4k4y5g_OyoRPYl41CTXDs6WIzf3f9f3AyHbNfzo6xaD_zYafsCSf_Zg
2025-04-26 17:17:27,000 - INFO - 使用缓存的 access_token
2025-04-26 17:17:29,372 - INFO - 草稿创建成功,media_id: SZ1CVdaOa4k4y5g_OyoRPeq0Lvh6C8-uh-uF1vn5btYuURZyEjyx9HJ7x2Oowb7M
然后,登录公众号后台会看出新增了一个图文信息。如下: