python快速搭建自动回复微信公众号(代码片段)

liuwons liuwons     2022-12-09     205

关键词:

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

微信公众号实现机器人回复(代码片段)

...现思路:1、使用微擎连接微信公众号2、修改自定义回复规则3、请求智能机器人接口在服务器上安装微擎(参考以下连接)http://blog.csdn.net/woshihaiyong168/article/details/53932123一定要注册社区号云升级  (将目录授权77... 查看详情

微信公众号定制开发(代码片段)

...p;网页授权获取用户基本信息 授权域名。(注:公众号自动回复开发,需要开启  服务器配置,单独的获取用户信息则不需要。jssdk是白名单授权管理。)2、菜单接入:  http://XXX/ user/info访问时用户授权,授权... 查看详情

给微信公众号发消息,他能收到吗?

...众平台,作为开发者只需要按照公众平台的开发文档就能快速开发应用,废话不多说,下面我来介绍下个人公众号申请,第一个api调用,自动消息回复。2、填写配置信息字段说明: url:必须是可以正常访问的服务器地址 token:... 查看详情

分享微信公众号运营助手,可以在手机上回复粉丝留言

...可以在手机上进行回复。 实现的功能如下:粉丝留言自动微信通知在微信中回复粉丝留言,文字+图片粉丝关注自动微信通知粉丝关注自动推送多图文消息或者历史消息更强大的自定义菜单管理自定 查看详情

如何快速将微信公众号留言嵌入到csdn博文中?(代码片段)

...一个对公众号留言进行格式转换成CSDNMarkdown编辑器格式的Python程序。关键词:公众号,留言,MarkDown& 查看详情

微信公众号自动回复_java

先声明一下,这是一个maven工程pom文件需要的依赖:1<dependency>2<groupId>dom4j</groupId>3<artifactId>dom4j</artifactId>4<version>1.6</version>5</dependency>6<dependency> 查看详情

java微信公众号开发----关键字自动回复消息

在配置好开发者配置后,本人第一个想要实现的是自动回复消息的功能,说明以下几点:1.url仍然不变,还是开发配置里的url2.微信采用xml格式传输数据3.微信服务器传给我们的参数主要有(如图): 附上解析xml类的依赖:1&l... 查看详情

javascript微信公众号文章页自动滚动到底部(代码片段)

查看详情

welm简介及微信公众号开发(代码片段)

前言我的公众号后台设置了关键词自动回复,但是经常收到很多读者打错别字,导致无法触发,正巧,前段时间刚申请到WeLM的使用权限,于是就想着给公众号升级一下。WeLM简介WeLM是腾讯开发的一个擅长理解... 查看详情

公众号后台开发(代码片段)

...与编辑模式是互斥的,打开开发模式的时候,编辑模式的自动回复与自定义菜单失效;打开编辑模式的自动回复或者自定义菜单的时候开发模式会失效。  开发模式的数据交互原理如下:   我们需要开发的任务就是... 查看详情

java微信公众平台开发--文本及图文消息回复的实现(代码片段)

上篇我们说到回复消息可以根据是否需要上传文件到微信服务器可划分为【普通消息】和【多媒体消息】,这里我们来讲述普通消息的回复实现,在消息回复中存在一个关键字段【openid】,它是微信用户对于公众号的唯一标识,... 查看详情

使用python快速搭建接口自动化测试脚本实战总结(代码片段)

本文将介绍如何使用python快速进行http/https接口自动化测试脚本搭建,实现自动请求、获取结果、数据对比分析,导出结果到Excel等功能,包括python的requests、pandas、openpyxl等库的基本使用方法。测试需求介绍通常,... 查看详情

用python登录wechat实现自动回复(非常详细)(代码片段)

如要抄袭麻烦备注好原文出处!!! 最近实现了一些微信的简单玩法 我们可以通过网页版的微信微信网页版,扫码登录后去抓包爬取信息,还可以post去发送信息。 》》安装itchat这个库   pipinstallitchat先来... 查看详情

docker快速安装&搭建mongdb环境(代码片段)

...e/docker/docker-install-mongdb本节中,我们将学习如何通过Docker快速安装与搭建MongoDB环境。一、下载MongoDB镜像这里以mongo4版本为例,下载镜像:docke 查看详情

关于微信公众号被动回复带有表情的文字

表情的消息类型实质是文本消息。每个表情都有与之对应的表情代码。  查看详情

python微信公众号文章抓取阅读数和点赞数(代码片段)

查看详情

微信服务(公众)号实现用户关注自动注册成为会员(代码片段)

大家好,我是雄雄。交流技术可以进入到我的社区【雄雄的小课堂】前言看本篇文章之前,可以先看看前面两篇:java实现微信服务(公众)号用户关注时,获取openid,安全模式下的加密解密实现微信公... 查看详情

微信公众号实时抓取(代码片段)

...tmproxy中间人代理拦截内容,解析出公众号列表页使用python对公众号内容进行抓取源码地址微信公众号抓取项目地址关键源码解析appium部分。首先我们需要找出每个界面所对应的Activity和每个Activity界面的按钮。fromappiumimportwebd... 查看详情