小程序云开发之–微信公众号文章采集篇

相信不少小伙伴都有想过做一个属于自己的小程序,又苦于没有服务器以及备案域名、网站ssl证书等,微信小程序作为前端后端就有很多了诸如Spring全家桶等小程序能接收到后端返回的值需要小程序内添加合法域名(域名备案https协议)

这里直接进入教学

公众号中有专门的接口(也有专门的文档) 那么如何采集小程序的文章来做到为我所用呢?

第一步: 获取access_token

通过文档可以看出 想要获取这个access_token需要以下三个参数

服务器接收微信公众号文本消息python_公众号

其中grant_type的值为client_credential用于获取access_token

appidsecret在公众号内可以找到

服务器接收微信公众号文本消息python_数据_02

完成以上配置之后就可以采集文章了,

我们可以手动访问获取token或者postman

服务器接收微信公众号文本消息python_数据_03

有了token之后采集文章就很方便了 下面开始操作

从官方文档中可以看到提供的接口还是挺多的

服务器接收微信公众号文本消息python_数据库_04

这里拿草稿箱做示范吧 其他的像图文、视频等素材的采集方法都是一样的

服务器接收微信公众号文本消息python_数据库_05

第一个token我们已经有了接下来就是offsetcount了 最后一个参数可以不要

获取文章数据

获取到素材之后 打印结果

服务器接收微信公众号文本消息python_数据库_06

说明我的草稿箱里有三条数据 确实只有三条

服务器接收微信公众号文本消息python_公众号_07

文章数据的处理

我们需要把自己需要的参数获取然后添加进数据库

注意⚠️这里有个问题就是如果这个文章已经采集过了那么我们就跳过,如果全部数据都存在那么打印 文章已经存在

最后就是把数据库没有的数据放入到数据库中

以下是测试结果

服务器接收微信公众号文本消息python_数据_08

如果全部数据都存在

服务器接收微信公众号文本消息python_数据库_09

博客小程序:万神资源小栈
放入部分代码:

/**
 * 获取公众号文章信息
 * @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
    }
  });

}

以上就是所有内容了 更多精彩内容请关注我~