小程序云开发之–微信公众号文章采集篇
相信不少小伙伴都有想过做一个属于自己的小程序,又苦于没有服务器以及备案域名、网站ssl证书等,微信小程序作为前端
后端就有很多了诸如Spring全家桶
等小程序能接收到后端返回的值需要小程序内添加合法域名(域名备案
和https协议
)
这里直接进入教学
公众号中有专门的接口(也有专门的文档) 那么如何采集小程序的文章来做到为我所用呢?
第一步: 获取access_token
通过文档可以看出 想要获取这个access_token需要以下三个参数
其中grant_type
的值为client_credential
用于获取access_token
appid
和secret
在公众号内可以找到
完成以上配置之后就可以采集文章了,
我们可以手动访问获取token或者postman
等
有了token之后采集文章就很方便了 下面开始操作
从官方文档中可以看到提供的接口还是挺多的
这里拿草稿箱做示范吧 其他的像图文、视频等素材的采集方法都是一样的
第一个token我们已经有了接下来就是offset
和count
了 最后一个参数可以不要
获取文章数据
获取到素材之后 打印结果
说明我的草稿箱里有三条数据 确实只有三条
文章数据的处理
我们需要把自己需要的参数获取然后添加进数据库
注意⚠️
这里有个问题就是如果这个文章已经采集过了那么我们就跳过,如果全部数据都存在那么打印 文章已经存在
最后就是把数据库没有的数据放入到数据库中
以下是测试结果
如果全部数据都存在
博客小程序:万神资源小栈
放入部分代码:
/**
* 获取公众号文章信息
* @param {*} accessToken
*/
async function getWechatPosts(accessToken, offset, count) {
let url = `https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=${accessToken}`
var options = {
method: 'POST',
json: true,
uri: url,
body: {
"type": "news",
"offset": offset,
"count": count
}
}
const result = await rp(options)
let rbody = (typeof result === 'object') ? result : JSON.parse(result);
return rbody;
}
/**
* 同步文章的小程序码
*/
async function syncPostQrCode() {
let configData = await getConfigInfo("syncPostQrCode");
if (configData == null) {
console.info("未获取相应的配置")
return;
}
console.info(configData)
let page = parseInt(configData.value.currentOffset);
let maxCount = parseInt(configData.value.maxSyncCount);
let isContinue = true;
while (isContinue) {
let posts = await db.collection('mini_posts')
.orderBy('timestamp', 'asc')
.skip(page * 10)
.limit(10)
.field({
_id: true,
qrCode: true,
timestamp: true
}).get()
console.info(posts)
if (posts.data.length == 0) {
isContinue = false;
break;
}
for (var index in posts.data) {
if (posts.data[index].qrCode != null) {
continue
}
let scene = 'timestamp=' + posts.data[index].timestamp;
let result = await cloud.openapi.wxacode.getUnlimited({
scene: scene,
page: 'pages/detail/detail'
})
if (result.errCode === 0) {
const upload = await cloud.uploadFile({
cloudPath: posts.data[index]._id + '.png',
fileContent: result.buffer,
})
await db.collection("mini_posts").doc(posts.data[index]._id).update({
data: {
qrCode: upload.fileID
}
});
}
}
if ((page - parseInt(configData.value.currentOffset)) * 10 > maxCount) {
isContinue = false;
}
else {
page++
}
}
let data = { currentOffset: page - 1, maxSyncCount: 100 }
await db.collection("mini_config").doc(configData._id).update({
data: {
value: data
}
});
}
以上就是所有内容了 更多精彩内容请关注我~