微信公众平台

来源:互联网 发布: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
原创粉丝点击