Python快速搭建自动回复微信公众号

Python快速搭建自动回复微信公众号

在之前的一篇文章 Python利用 AIMLTornado 搭建聊天机器人微信订阅号 中用 aiml 实现了一个简单的英文聊天机器人订阅号。但是只能处理英文消息,现在用 图灵机器人 来实现一个中文的聊天机器人订阅号。

这里主要介绍如何利用 PythonTornado Web框架以及wechat-python-sdk 微信公众平台 Python 开发包来快速搭建微信公众号。

完整的公众号代码 GitHub 地址:green ,由于目前此公众号有一些功能正在开发中,此完整代码会与下文所描述的代码有不一致的地方,但是自动回复的功能会一直保留。

本文搭建的微信公众号为 Ms_haoqi,可以扫码关注后测试效果

自动回复效果:

安装Python库

通过 pip 安装 wechat-python-sdkRequests 以及 Tornado

pip install tornado
pip install wechat-sdk
pip install requests

订阅号申请

要搭建订阅号,首先需要在微信公众平台官网进行注册,注册网址: 微信公众平台

目前个人用户可以免费申请微信订阅号,虽然很多权限申请不到,但是基本的消息回复是没有问题的。

服务器接入

具体的接入步骤可以参考官网上的接入指南

本订阅号的配置为:

配置里的URL为服务器提供订阅号后台的url路径,本文用到的源代码配置的是 http://server_ip/wx 其中 server_ip 是运行源代码的主机的公网ip地址。

Token 可以设置为任意字符串。

EncodingAESKey 可以选择随机生成。

消息加密方式可以设置为比较简单的明文模式。

接受并处理微信服务器发送的接入请求的关键代码为Tornado的一个Handle, wx.py :

import tornado.escape
import tornado.web

from wechat_sdk import WechatConf
conf = WechatConf(
    token=‘your_token‘, # 你的公众号Token
    appid=‘your_appid‘, # 你的公众号的AppID
    appsecret=‘your_appsecret‘, # 你的公众号的AppSecret
    encrypt_mode=‘safe‘,  # 可选项:normal/compatible/safe,分别对应于 明文/兼容/安全 模式
    encoding_aes_key=‘your_encoding_aes_key‘  # 如果传入此值则必须保证同时传入 token, appid
)

from wechat_sdk import WechatBasic
wechat = WechatBasic(conf=conf)

class WX(tornado.web.RequestHandler):
    def get(self):
        signature = self.get_argument(‘signature‘, ‘default‘)
        timestamp = self.get_argument(‘timestamp‘, ‘default‘)
        nonce = self.get_argument(‘nonce‘, ‘default‘)
        echostr = self.get_argument(‘echostr‘, ‘default‘)
        if signature != ‘default‘ and timestamp != ‘default‘ and nonce != ‘default‘ and echostr != ‘default‘                 and wechat.check_signature(signature, timestamp, nonce):
            self.write(echostr)
        else:
            self.write(‘Not Open‘)

此代码的作用就是验证消息是来自微信官方服务器后直接返回echostr。

启动后台的 main.py 代码:

import tornado.web
import tornado.httpserver
from tornado.options import define, options

settings = {
            ‘static_path‘: os.path.join(os.path.dirname(__file__), ‘static‘),
            ‘template_path‘: os.path.join(os.path.dirname(__file__), ‘view‘),
            ‘cookie_secret‘: ‘e440769943b4e8442f09de341f3fea28462d2341f483a0ed9a3d5d3859f==78d‘,
            ‘login_url‘: ‘/‘,
            ‘session_secret‘: "3cdcb1f07693b6e75ab50b466a40b9977db123440c28307f428b25e2231f1bcc",
            ‘session_timeout‘: 3600,

            ‘port‘: 5601,
            ‘wx_token‘: ‘weixin‘,
            }

web_handlers = [
        (r‘/wx‘, wx.WX),
        ]

define("port", default=settings[‘port‘], help="run on the given port", type=int)

if __name__ == ‘__main__‘:
    app = tornado.web.Application(web_handlers, **settings)
    tornado.options.parse_command_line()
    http_server = tornado.httpserver.HTTPServer(app)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()

配置好程序源代码后运行,确认运行无误后再在公众号设置页面点击 提交 ,如果程序运行没问题,会显示接入成功。

接入图灵机器人

要接入图灵机器人,首先需要在官网申请API Key。

申请到之后可以利用以下代码包装一个自动回复接口:

# -*- coding: utf-8 -*-
import json
import requests
import traceback

class TulingAutoReply:
    def __init__(self, tuling_key, tuling_url):
        self.key = tuling_key
        self.url = tuling_url

    def reply(self, unicode_str):
        body = {‘key‘: self.key, ‘info‘: unicode_str.encode(‘utf-8‘)}
        r = requests.post(self.url, data=body)
        r.encoding = ‘utf-8‘
        resp = r.text
        if resp is None or len(resp) == 0:
            return None
        try:
            js = json.loads(resp)
            if js[‘code‘] == 100000:
                return js[‘text‘].replace(‘<br>‘, ‘\n‘)
            elif js[‘code‘] == 200000:
                return js[‘url‘]
            else:
                return None
        except Exception:
            traceback.print_exc()
            return None

编写公众号自动回复代码

利用 wechat-python-sdk 微信公众平台 Python 开发包可以很容易地处理公众号的所有消息。

如下为处理来自微信官方服务器的微信公众号消息的 Tornado Handler对象(此代码会获取公众号收到的用户消息并调用刚刚包装的图灵机器人API自动回复) wx.py部分代码:

# -*- coding: utf-8 -*-
import tornado.escape
import tornado.web

auto_reply = TulingAutoReply(key, url) # key和url填入自己申请到的图灵key以及图灵请求url

class WX(tornado.web.RequestHandler):
    def wx_proc_msg(self, body):
        try:
            wechat.parse_data(body)
        except ParseError:
            print ‘Invalid Body Text‘
            return
        if isinstance(wechat.message, TextMessage): # 消息为文本消息
            content = wechat.message.content
            reply = auto_reply.reply(content)
            if reply is not None:
                return wechat.response_text(content=reply)
            else:
                return wechat.response_text(content=u"不知道你说的什么")
        return wechat.response_text(content=u‘知道了‘)

    def post(self):
        signature = self.get_argument(‘signature‘, ‘default‘)
        timestamp = self.get_argument(‘timestamp‘, ‘default‘)
        nonce = self.get_argument(‘nonce‘, ‘default‘)
        if signature != ‘default‘ and timestamp != ‘default‘ and nonce != ‘default‘                 and wechat.check_signature(signature, timestamp, nonce):
            body = self.request.body.decode(‘utf-8‘)
            try:
                result = self.wx_proc_msg(body)
                if result is not None:
                    self.write(result)
            except IOError, e:
                return
时间: 2024-08-08 13:56:02

Python快速搭建自动回复微信公众号的相关文章

Python爬虫实现的微信公众号文章下载器

平时爱逛知乎,收藏了不少别人推荐的数据分析.机器学习相关的微信公众号(这里就不列举了,以免硬广嫌疑).但是在手机微信上一页页的翻阅历史文章浏览,很不方便,电脑端微信也不方便. 所以我就想有什么方法能否将这些公众号文章下载下来.这样的话,看起来也方便.但是网上的方法要么太复杂(对于我这个爬虫入门新手来说),要么付费. 但我的需求其实却很简单--"方便的查找 / 检索 / 浏览相关公众号的任意文章",所以,一番学习检索后,上手做了一个小工具(打包成可执行文件了),虽然方法和代码相当简单,但

在新浪SAE上搭建微信公众号的python应用

微信公众平台的开发者文档https://www.w3cschool.cn/weixinkaifawendang/ python,flask,SAE(新浪云),搭建开发微信公众账号http://www.oschina.net/code/snippet_1768500_36580 从零开始 Python 微信公众号开发https://zhuanlan.zhihu.com/p/21354943 新浪云应用http://www.sinacloud.com/doc/sae/python/ SAE Pyth

从Python爬虫到SAE云和微信公众号:二、新浪SAE上搭建微信服务

目的:用PHP在SAE上搭建一个微信公众号的服务器. 1.申请一个SAE云账号 SAE申请地址:http://sae.sina.com.cn/  可以使用微博账号登陆,SAE是新浪的云服务,时间也比较长了,功能比较多. 特点:免费使用,对于学习者而言已经够用了,长时间用充点云豆也花不了多少钱(最低每天10云豆消费),几十块钱(1元=100云豆)玩一年还是可以的. AWS:如果使用aws免费的空间,很容易用超免费额度,而且用超了额度不会停止,而是从信用卡扣费,以美元计价价格对于学习者而言非常昂贵!

教你搭建可以解析tumblr的微信公众号

微信公众号:tumblr自助餐,网站:http://www.wx-tumblr.tk 教程分为三个部分: 微信公众号部分 DigitalOcean服务器搭建部分 网站搭建部分 微信公众号部分 需要搭建一个像tumblr自助餐一样的微信公众号,自然需要申请一个微信公众号.具体过程不累述,可以直接到微信公众号主页申请一个个人订阅号即可.如果不想那么麻烦,也可以用到微信公众号测试平台,用微信登陆得到一个测试的微信公众号. 微信公众号部分未完,需要完成下面部分才能继续. 为了方便就是用微信公众号测试平台

用Docker搭建微信公众号

此文我将带大家用Docker来搭建一个微信公众号的后台,主要涉及Docker里运行JavaWeb的技术,一起来做这个有意思的事情吧! (如果你对Docker了解不是很多的话,欢迎查看我的上一篇教程: Docker简明教程) 项目结构介绍 首先看一下整个项目的结构: \etc\nginx-conf是nginx的配置文件,用来做端口的转发.里面的代码如下: server { listen 80; server_name *.daoapp.io; location / {     proxy_set_

微信公众号开发纪要(2)-微信公众号接入

当搭建好微信公众号开发环境后,先要和微信公众号建立联系.从本质上来说,微信公众号开发就是如何让自己的服务器与微信服务器进行交互的一个过程. 微信服务器就相当于一个转发服务器,终端(手机.Pad等)发起请求至微信服务器,微信服务器然后将请求转发给我们的应用服务器.应用服务器处理完毕后,将响应数据回发给微信服务器,微信服务器再将具体响应信息回复到微信App终端. 通信协议为:HTTP 数据传输格式为:XML 具体的流程如下图所示: 来一张更加直观的图吧: 我们需要做的事情,就是对微信服务器转发的HT

个人微信公众号搭建Python实现 -接收和发送消息-基本说明与实现(14.2.1)

目录 1.原理 2.接收普通消息 3.接收代码普通消息代码实现 @(接收和发送消息-基本说明与实现) 1.原理 2.接收普通消息 其他消息类似参考官方文档 3.接收代码普通消息代码实现 from flask import Flask,request,abort import xmltodict import time app = Flask(__name__) #常量 微信的token令牌 WECHAT_TOKEN = "xxxx" @app.route("/wx"

个人微信公众号搭建Python实现 -开发配置和微信服务器转入-认识微信公众号(14.1.1)

目录 1.微信账号类型 2.微信公众号开发需求 3.微信公众号开发原理 @(认识微信公众号) 1.微信账号类型 个人号 公众号 订阅号 服务号 企业号 这里要讲的就是订阅号 前往注册微信公众号 2.微信公众号开发需求 内嵌功能 被动回复 主动告知 内嵌网页 高级需求需编程实现如 3.微信公众号开发原理 编程人员要做的就是完成开发者服务器或者说是网页服务器 前往微信公众号开发者文档 原文地址:https://www.cnblogs.com/simon-idea/p/11349388.html

微信公众号+python+新浪SAE实现实时天气预报功能

本文主要谈谈如何做一个具有天气预报功能的公众号. 话不多说先上图,实现的功能如下图所示: 点击微信右下角的"+"号,分享任意一个位置信息,公众号后台自动回复当地的天气情况.这里的天气预报是用python从中国天气网抓取的雷达数据.有没有更精准的数据源呢,当然有啦,但这不是本文的重点,这里我就不详说了. 用到的工具:新浪SAE + 微信公众平台 + python2.7(新浪SAE目前仅支持2.7版本) 由于本文的重点不是使用python搭建微信公众平台,网上已经有很多不错的教程,为了避免