python搭建微信公众平台


Posted in Python onFebruary 09, 2016

python基于新浪sae开发的微信公众平台,实现功能:

输入段子---回复笑话
输入开源+文章---发送消息到开源中国
输入快递+订单号---查询快递信息
输入天气---查询南京最近五天天气状况
输入微博热点---回复微博当前热门话题
输入电影+名称---回复百度云盘中搜索的链接

具体实现代码:

# -*- coding: utf-8 -*-
import hashlib
import web
import lxml
import time
import os
import urllib2,json
import urllib
import re
import random
import hashlib
import cookielib
from urllib import urlencode
from lxml import etree
 
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="weixin9047" #这里改写你在微信公众平台里输入的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#获得用户所输入的内容
    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 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko'}
      req = urllib2.Request(url, headers = headers)
      opener = urllib2.urlopen(req)
      html = opener.read()
      rex = r'(?<=img src="/image/s[0-9].gif" alt=").{1,6}(?=" />)'
      rexx = r'(?<=div class="temperature">).{5,15}(?=</div>)'
      n = re.findall(rex,html)
      m = re.findall(rexx,html)
      str_wether = ""
      for (i,j) in zip(m,n):
        str_wether = str_wether + j + "   " +i + "\n"
      return self.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 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko'}
      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""
      for i in m:
        string = string + i + "\n"
      return self.render.reply_text(fromUser,toUser,int(time.time()),u"以下是电影链接:\n"+string)
    elif(u"段子" in content):
      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 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko'}
      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'(?<=div class="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)
      return self.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; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0 Iceweasel/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()
      return self.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; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0 Iceweasel/38.3.0')]
      urllib2.install_opener(opener)
      html = urllib2.urlopen(url).read()
      jo = json.loads(html)
      typ = jo["auto"][0]['comCode']
      if(typ is None):
        return self.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"):
        return self.render.reply_text(fromUser,toUser,int(time.time()),u"订单号输入有误,请重新输入!") 
      text = jo_end["data"]
      string = u""
      for i in text:
        string = string + i["time"] + i["context"] + "\n"
      return self.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 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko'}
      req = urllib2.Request(url, headers = headers)
      opener = urllib2.urlopen(req)
      html = opener.read().decode("utf-8")
      rex = r'(?<=div class="c"><a href=").{60,79}(?=</a>)'
      ss = re.findall(rex,html)
      string = u""
      for i in ss:
        string = string + i.replace('>','\n')+"\n"
      return self.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; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0 Iceweasel/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])+"个赞同"
      return self.render.reply_text(fromUser,toUser,int(time.time()),string)
    elif(u"钟志远" in content):
      return self.render.reply_text(fromUser,toUser,int(time.time()),u"你想找全世界最帅的人干嘛?如果你是妹子,请加微信18362983803!汉子绕道!")
    elif(u"使用" in content):
      return self.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; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0 Iceweasel/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----[回复[使用]]"
        return self.render.reply_text(fromUser,toUser,int(time.time()),string)
      except Exception,ex:
        return self.render.reply_text(fromUser,toUser,int(time.time()),u"我不想理你了~")

以上就是本文的全部内容,希望对大家的学习有所帮助。

Python 相关文章推荐
浅谈Python中的可变对象和不可变对象
Jul 07 Python
利用python编写一个图片主色转换的脚本
Dec 07 Python
python实现网页自动签到功能
Jan 21 Python
Python中请不要再用re.compile了
Jun 30 Python
Python PyQt5 Pycharm 环境搭建及配置详解(图文教程)
Jul 16 Python
python中的&amp;&amp;及||的实现示例
Aug 07 Python
python 实现提取log文件中的关键句子,并进行统计分析
Dec 24 Python
详解python环境安装selenium和手动下载安装selenium的方法
Mar 17 Python
python中sys模块是做什么用的
Aug 16 Python
Python通过getattr函数获取对象的属性值
Oct 16 Python
详解tensorflow之过拟合问题实战
Nov 01 Python
关于Python3的import问题(pycharm可以运行命令行import错误)
Nov 18 Python
Python实例一个类背后发生了什么
Feb 09 #Python
Python中的条件判断语句基础学习教程
Feb 07 #Python
Python模拟登录验证码(代码简单)
Feb 06 #Python
Python上传package到Pypi(代码简单)
Feb 06 #Python
深入讲解Java编程中类的生命周期
Feb 05 #Python
python&amp;MongoDB爬取图书馆借阅记录
Feb 05 #Python
Python中常用操作字符串的函数与方法总结
Feb 04 #Python
You might like
Codeigniter实现多文件上传并创建多个缩略图
2014/06/12 PHP
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
2014/09/27 PHP
php实现将Session写入数据库
2015/07/26 PHP
PHP单元测试框架PHPUnit用法详解
2019/01/23 PHP
php写入文件不覆盖的实例讲解
2019/09/17 PHP
jquery JSON的解析方式
2009/07/25 Javascript
img标签中onerror用法
2009/08/13 Javascript
Extjs407 getValue()和getRawValue()区别介绍
2013/05/21 Javascript
Javascript字符串对象的常用方法简明版
2014/06/26 Javascript
jQuery实现多按钮单击变色
2014/11/27 Javascript
jquery实现无限分级横向导航菜单的方法
2015/03/12 Javascript
JS打字效果的动态菜单代码分享
2015/08/21 Javascript
JavaScript中for循环的几种写法与效率总结
2017/02/03 Javascript
bootstrap3-dialog-master模态框使用详解
2017/08/22 Javascript
jQuery选择器之子元素过滤选择器
2017/09/28 jQuery
vue 属性拦截实现双向绑定的实例代码
2018/10/24 Javascript
AngularJS实现的自定义过滤器简单示例
2019/02/02 Javascript
微信小程序websocket实现即时聊天功能
2019/05/21 Javascript
jQuery 图片查看器插件 Viewer.js用法简单示例
2020/04/04 jQuery
微信小程序实现转盘抽奖
2020/09/21 Javascript
Vue+element-ui添加自定义右键菜单的方法示例
2020/12/08 Vue.js
Python的MongoDB模块PyMongo操作方法集锦
2016/01/05 Python
Python缩进和冒号详解
2016/06/01 Python
django框架如何集成celery进行开发
2017/05/24 Python
解决DataFrame排序sort的问题
2018/06/07 Python
flask-socketio实现WebSocket的方法
2018/07/31 Python
django项目环境搭建及在虚拟机本地创建django项目的教程
2019/08/02 Python
Python函数装饰器原理与用法详解
2019/08/16 Python
Xadmin+rules实现多选行权限方式(级联效果)
2020/04/07 Python
使用OpenCV校准鱼眼镜头的方法
2020/11/26 Python
python 实现数据库中数据添加、查询与更新的示例代码
2020/12/07 Python
html5 学习简单的拾色器
2010/09/03 HTML / CSS
亚洲独特体验旅游专家:eOasia
2018/08/15 全球购物
编写类String 的构造函数、析构函数和赋值函数
2012/09/09 面试题
大学辅导员事迹材料
2014/02/05 职场文书
2019年大学生职业生涯规划书
2019/03/25 职场文书