学习python的微信公众号_python学习—实现微信公众号聊天机器人

最近在学习python,想做一个聊天机器人,百度了很多资料,有的也是根据别人分享的文档一步步操作,但过程中还是遇到了一些问题,因此 我自己总结了一下我的步骤:

1. 申请一个公众号, 具体的可以百度微信公众号跟着步骤申请一个就行 自己玩的话 订阅号就可以了

2. 申请一个服务器

我用的是新浪云,不要问我为什么选择这个, 我也是刚开始跟着一个教程做的

创建一个云应用

wAAACwAAAAAAQABAEACAkQBADs=

image

选择python开发语言 这里我选择的共享环境 具体计费及配额旁边都有说明,输入二级域名(自己起个名字就行),输入应用名称—->确认创建

新浪云的代码管理有两种方式 SVN 和git 为了方便我选择了git

3. 在本地建一个文件夹 weixin

新建config.yaml文件name: wxpytest

version: 1

libraries:

- name: webpy

version: "0.36"

- name: lxml

version: "2.3.4"

新建index.wsgi文件# coding: UTF-8

import os

import sae

import web

from weixinInterface import WeixinInterface

urls = (

'/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)

新建weixinInterface.py文件# -*- coding: utf-8 -*-

import hashlib

import web

import lxml

import time

import os

from lxml import etree

import urllib2

import robot

class WeixinInterface:

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)

def GET(self):

#获取输入参数

data = web.input()

signature=data.signature

timestamp=data.timestamp

nonce=data.nonce

echostr = data.echostr

#自己的token

token="你的token" #这里改写你在微信公众平台里输入的token

#字典序排序

list=[token,timestamp,nonce]

list.sort()

sha1=hashlib.sha1()

map(sha1.update,list)

hashcode=sha1.hexdigest()

#sha1加密算法

#如果是来自微信的请求,则回复echostr

if hashcode == signature:

return echostr

新建一个文件夹/weixin/templates,新建一个文件reply_text.xml$def with (toUser,fromUser,createTime,content)

$createTime

4.设置微信公众号,进入开发—>基本配置

wAAACwAAAAAAQABAEACAkQBADs=

image.png

例如我的域名是test.applinzi.com

ur填写为:https://test.applinzi.com/weixin

查找自己的域名参考下图:

wAAACwAAAAAAQABAEACAkQBADs=

image.png

token和代码里写的token保持一致就行

EncodingAesKey 随机生成就好了

消息加密方式选择明文或兼容都可以

点击提交

如果出现token验证失败请检查你的token和代码里填写的是否一致,url是否正确

5. 调用图灵api实现机器人聊天

首先需要去图灵官网注册 开通一个机器人

新建robot.py# -*- coding=utf-8 -*-

import requests

KEY = "创建机器人后生成的apikey"

def get_response(msg):

apiUrl='http://www.tuling123.com/openapi/api'

data={

'key':KEY,

'info':msg,

'userid':'机器人名字',

}

try:

r=requests.post(apiUrl, data=data).json()

return r.get('text').encode("utf-8")

except:

return msg

return msg

修改weixinInterface.py文件# -*- coding: utf-8 -*-

import hashlib

import web

import lxml

import time

import os

from lxml import etree

import urllib2

import robot

class WeixinInterface:

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)

def GET(self):

#获取输入参数

data = web.input()

signature=data.signature

timestamp=data.timestamp

nonce=data.nonce

echostr = data.echostr

#自己的token

token="********" #这里改写你在微信公众平台里输入的token

#字典序排序

list=[token,timestamp,nonce]

list.sort()

sha1=hashlib.sha1()

map(sha1.update,list)

hashcode=sha1.hexdigest()

#sha1加密算法

#如果是来自微信的请求,则回复echostr

if hashcode == signature:

return echostr

def POST(self):

str_xml = web.data()#获得post来的数据

xml = etree.fromstring(str_xml)#进行XML解析

msgType=xml.find("MsgType").text

fromUser=xml.find("FromUserName").text

toUser=xml.find("ToUserName").text

if msgType == 'text':

content=xml.find("Content").text

rpyMsg=robot.get_response(content)

return self.render.reply_text(fromUser,toUser,int(time.time()), rpyMsg)

else:

pass

由于robot导入了requests包,我们需要把requests,urllib3,idna,chardet,certifi包拉到本地放在weixin目录下

并且修改index.wsgi文件# coding: UTF-8

import os

import sae

import web

import sys

from weixinInterface import WeixinInterface

urls = (

'/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)

sys.path.insert(0,os.path.join(app_root, 'requests'))

sys.path.insert(0,os.path.join(app_root, 'urllib3'))

sys.path.insert(0,os.path.join(app_root, 'chardet'))

sys.path.insert(0,os.path.join(app_root, 'certifi'))

sys.path.insert(0,os.path.join(app_root, 'idna'))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值