微信公众平台

根据下面的牛人的引导初探微信公众平台

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 hashlib
import web
import lxml
import time
import os
import urllib2,json
from lxml import etree
import basic
import random
import pylibmc
import model

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="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-8
import json
import urllib2


def 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
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值