本文主要介绍如何使用Python开发微信公众平台。说明:如果你是Python小白或者爬虫小白,你可能会觉得本课程的代码比较难看懂。没关系,你不需要理解,按照步骤一步步来就可以了。这一节我们主要搭建一个框架,几乎没有真正的爬虫代码。您一生中只能使用一次这些代码和操作。在下一节中,我们将描述如何在这个框架上扩展我们的爬虫程序。需要操作:申请微信公众号。微信接口的获取,SAE的设置等编写简单的Python爬虫代码需要的知识点:了解微信公众号与云计算平台的连接关系。明确其运行机制。了解web.py的概念和wsgi的机制。了解简单的python爬虫知识,json解析,API调用,urllib库函数。自动回复实现原理首先我们了解一下微信的自动回复功能是通过什么样的机制实现的?(不是微信系统的自动回复)原理是微信平台将用户输入的文字发送到云平台,然后在云平台上传文字。当运行的程序捕获到这个文本信息后,返回一个结果,然后云平台将结果返回给微信平台。最后,微信平台将返回的结果展示给用户。用一张图来说明一下:微信开发者模式的设置和SAE我尽量详细说明。如果还有不明白的可以私信我。首先需要两个平台的支持:微信公众平台;这个应用比较简单。只要有邮箱,就可以免费申请个人版订阅号。不再。云计算平台;我这里用的SAE(新浪去年不收费,坑爹,今年开始收费,代码托管最低1分钱一天),腾讯云也可以用。具体步骤:微信公众号申请。只要有邮箱,就可以免费申请个人版订阅号。不再。SAE应用及设置注册登录SAE后,选择SAE新建工程。SAE暂时只支持Python2.7,暂时不能使用Python3。如果项目比较小,建议填SVN,因为可以在线编辑。如果项目比较大,就用Git。这里选择SVN。创建第一个版本开始编辑~编写config.yaml和index.wsgi文件。WSGI是PythonWeb服务器网关接口(PythonWebServerGatewayInterface)。我们正在使用web.py框架。同类型比较强大的框架有Django、Flask等,为什么选择web.py,因为它轻量级,而且有很好的xml解析功能。顺便说一句,web.py的开发者AaronH。斯沃茨,是个天才,却英年早逝。有一部关于他的纪录片,推荐看一下:网络之子。好了,废话少说,我们先写config.yamlname:pifuhandashuversion:1libraries:-name:webpyversion:"0.36"-name:lxmlversion:"2.3.4"...这里介绍一下web.py框架和lxml模块,然后我们编写index.wsgi文件。#coding:utf-8importosimportsaeimportwebfromweixinInterfaceimportWeixinInterfaceurls=('/weixin','WeixinInterface')app_root=os.path.dirname(__file__)templates_root=os.path.join(app_root,'templates')render=web.template.render(templates_root)app=web.application(urls,globals()).wsgifunc()application=sae.create_wsgi_app(app)下面是简单的python使用web.py网页开发的知识。设置根目录、模板目录、/weixin路由,启动应用。为了让页面看起来更整洁,我们新建了一个py文件weixinInterface.py(weixinInterface.py和index.wsgi在同一个目录下,见下图)。编辑weixinInterface.py,大小写一定要看清楚,否则容易出错。注意自己填写一个专属的token,这个以后在微信的设置中会用到公众号。#-*-coding:utf-8-*-importhashlibimportwebimportlxmlimporttimeimportosimporturllib2,jsonfromlxmlimportetreeclassWeixinInterface:def__init__(self):self.app_root=os.path.dirname(__file__)self.templates_root=os.path.join(self.app_root,'templates')self.render=web.template.render(self.templates_root)defGET(self):#获取输入参数data=web.input()signature=data.signaturetimestamp=data.timestampnonce=data.nonceechostr=data.echostr#Selftoketoken="XXXXXXXXXXX"#注:填写后在微信公众平台输入的token!!!#字典排序list=[token,timestamp,nonce]list.sort()sha1=hashlib.sha1()map(sha1.update,list)hashcode=sha1.hexdigest()#sha1加密算法#如果是来自微信请求,回复echostrifhashcode==signature:returnechostr代码大致解释一下,def__init__(self)告诉我们模板文件的加载位置。defGET(self)是微信公众平台请求的token验证。这里的验证使用的是哈希算法。详情请参考官方微信接口接入说明:微信公众平台接入指南。里面有一个php例子。本文使用python实现。微信开发者模式设置基本设置修改配置网址时一定要认真填写,仔细核对。比如查看url申请信息:填写刚才新浪SAE中的token,一定要一致。EncodingAESKey可以随机生成。完成后点击提交。如果提示“提交成功”。恭喜,最关键的一步已经完成。这个阶段可能需要相当长的时间。完成后一定要开启开发者模式!!!!记住!!!微信机器人实现上一步完成后,我们就可以做点有意思的事情了:微信机器人。但在此之前,还有一个小步骤需要完成:模板的创建。由于微信开发是xml形式。为了先实现文字形式的自动回复(以后可以以音频、图文信息等形式回复),先新建一个模板文件夹templates,然后在templates下新建一个reply_text.xml文件文件夹(有关文件的位置,请参见下面的屏幕截图)。根据微信消息的被动回复,填写如下代码:$defwith(toUser,fromUser,createTime,content)
