微信开发-个人订阅号开发爬坑(1)

*mp:mp.weixin.qq.com的缩写

这不是我的首次微信开发。

在此之前,我曾经使用PHP实现过公众号的一些简单的查询功能,如天气查询、手机归属地查询、音乐搜索等。其实这些功能都大同小异,根本区别其实就是后端向不同公共API进行查询。恰逢最近主要使用Node进行开发,因此在这次的订阅号开发中,后端自然选用Node。

本次开发对象是一个二手车城的公众号,因为本身商业模式是平台化的,因此公众号的开发也面向平台化发展。这次的开发着重是做一个交易信息收集,并且自动整理成图文消息的功能。用户通过向公众号发布交易信息,例如二手车出售、求购之类的,一般如果不使用开发者开发选项,需要运营人员在mp上的消息管理中去采集,然后再到图文消息素材里面做素材,整理后群发。如果这些事情能够通过代码去完成,那会是一件很舒服的事,从此可以多出很多摸鱼的时间。

微信开发不困难,但是其中有很多坑是因为开发者不熟悉微信开发的要求而导致的,本文对于你的代码可能没有帮助,但也许能帮你避开微信开发中的一些模糊的问题。

我先在服务器中使用express简单地搭建起了一个响应服务。通过微信的收发验证后,我开始处理信息体这个问题。

如你所见,微信使用的信息体格式是xml。在我平时的开发里面我一般倾向于使用json,因为一般像做web的话,前后端分离的情况下,使用json会比使用xml有一些优势,最突出的一点就是,JS处理json比处理xml要简单。

因为xml的格式要求比较严格,可以用正则匹配去对信息体进行整理。但后面我发现一个更简单的方法,就是使用node-webot这个框架,它会帮你把信息体自动解析成对象,这样需要你做的事情就少了很多。同时它也有reply方法可以免于拼接回复信息体。

收发的通道做好了,就开始定义收发规则了。

这一步的设想是,用户通过点击自定义菜单中的发布按钮来激活发布信息的接收状态,当用户发布完信息后,发送“图片”来给后端发一个标记,再提示用户可以发送图片给公众号。最后用户通过发送“完成”结束整个发布。

但是这个体验其实很不好。微信是对话式交互,对于这种结构化信息的采集有天生短板——信息结构不统一,很难提取整理。举个例子:


【品牌型号】本田-CRV风尚版【排量配置】2.0L【上牌年份】2015年2月【主要配置】CVT无级变速箱,155马力,多安全气囊,胎压监测装置,无钥匙启动,电动天窗,多功能方向盘,日间行车灯,电动后视镜调节,后座出风口,【车辆描述】车况精品,保值度高, 经济实惠,车空间大,开车舒适,可贷款按揭,欢迎致电咨询。【温馨提示】点击“进入店铺”查看更多精品车源。【公司宗旨】杜绝一切事故车、泡水车,如有不符包退换,7天有效期,让您购车无忧,买得放心,用得安心。【看车地址】东莞市寮步镇国际汽车城对面大得通名车。



本田CRV2.0自动波四驱豪华版,08年4月入户一手,10万公里,车况精品无事故,广州牌国三车(可外迁上牌)。双电动座椅、电动折叠后视镜、天窗、多功能方向盘、座椅加热、原厂真皮,当年新车落地价30w左右。惠你好车行诚信经营,所提供相片与实物一致,支持信用卡付款,提供购车按揭贷款分期。


这两段信息本身没有问题,但是如果让我放到后端去处理,这就很崩溃了,因为你可能需要配置多个正则规则,然后可能要一个个检查,再进行关键词定位,然后提取相关信息。由于这一步很繁琐,因此我需要重新思考这一个流程到底要怎么优化。

你可能感兴趣的:(微信开发-个人订阅号开发爬坑(1))