背景
准备工具
这里python实现,也可以通过Java、php实现
一台云服务器,并且已经安装Python3;(本地电脑是不可以的,必须要服务器)
个人公众号;
详细步骤
安装werobot
sudo pip3 install werobot
1.云服务器:启动微信公众号服务
### autoResponse.py
# 最简单的Hello World, 会给收到的每一条信息回复 Hello World
import werobot
robot = werobot.WeRoBot(token='tokenhere')
@robot.handler
def hello(message):
return 'Hello World!'
# 让服务器监听在 0.0.0.0:80
robot.config['HOST'] = '0.0.0.0'
robot.config['PORT'] = 80
robot.run()
启动成功如图所示
2.1微信公众号:后台配置Token
后台配置token,就是上文启动微信公众号后台服务的token,配置如果如下图所示:
2.2微信公众号:启用服务器配置
开发者密码(AppSecret)
微信公众后台配置完毕,现在就正式开始编辑推送文章了
3云服务器: 编辑python代码,推送文章到图文素材库
##public/upload_news.py
# -*- coding: utf-8 -*-
"""
推送文章到微信公众号
"""
from datetime import datetime ,timedelta
import time
import urllib
from werobot import WeRoBot
robot = WeRoBot()
robot.config["APP_ID"] = "wxf88a0d649xxxxx" ##替换成自己公众号
robot.config["APP_SECRET"] = "d74f349cfdbdxxxxxx" ##替换成自己公众号
client = robot.client
token = client.grant_token()
print(token)
print('*'*30)
def get_img_media_id(img_url,img_file_name):
"""
* 上传临时素菜
* 1、临时素材media_id是可复用的。
* 2、媒体文件在微信后台保存时间为3天,即3天后media_id失效。
* 3、上传临时素材的格式、大小限制与公众平台官网一致。
"""
resource = urllib.request.urlopen(img_url)
f_name = img_file_name
with open(f_name, 'wb') as f:
f.write(resource.read())
#media_json = client.upload_media("image", open(r"./img_media.jpg", "rb")) ## 临时素材
media_json = client.upload_permanent_media("image", open(r"./img_media.jpg", "rb")) ##永久素材
media_id = media_json['media_id']
media_url = media_json['url']
print('微信素材id:',media_id)
return media_id
def upload_media_news(string_date,title,content):
"""
上传到微信公众号素材
"""
string_date = datetime.strptime(string_date, '%Y%m%d')
TITLE = title
img_url = 'https://www.baidu.com/img/flexible/logo/pc/result@2.png'
img_file_name = 'img_media.jpg'
media_id = get_img_media_id(img_url,img_file_name)
THUMB_MEDIA_ID = media_id
AUTHOR = 'SQL数据分析'
show_cover_pic = 1
CONTENT = content + string_date.strftime('%Y年%m月%d日')
CONTENT_SOURCE_URL = 'https://www.baidu.com/'
articles = [{
"title": TITLE,
"thumb_media_id": THUMB_MEDIA_ID,
"author": AUTHOR,
"digest": '',
"show_cover_pic": 1,
"content": CONTENT,
"content_source_url": CONTENT_SOURCE_URL
}
# 若新增的是多图文素材,则此处应有几段articles结构,最多8段
]
news_json = client.add_news(articles)
print(news_json)
media_id = news_json['media_id']
print('media_id',media_id)
return news_json
def run(string_date):
title = 'SQL数据分析-自动采集素材文章'
content ='<p>SQL数据分析-这是内容</p>'
news_json = upload_media_news(string_date,title,content)
print('successful')
if __name__ == "__main__":
start_time = time.time() # 开始时间
today = datetime.today()
string_date = today.strftime('%Y%m%d')
try:
run(string_date)
except:
run(string_date)
end_time = time.time() #结束时间
print("程序耗时%f秒." % (end_time - start_time))
新窗口,运行python文件;
结果展示
云服务器结果
微信公众号后台结果
图文素材内容:
后续可以自行多看文档
文档地址:WeRoBot — WeRoBot 1.13.1 文档
交流群
关注公众号:SQL数据分析,可以获取其他精彩内容
由于微信群二维码7天失效,请添加个人微信(base64解密)后再入群:a2VtaXN0ZXAKIA==
群发环节:
由于个人公众号无群发权限,导致无法推送,后续可以在订阅号助手,手动点击推送;
认证的个人公众号、企业号有推送权限,可以自动推送成功;
QA环节
Q:OSError: [Errno 98] Address already in use 代表了端口被占用
A: 端口占用
OSError: [Errno 98] Address already in use 代表了端口被占用
端口映射
将8083端口转发到80端口
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8083
Q:werobot.client.ClientException: 40164: invalid ip XXX, not in whitelist rid: 604cab22-73c30198-278b2150
A: 需要再微信公众号后台,将服务器地址,添加到白名单配置中
本文分享自微信公众号 - SQL数据分析(dianwu_dw)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。