原文参考
从零开始 Python 微信公众号开发
使用python一步一步搭建微信公众平台
添加用户关注后的欢迎信息与听音乐功能
Python快速搭建自动回复微信公众号
未认证订阅号自定义菜单与开发者兼得
所遇问题
git push sae master:1
时候报如下错误:
1 2
| G:\Web_python\xyPyTest>git push sae master:1 fatal: Authentication failed for 'https://git.sinacloud.com/super3h/'
|
解决方案:
用户名密码就是你的github账户邮箱和密码,输入密码不是没反应,是你输入了但是不会显示,你输入完直接enter就ok了,sshkey是另外一种提交方式罢了!
lxml
安装问题
1 2 3 4 5 6
| E:\>easy_install lxml Searching for lxml Reading https://pypi.python.org/simple/lxml/ Best match: lxml 3.7.2 Downloading https://pypi.python.org/packages/66/45/f11fc376f784c6f2e77ffc7a9d02374ff3ceb07ede8c56f918939409577c/lxml-3.7.2.tar.gz error: ('The read operation timed out',)
|
解决方案:
从官方网站下载与系统,Python版本匹配的lxml文件:lxml 2.3
执行 easy_install lxml-2.3-py2.7-win-amd64.egg
即可。
详细解决方案请参考Python lxml模块安装教程
‘not found’页面
这个属于正常页面,因为index.wsgi只会接受http://6.super3h.applinzi.com/weixin
的入口才会响应,对应微信配置如下:
具体详情请参考新浪云SAE搭建python环境和SAE部署Python-让云端自动运行Python代码
自动回复无反应问题
原文参考代码有错index.wsgi
中将import lxml
改为import lxml.etree as etree
,可进入sae日志中心查看代码错误原因,具体过程如下:
添加第三方依赖包
除了使用新浪云上已经预装的模块之外,您还可以通过以下方式给自己的应用添加第三方依赖包。
首先,在应用的根目录下创建一个第三方依赖包目录 vendor
。
调用pip
命令安装依赖包,使用其-t
选项指定第三方包的安装目录。3
1
| $ pip install -t vendor PACKAGE ...
|
将 vendor
目录和应用的代码一起提交,即可在应用代码里使用安装的第三方依赖包了。
如果依赖包安装的目录名不为 vendor
,你需要在 index.wsgi
文件的最开始,添加以下代码,将目录加入到 sys.path
中。
1 2 3
| import sae sae.add_vendor_dir('路径')
|
详情参考:
添加第三方依赖包
编码问题
1
| (unicode error) 'utf8' codec can't decode byte 0xd6 in position 2: invalid continuation byte yq26
|
具体原因:
编码不一致,微信为gbk编码,本地为utf-8编码二导致编码不一致
解决方案:
将本地用gbk解码,具体操作如下:
1
| return self.render.reply_text(fromUser, toUser, int(time.time()), ('图中人物性别为:'+datas[0]+'\n'+'年龄为:'+datas[1]).decode('gbk'))
|
输入<>会被转义问题
由于![CDATA[$content]]
而发生转义问题,改成如下模式即可:
1 2 3 4 5 6 7 8
| $def with (toUser,fromUser,createTime,content) <xml> <ToUserName><![CDATA[$toUser]]></ToUserName> <FromUserName><![CDATA[$fromUser]]></FromUserName> <CreateTime>$createTime</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content>$content</Content> </xml>
|
音乐问题
由于百度云存储要钱的缘故。。。所以我选择了新浪云。
问题: 苹果手机中不能听
解决方案: 还没解决。。能力有限。
后续: 那天闲来无事,进公众号点了首歌,发现不能放了,原来是新浪云把歌的链接给改了。。没办法存在了qq邮箱的中转站,原文点击此教你快速添加qq空间背景音乐免费网络歌曲链接
新闻列表
templates\reply_url.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| $def with (toUser,fromUser,createTime,content,title,description,picUrl,url) <xml> <ToUserName><![CDATA[$toUser]]></ToUserName> <FromUserName><![CDATA[$fromUser]]></FromUserName> <CreateTime>$createTime</CreateTime> <MsgType><![CDATA[news]]></MsgType> <Content><![CDATA[$content]]></Content> <ArticleCount>1</ArticleCount> <Articles> <item> <Title><![CDATA[$title]]></Title> <Description><![CDATA[$description]]> </Description> <PicUrl><![CDATA[$picUrl]]></PicUrl> <Url><![CDATA[$url]]></Url> </item> </Articles> <FuncFlag>0</FuncFlag> </xml>
|
weixinInterface.py添加这一句:
1 2 3 4 5 6 7 8
| def POST(self): if msgType == 'text': content = xml.find("Content").text if isinstance(replayText,list): articleList = [article['article']+'\n详情'.decode('gbk')+article['detailurl'] for article in replayText] reply = random.choice(articleList) return self.render.reply_text(fromUser,toUser,int(time.time()),reply)
|
tulingAutoReply.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| import json import requests import traceback from random import choice class TulingAutoReply: def __init__(self, tuling_key, tuling_url): self.key = tuling_key self.url = tuling_url def reply(self, reply): body = {'key': self.key, 'info': reply} 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'] elif js['code'] == 200000: return js['url'] elif js['code'] == 302000: return js['list'] else: return None except Exception: traceback.print_exc() return None
|
博主本来准备做语音识别,结果好像认证后才提供此接口,这里把原文贴出来,供大家参考听得懂语音消息的聊天机器人
微信图文信息直接跳转至外部链接
点击菜单跳转到网页必须要认证才行,我们可以用关键字回复来实现跳转至外部链接
在templates下添加reply_url.xml,内容为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| $def with (toUser,fromUser,createTime,content,title,description,picUrl,url) <xml> <ToUserName><![CDATA[$toUser]]></ToUserName> <FromUserName><![CDATA[$fromUser]]></FromUserName> <CreateTime>$createTime</CreateTime> <MsgType><![CDATA[news]]></MsgType> <Content><![CDATA[$content]]></Content> <ArticleCount>1</ArticleCount> <Articles> <item> <Title><![CDATA[$title]]></Title> <Description><![CDATA[$description]]> </Description> <PicUrl><![CDATA[$picUrl]]></PicUrl> <Url><![CDATA[$url]]></Url> </item> </Articles> <FuncFlag>0</FuncFlag> </xml>
|
weixinInterface.py添加这一句:
1 2 3 4
| if msgType == 'text': content = xml.find("Content").text if content == '博客'.decode('gbk'): return self.render.reply_url(fromUser,toUser,int(time.time()),content,'个人博客'.decode('gbk'),'HHH的个人博客'.decode('gbk'),r'https://mmbiz.qlogo.cn/mmbiz_jpg/z67Nqg3yAzRNVazozLUD7icuibRJdnCDaJd1dTfQ9673IDS6ttA5cFQwQCic7IrjPhbTcX1ycQDGibJhlGaFbwzyyg/0?wx_fmt=jpeg',r'http://super3h.github.io')
|
源码链接
欢迎订阅 ProgrammerBy3H 求star star star!!