python搭建微信公众平台
python基于新浪sae开发的微信公众平台,实现功能:
输入段子---回复笑话
输入开源+文章---发送消息到开源中国
输入快递+订单号---查询快递信息
输入天气---查询南京最近五天天气状况
输入微博热点---回复微博当前热门话题
输入电影+名称---回复百度云盘中搜索的链接
具体实现代码:
#-*-coding:utf-8-*- importhashlib importweb importlxml importtime importos importurllib2,json importurllib importre importrandom importhashlib importcookielib fromurllibimporturlencode fromlxmlimportetree classWeixinInterface: 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) defGET(self): #获取输入参数 data=web.input() signature=data.signature timestamp=data.timestamp nonce=data.nonce echostr=data.echostr #自己的token token="weixin9047"#这里改写你在微信公众平台里输入的token #字典序排序 list=[token,timestamp,nonce] list.sort() sha1=hashlib.sha1() map(sha1.update,list) hashcode=sha1.hexdigest() #sha1加密算法 #如果是来自微信的请求,则回复echostr ifhashcode==signature: returnechostr defPOST(self): str_xml=web.data()#获得post来的数据 xml=etree.fromstring(str_xml)#进行XML解析 content=xml.find("Content").text#获得用户所输入的内容 msgType=xml.find("MsgType").text fromUser=xml.find("FromUserName").text toUser=xml.find("ToUserName").text if(content==u"天气"): url="http://m.ip138.com/21/nanjing/tianqi/" headers={ 'Connection':'Keep-Alive', 'Accept':'text/html,application/xhtml+xml,*/*', 'Accept-Language':'en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3', 'User-Agent':'Mozilla/5.0(WindowsNT6.3;WOW64;Trident/7.0;rv:11.0)likeGecko'} req=urllib2.Request(url,headers=headers) opener=urllib2.urlopen(req) html=opener.read() rex=r'(?<=imgsrc="/image/s[0-9].gif"alt=").{1,6}(?="/>)' rexx=r'(?<=divclass="temperature">).{5,15}(?=</div>)' n=re.findall(rex,html) m=re.findall(rexx,html) str_wether="" for(i,j)inzip(m,n): str_wether=str_wether+j+""+i+"\n" returnself.render.reply_text(fromUser,toUser,int(time.time()),"最近五天天气:\n"+str_wether) elif(content[0:2]==u"电影"): keyword=urllib.quote(content[2:].encode("utf-8")) url="http://www.wangpansou.cn/s.php?q="+keyword headers={ 'Connection':'Keep-Alive', 'Accept':'text/html,application/xhtml+xml,*/*', 'Accept-Language':'en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3', 'User-Agent':'Mozilla/5.0(WindowsNT6.3;WOW64;Trident/7.0;rv:11.0)likeGecko'} req=urllib2.Request(url,headers=headers) opener=urllib2.urlopen(req) html=opener.read() rex=r'https?://pan.baidu.com.*\?uk=[0-9]{10}.*[\d+?]"' m=re.findall(rex,html) string=u"" foriinm: string=string+i+"\n" returnself.render.reply_text(fromUser,toUser,int(time.time()),u"以下是电影链接:\n"+string) elif(u"段子"incontent): url_8="http://www.qiushibaike.com/" url_24="http://www.qiushibaike.com/hot/" headers={ 'Connection':'Keep-Alive', 'Accept':'text/html,application/xhtml+xml,*/*', 'Accept-Language':'en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3', 'User-Agent':'Mozilla/5.0(WindowsNT6.3;WOW64;Trident/7.0;rv:11.0)likeGecko'} req_8=urllib2.Request(url_8,headers=headers) req_24=urllib2.Request(url_24,headers=headers) opener_8=urllib2.urlopen(req_8) opener_24=urllib2.urlopen(req_24) html_8=opener_8.read() html_24=opener_24.read() rex=r'(?<=divclass="content">).*?(?=<!--)' m_8=re.findall(rex,html_8,re.S) m_24=re.findall(rex,html_24,re.S) m_8.extend(m_24) random.shuffle(m_8) returnself.render.reply_text(fromUser,toUser,int(time.time()),m_8[0].replace('<br/>','')) elif(content[0:2]==u"开源"): url="https://www.oschina.net/action/user/hash_login" urll="http://www.oschina.net/action/tweet/pub" username="904727147@qq.com" passw="" password=hashlib.sha1(passw).hexdigest() cj=cookielib.CookieJar() opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) opener.addheaders=[('User-agent','Mozilla/5.0(X11;Linuxx86_64;rv:38.0)Gecko/20100101Firefox/38.0Iceweasel/38.3.0')] urllib2.install_opener(opener) data={'email':username,'pwd':password} data_post=urllib.urlencode(data) opener.open(url,data_post) user="2391943" msg=content[2:].encode("utf-8") user_code="lPFz26r3ZIa1e3KyIWlzPNpJlaEmZqyh6dAWAotd" post={'user_code':user_code,'user':user,'msg':msg} msg_post=urllib.urlencode(post) html=urllib2.urlopen(urll,msg_post).read() returnself.render.reply_text(fromUser,toUser,int(time.time()),u"发送到开源中国动弹成功!") elif(content[0:2]==u"快递"): keyword=content[2:] url="http://www.kuaidi100.com/autonumber/autoComNum?text="+keyword cj=cookielib.CookieJar() opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) opener.addheaders=[('User-agent','Mozilla/5.0(X11;Linuxx86_64;rv:38.0)Gecko/20100101Firefox/38.0Iceweasel/38.3.0')] urllib2.install_opener(opener) html=urllib2.urlopen(url).read() jo=json.loads(html) typ=jo["auto"][0]['comCode'] if(typisNone): returnself.render.reply_text(fromUser,toUser,int(time.time()),u"请检查你的定单号!") urll="http://www.kuaidi100.com/query?type="+typ+"&postid="+keyword html_end=urllib2.urlopen(urll).read() jo_end=json.loads(html_end) if(jo_end["status"]=="201"): returnself.render.reply_text(fromUser,toUser,int(time.time()),u"订单号输入有误,请重新输入!") text=jo_end["data"] string=u"" foriintext: string=string+i["time"]+i["context"]+"\n" returnself.render.reply_text(fromUser,toUser,int(time.time()),string) elif(content==u"微博热点"): url="http://weibo.cn/pub/?tf=5_005" headers={ 'Connection':'Keep-Alive', 'Accept':'text/html,application/xhtml+xml,*/*', 'Accept-Language':'en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3', 'User-Agent':'Mozilla/5.0(WindowsNT6.3;WOW64;Trident/7.0;rv:11.0)likeGecko'} req=urllib2.Request(url,headers=headers) opener=urllib2.urlopen(req) html=opener.read().decode("utf-8") rex=r'(?<=divclass="c"><ahref=").{60,79}(?=</a>)' ss=re.findall(rex,html) string=u"" foriinss: string=string+i.replace('>','\n')+"\n" returnself.render.reply_text(fromUser,toUser,int(time.time()),string.replace('"','')) elif(content==u"知乎信息"): username='18362983803' password='' _xsrf='558c1b60725377c5810ae2484b26781e' url=r'https://www.zhihu.com/login/phone_num' cj=cookielib.CookieJar() opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) opener.addheaders=[('User-agent','Mozilla/5.0(X11;Linuxx86_64;rv:38.0)Gecko/20100101Firefox/38.0Iceweasel/38.3.0')] data=urllib.urlencode({"phone_num":username,"password":password,'_xsrf':_xsrf}) opener.open(url,data) html=opener.open('https://www.zhihu.com/noti7/new?r=1454793308655').read() jo=json.loads(html) data=jo[1] string="增长了:"+str(data[0])+"个评论"+str(data[1])+"个粉丝"+str(data[2])+"个赞同" returnself.render.reply_text(fromUser,toUser,int(time.time()),string) elif(u"钟志远"incontent): returnself.render.reply_text(fromUser,toUser,int(time.time()),u"你想找全世界最帅的人干嘛?如果你是妹子,请加微信18362983803!汉子绕道!") elif(u"使用"incontent): returnself.render.reply_text(fromUser,toUser,int(time.time()),u"搜电影:电影+电影名,最近天气:天气,微博热门:微博热点,快递查询:快递+单号,看笑话:段子,发送动弹到开源中国:开源+内容") else: url=r'http://www.xiaohuangji.com/ajax.php' cj=cookielib.CookieJar() opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) opener.addheaders=[('User-agent','Mozilla/5.0(X11;Linuxx86_64;rv:38.0)Gecko/20100101Firefox/38.0Iceweasel/38.3.0')] string=urllib.quote(content.encode("utf-8")) try: data=urllib.urlencode({"para":string}) html=opener.open(url,data).read() string=html+"\n----[回复[使用]]" returnself.render.reply_text(fromUser,toUser,int(time.time()),string) exceptException,ex: returnself.render.reply_text(fromUser,toUser,int(time.time()),u"我不想理你了~")
以上就是本文的全部内容,希望对大家的学习有所帮助。