搭建民众号自动复兴功用

顺序员爱炫技,写个民众号文章,都想拿点手艺整整【自动复兴】;顺序员爱偷懒,什么都想做个【自动化】,最好一切事变体系都给做了,点点手指头就能够到达目的。

本日的主角是怎样搭建一个民众号自动复兴功用。全部流程以下:

  1. 运用 hapi 开辟 web 顺序,对接微信民众号背景;

  2. 运用 LeanCloud SDK 将文章存储于 LeanCloud 后端;

  3. 吸收用户发送的音讯,猎取关键词,查询文章,并复兴给用户;

  4. 将 web 顺序代码托管于 coding.net;

  5. 运用 LeanEngine 布置 hapi 顺序。

1. hapi

A rich framework for building applications and services

hapi enables developers to focus on writing reusable application logic instead of spending time building infrastructure.

《搭建民众号自动复兴功用》

挑选 hapi,重要被它的 logo 和读音(与 happy 同音)吸收,也重要由于本身爱折腾,老想着用差别的框架写写,重点是看看区分,你也能够看看 stackoverflow 上的帖子

https://stackoverflow.com/que…

在用 hapi 写代码时,有种代码既文档的觉得,更重点的是 hapi 供应了一套 Plugins 计划,一切代码都能够以这类体式格局举行扩大和星散构造,可读性更高,如我将对接微信民众背景的 API 自力为 Plugin 情势:

server.register([{
  register: require('./api/Books'),
  options: {}
}, {
  register: require('./api/Articles'),
  options: {}
},{
  register: require('./api/Blogs'),
  options: {}
}, {
    register: require('./api/User'),
    options: {}
}, {
    register: require('./api/Comments'),
    options: {}
}], {routes: {prefix: '/api'}}, (err) => {
    if (err) {
        throw err;
    }
});

// wechat
server.register([{
  register: require('./wechat/weixin'),
  options: {}
}], (err) => {
    if (err) {
        throw err;
    }
});

如许就能够够将微信民众号背景功用相干的代码自力到wechat/weixin.js中:

const wechat = require('./wechatserver');
const AV = require('leanengine');

const ModelBlog = require('../model/Blogs');
const config = {
  token: '***',
  appid: '***',
  encodingAESKey: '***'
};

exports.register = function (server, options, next) {
    server.route({
        method: ['POST', 'GET'],
        path: '/wechat',
        handler: function (request, reply) {
          wechat(config, request, reply, next, function (req, res, next) {
            // 微信输入信息都在req.weixin上
            var message = req.weixin;
            // 详细逻辑处置惩罚 和 自动复兴
          });
        }
    });
    return next();
};

exports.register.attributes = {
    name: 'wechat-weixin'
};

详细怎样设置开辟 hapi 能够参考官网和 github
https://hapijs.com/
https://github.com/hapijs/hap…

详细和微信背景路由设置就好说了,直接上图:
《搭建民众号自动复兴功用》

2. LeanCloud

LeanCloud 抢先的 BaaS 供应商,为挪动开辟供应强有力的后端支撑

包含云存储、数据剖析、用户关联、音讯推送、立即通讯等当代运用基本模块,满足挪动开辟一切需求

https://leancloud.cn/

为何挑选 LeanCloud

  • 云存储。 重要轻易自动复兴,不须要存储大批数据,完全没必要购置一台【云效劳器】或许【云数据库效劳器】,而且 LeanCloud 供应 10 GB 免费空间,充足前期运用;

  • 数据。支撑恣意范例的 JSON 对象,以及对象之间的关联映照,同时供应完全的增编削查操纵接口,轻易开辟;

  • 统计。供应开箱即用的挪动统计,没准哪天粉丝数目增多了,也能够做一些统计剖析,如剖析剖析哪一个关键词是人人关注的,哪一个话题是人人乐于流传分享的,等等。

  • 全平台 SDK 。搭建民众号背景功用,重要也是折腾折腾,这回用 Javascipt SDK 写写接口,没准哪天想换换口胃,也能够从新试试用 PHP SDK 来重构复写。满足折腾需求。

JavaScript SDK

运用 SDK 重要三个作用:

  • 存储民众号文章基本信息,便于查询

依据微信民众号文档接口须要,重要存储 title, description, picurl, url 四要素;假如为了连系搜刮功用,还须要存储这篇文章的关键词。

《搭建民众号自动复兴功用》

连系 LeanCloud SDK,存储代码就很简朴了:

    var blog = new Blog();
    blog.set('title', request.payload.title);
    blog.set('url', request.payload.url);
    blog.set('desc', request.payload.desc);
    blog.set('picurl', request.payload.picurl);
    blog.set('tags', request.payload.tags);
    blog.save().then(function (blog) {
        // 胜利保留以后,实行其他逻辑.
        console.log('胜利保留:New object created with objectId: ' + blog.id);
        reply(blog);
    }, function (error) {
        // 失利以后实行其他逻辑
        console.log('Failed to create new object, with error message: ' + error.message);
        return reply(Boom.wrap(error, 'error'));
    });
  • 猎取最新的一篇文章;
    当一个新粉丝初次进入民众号,或许发了一些临时没处置惩罚的信息时,能够直接复兴最新的一篇文章:

    const query = new AV.Query(Blog);
    query.descending('createdAt');
    
    query.first().then(function (data) {
      res.reply([
          {
              title: data.get('title'),
              description: data.get('desc'),
              picurl: data.get('picurl'),
              url: data.get('url')
          }
      ]);
    }, function (error) {
    });
  • 经由过程【关键词】查询相干文章。

搜刮【关键词】,重要搜刮 title, description, tags等:

    const titleQuery = new AV.Query(Blog)
    titleQuery.contains('title', words);
    
    const descQuery = new AV.Query(Blog)
    descQuery.contains('desc', words);
    
    const tagsQuery = new AV.Query(Blog)
    tagsQuery.contains('tags', words);
    
    const wordsQuery = AV.Query.or(titleQuery, descQuery, tagsQuery);
    
    wordsQuery.descending('createdAt');
    wordsQuery.limit(5);
    wordsQuery.find().then(function (results) {
        res(results);
    }, function (error) {
        res([]);
    });

末了能够将查询效果转成【图文信息】复兴

ModelBlog.search(message.Content, results => {
    if (results.length === 0) {
        res.reply({
            content: message.Content,
            type: 'text'
        });
    } else {
        let data = [];
        results.forEach(function(v) {
            let wrap = {};

            wrap.title = v.get('title');
            wrap.description = v.get('desc');
            wrap.picurl = v.get('picurl');
            wrap.url = v.get('url');

            data.push(wrap);
        });
        res.reply(data);
    }
});

《搭建民众号自动复兴功用》

固然,依据状况须要,假如在找不到查询效果时,我们能够内建一些【智能谈天】、【生涯信息查询】等等。

3. LeanEngine

云引擎(LeanEngine)是 LeanCloud 推出的效劳端托管平台。供应了多种运转环境(Node.js, Python 等)来运转效劳端顺序。你只须要供应效劳端的营业逻辑(网站或云函数等),而效劳端的多实例负载平衡,不中缀效劳的腻滑晋级等都由云引擎供应支撑。

当写了效劳端代码后,总要有个处所托管。关于大网站或许项目来讲,找一家如阿里云、腾讯云等云效劳平台, 但关于个人只是想简朴的搭建一个民众号治理——自动复兴功用,究竟有些牛鼎烹鸡了;LeanEngine 连系 LeanCloud 运用相得映彰,而且 LeanEngine 能够依据须要晋级扩大。
《搭建民众号自动复兴功用》

布置

布置重要有两种门路:命令行布置和 Git 布置

  • 命令行布置

只要在项目的根目录运转:

lean deploy

运用命令行东西能够轻易的布置、宣布运用,检察运用状况,检察日记,以至举行多运用布置。详细可参考网站文档:
https://leancloud.cn/docs/lea…运用

  • Git 布置

代码都有一个版本掌握,为了合营 LeanEngine 运用,我将代码托管到 https://coding.net/ 举行源码的版本治理,只要在 LeanCloud 背景一键布置即可,详细可参考网站文档:

https://leancloud.cn/docs/lea…布置

总结

写代码太无聊了,偶然折腾折腾挺好,怎样将差别的手艺和东西,以及第三方效劳连系在一起,做一些事变也挺好的。

  • LeanCloud 担任背景数据存储;

  • LeanEngine 担任效劳端托管平台,来运转效劳端顺序;

  • hapi 担任效劳端 web 顺序开辟;

  • coding.net 担任源码的版本掌握治理;

下一步要做:

  1. 搭建一个录入微信文章的背景;

  2. 怎样剖析和加解密微信的音讯体;

coding01 期待您关注

《搭建民众号自动复兴功用》

    原文作者:Coding01
    原文地址: https://segmentfault.com/a/1190000010312171
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞