python搭建微信公众平台

作者:lijiao 时间:2022-05-24 00:14:09 

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,微信
0
投稿

猜你喜欢

  • Django基础之Model操作步骤(介绍)

    2022-04-12 12:17:50
  • Python字符串字母大小写转换的各种情况详析

    2023-11-23 07:35:41
  • ASP实现文件直接下载的代码

    2011-04-11 10:56:00
  • MySQL环境下导入数据时是否需要禁用索引

    2009-01-04 12:42:00
  • 关于ASP eof与bof 区别分析

    2011-03-11 11:14:00
  • Python 多进程并发操作中进程池Pool的实例

    2022-06-28 16:31:37
  • SQL SERVER的字段类型介绍

    2008-05-23 13:27:00
  • 新功能的帮助与破坏

    2010-01-17 10:15:00
  • python爬虫爬取网页数据并解析数据

    2022-03-03 06:25:02
  • Python+OpenCV之形态学操作详解

    2021-11-24 23:37:58
  • 详解python中的线程与线程池

    2022-02-02 18:27:19
  • ASP使用FSO组件生成HTML静态页面

    2007-10-15 12:19:00
  • 学习ASP.NET八天入门:第五天

    2007-08-07 13:43:00
  • 交互设计模式(二)-Pagination(分页,标记页数)

    2009-08-03 13:37:00
  • 怎样解决MySQL 5.0.16的乱码问题

    2008-10-13 12:47:00
  • Python实现自动化刷抖音的实例

    2023-07-20 19:16:15
  • 通过python检测字符串的字母

    2023-01-11 22:49:47
  • 内容适应形式

    2010-03-18 16:09:00
  • ORACLE 回收站当前状态查询整理

    2023-07-14 09:23:01
  • python中 _、__、__xx__()区别及使用场景

    2021-07-28 06:10:48
  • asp之家 网络编程 m.aspxhome.com