首页 > 编程 > Python > 正文

python搭建微信公众平台

2020-01-04 17:46:31
字体:
来源:转载
供稿:网友
这篇文章主要介绍了python搭建微信公众平台的相关资料和技巧,感兴趣的朋友可以参考一下
 

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

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

具体实现代码:

# -*- coding: utf-8 -*-import hashlibimport webimport lxmlimport timeimport osimport urllib2,jsonimport urllibimport reimport randomimport hashlibimport cookielibfrom urllib import urlencodefrom 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"      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"我不想理你了~") 

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表