随着 crush_v3.0 版本发布,一直在思考通过何种方式,将漏洞更新信息推送给有需要,但是无法在本地进行项目搭建的人,于是有了这篇文章。
总体流程
之所以称之为半自动化推送,是因为能够通过脚本,利用 API 自动化完成文章内容编辑,新建草稿,封面配图等步骤,但是无法实现文章发表,只能进行文章发布(发布的文章只有自己能看到),因此,使用脚本将草稿写好后,需要手动到 app 或者网页端进行文章推送。
1、利用 APPKEY 和 APPSECRET 获取 ACCESS TOKEN
2、新增永久素材,用作封面配图
3、新建草稿
下面分别介绍每一步的实现方法。
实现方法
获取 access token
到设置与开发--基本配置处,获取 appid 和 appsecret:
到开发者文档,查看 api 调用方式。
根据接口调用说明,来获取 access_token:
import requests
import json
response = requests.get("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=xxx&secret=xxx")
res = response.json()
token = res.get("access_token")
可以利用上面的脚本来进行获取:
新增永久素材
这里上传一个永久素材,用作文章的封面。
这里利用 postman 实现。 url 为 https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=xxxxxx&type=image ,添加图片,会返回一个 media_id。
新建草稿
同样根据官方文档,填写相应配置即可。
thumb_media_id 的值即为上一步获取到的内容。 最终效果如下,通过脚本即可实现草稿的编写,后续手动发表即可。
踩雷
1、access_token 有时限,因此每次推送需要获取新的 token
2、在编写脚本时,发现 json 格式或者普通文本格式里的换行符等,到草稿中均无法被正确解析,需要利用 html 标签来实现换行(br)
3、如果内容中含有中文字符,会默认进行 unicode 编码,需要在代码中进行处理
代码
import requests
import json
response = requests.get("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=xxx&secret=xxx")
res = response.json()
token = res.get("access_token")
print(token)
def create_draft(access_token, title, content, media_id):
url ='https://api.weixin.qq.com/cgi-bin/draft/add?access_token={}'.format(access_token)
data ={
"articles":[
{
"title": title,
"content": content,
"thumb_media_id": media_id,
"need_open_comment":0,
"only_fans_can_comment":0
}
]
}
headers ={'Content-Type':'application/json'}
response = requests.post(url, data=json.dumps(data, ensure_ascii=False).encode('utf-8'), headers=headers)
rt_data = response.json()
print(rt_data)
with open("wechat.log","r")as f:
content = f.read()
content = content.replace("n","<br>")
create_draft(token,"test title", content,"xxx")
原文始发于微信公众号(Crush Sec):半自动化实现公众号文章推送
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论