微信公众平台
来源:互联网 发布:banner轮播图js代码 编辑:程序博客网 时间:2024/04/26 01:34
根据下面的牛人的引导初探微信公众平台
http://my.oschina.net/yangyanxing/blog/159215
在微信公众平台上申请订阅号
然后再高级功能-》开发模式-》成为开发者
这时候需要填写url & token
url需要一个网站应用,token则是公众平台和url的应用之间约定的一个密码。
为了url应用,我们可以在SAE上申请一个python应用。
config.yaml
配置一些需要用到的python模块
index.wsgi
主程序设置,设置模板目录和url,运行相应的app
templates
下面创建一个模板文件,可以用来render
准备好了url应用,就可以填写公众平台的url和token了
url :http://XXXX.sinaapp.com/weixin
token : 约定token
****************************应用***********************************
1.中英文翻译,使用有道翻译接口
申请之 http://fanyi.youdao.com/openapi?path=data-mode
然后利用urllib2模块,得到接口的返回结果显示给微信用户即可
2.随机获取音乐
同理
3.小黄鸡,申请接口
http://developer.simsimi.com/api
目前申请的只能免费使用九天 Orz...
技术上是使用了SAE的memcache,缓存命令
4.使用mysql服务来记录用户的反馈
同理,开启SAE的mySQL服务
核心代码 weixinInterface.py
# -*- coding: utf-8 -*-import hashlibimport webimport lxmlimport timeimport osimport urllib2,jsonfrom lxml import etreeimport basicimport randomimport pylibmcimport modelclass 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="luantianjiao" #这里改写你在微信公众平台里输入的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解析 #content=xml.find("Content").text#获得用户所输入的内容 mstype=xml.find("MsgType").text fromUser=xml.find("FromUserName").text toUser=xml.find("ToUserName").text mc=pylibmc.Client() if mstype == "event": mscontent = xml.find("Event").text if mscontent == "subscribe": replayText = u'''欢迎关注本微信,这个微信是本人业余爱好所建立,也是想一边学习Python一边玩的东西,现在还没有什么功能,只是弄了个翻译与豆瓣图书查询的小工具,你们有什么好的文章也欢迎反馈给我,我会不定期的分享给大家,输入help查看操作指令''' return self.render.reply_text(fromUser,toUser,int(time.time()),replayText) if mscontent == "unsubscribe": replayText = u'我现在功能还很简单,知道满足不了您的需求,但是我会慢慢改进,欢迎您以后再来' return self.render.reply_text(fromUser,toUser,int(time.time()),replayText) if mstype == 'text': content=xml.find("Content").text if content.startswith('fk'): fktime = time.strftime('%Y-%m-%d %H:%M',time.localtime()) model.addfk(fromUser,fktime,content[3:].encode('utf-8')) return self.render.reply_text(fromUser,toUser,int(time.time()),u'感谢您的反馈') if content.lower() == 'bye': mc.delete(fromUser+'_xhj') return self.render.reply_text(fromUser,toUser,int(time.time()),u'您已经跳出了和小黄鸡的交谈中,输入help来显示操作指令') if content.lower() == 'xhj': mc.set(fromUser+'_xhj','xhj') return self.render.reply_text(fromUser,toUser,int(time.time()),u'您已经进入与小黄鸡的交谈中,请尽情的蹂躏它吧!输入bye跳出与小黄鸡的交谈') if content.lower() == 'm': musicList = [ [r'http://bcs.duapp.com/yangyanxingblog3/music/destiny.mp3','Destiny',u'命运'], [r'http://bcs.duapp.com/yangyanxingblog3/music/5days.mp3','5 Days',u'5日迷情'], [r'http://bcs.duapp.com/yangyanxingblog3/music/Far%20Away%20%28Album%20Version%29.mp3','Far Away (Album Version)',u'遥远'], [r'http://bcs.duapp.com/yangyanxingblog3/music/%E5%B0%91%E5%B9%B4%E6%B8%B8.mp3',u'wandering',u'少年游'], [r'http://bcs.duapp.com/yangyanxingblog3/music/%E8%8F%8A.mp3',u'菊',u'关喆'], [r'http://bcs.duapp.com/yangyanxingblog3/music/%E7%A6%BB%E4%B8%8D%E5%BC%80%E4%BD%A0.mp3',u"can't live without u",u'离不开你'], [r'http://bcs.duapp.com/yangyanxingblog3/music/%E9%99%8C%E7%94%9F%E4%BA%BA.mp3',u'stranger',u'陌生人'], [r'http://bcs.duapp.com/yangyanxingblog3/music/%E8%8A%B1%E5%AE%B9%E7%98%A6.mp3',u'花容瘦',u'花开易谢'], [r'http://bcs.duapp.com/yangyanxingblog3/music/%E4%B9%98%E5%AE%A2.mp3',u'passenger',u'乘客'], [r'http://bcs.duapp.com/yangyanxingblog3/music/If%20My%20Heart%20Was%20A%20House.mp3',u'If My Heart Was A House',u'心潮澎湃'], [r'http://bcs.duapp.com/yangyanxingblog3/music/Hello%20Seattle%EF%BC%88Remix%E7%89%88%EF%BC%89.mp3',u'Hello Seattle(Remix版',u'西雅图,你好'], [r'http://bcs.duapp.com/yangyanxingblog3/music/Everybody%20Hurts.mp3',u'Everybody Hurts',u'不可言说的伤'] ] music = random.choice(musicList) musicurl = music[0] musictitle = music[1] musicdes =music[2] return self.render.reply_music(fromUser,toUser,int(time.time()),musictitle,musicdes,musicurl) #读取memcache中的缓存数据 mcxhj = mc.get(fromUser+'_xhj') if mcxhj =='xhj': res = basic.xiaohuangji(content) reply_text = res['response'] if u'微信' in reply_text: reply_text = u"小黄鸡脑袋出问题了,请换个问题吧~" #这里小黄鸡会有广告,我索性就全给屏蔽了 return self.render.reply_text(fromUser,toUser,int(time.time()),reply_text) if content == 'help': replayText = u'''1.输入中文或者英文返回对应的英中翻译 2.输入m随机听一首音乐 3.输入xhj进入调戏小黄鸡模式 4.输入fk+反馈信息,可以给我们反馈呦''' return self.render.reply_text(fromUser,toUser,int(time.time()),replayText) elif type(content).__name__ == "unicode": content = content.encode('UTF-8') Nword = basic.youdao(content) return self.render.reply_text(fromUser,toUser,int(time.time()),Nword)
引用的basic.py
#coding=utf-8import jsonimport urllib2def youdao(word): qword = urllib2.quote(word) baseurl =r'http://fanyi.youdao.com/openapi.do?keyfrom=luan111111&key=1072227670&type=data&doctype=json&version=1.1&q=' url = baseurl+qword resp = urllib2.urlopen(url) fanyi = json.loads(resp.read()) if fanyi['errorCode'] == 0: if 'basic' in fanyi.keys(): trans = u'%s:\n%s\n%s\n网络释义:\n%s'%(fanyi['query'],''.join(fanyi['translation']),' '.join(fanyi['basic']['explains']),''.join(fanyi['web'][0]['value'])) return trans else: trans =u'%s:\n基本翻译:%s\n'%(fanyi['query'],''.join(fanyi['translation'])) return trans elif fanyi['errorCode'] == 20: return u'对不起,要翻译的文本过长' elif fanyi['errorCode'] == 30: return u'对不起,无法进行有效的翻译' elif fanyi['errorCode'] == 40: return u'对不起,不支持的语言类型' else: return u'对不起,您输入的单词%s无法翻译,请检查拼写'% word def xiaohuangji(ask): ask = ask.encode('UTF-8') enask = urllib2.quote(ask) #baseurl = r'http://www.simsimi.com/func/reqN?req=' baseurl='''http://sandbox.api.simsimi.com/request.p?key=24ae596d-a367-4105-bc37-c2e12d977378&text=''' url = baseurl+enask+'&lc=ch&ft=0.0' resp = urllib2.urlopen(url) reson = json.loads(resp.read()) return reson
0 0
- 微信公众平台
- 微信公众平台
- 微信公众平台
- 微信公众平台
- 微信公众平台
- 微信公众平台
- 微信公众平台
- 微信公众平台
- 微信公众平台
- 微信公众平台
- 微信公众平台
- 微信公众平台
- 微信公众平台
- 微信公众平台
- 微信公众平台
- 微信公众平台回复公众号听歌
- 微信公众号》》》连接公众平台
- 微信公众平台开发
- 通信基础篇小项目-----简单网络画板的的实现
- 数字证书及其简单数字签名的实现(java实现)
- 安卓中的:cacheColorHint="#00000000"用法
- 北邮大数据课程官方博客正式开通
- 使用OnItemClickListener时关于焦点颜色的设置问题
- 微信公众平台
- LeetCode 73 — Set Matrix Zeroes(C++ Java Python)
- Eclipse中常用的快捷键
- 发布外链的最好的方法
- Eclipse中marketplace组件的安装
- Eclipse中GitHub的配置
- php基础之魔术方法
- 安卓中出现Android library projects cannot be launched的解决办法
- 安卓中出现Jar mismatch! Fix your dependencies的解决办法