热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python搭建微信公众平台

这篇文章主要介绍了python搭建微信公众平台的相关资料和技巧,感兴趣的朋友可以参考一下
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'(&#63;<=img src="/image/s[0-9].gif" alt=").{1,6}(&#63;=" />)'
      rexx = r'(&#63;<=p class="temperature">).{5,15}(&#63;=

)' 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&#63;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&#63;://pan.baidu.com.*\&#63;uk=[0-9]{10}.*[\d+&#63;]"' 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'(&#63;<=p class="content">).*&#63;(&#63;=','')) 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&#63;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&#63;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/&#63;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'(&#63;<=p class="c">','\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&#63;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"我不想理你了~")

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

推荐阅读
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
  • 在Ubuntu 16.04 LTS上配置Qt Creator开发环境
    本文详细介绍了如何在Ubuntu 16.04 LTS系统中安装和配置Qt Creator,涵盖了从下载到安装的全过程,并提供了常见问题的解决方案。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 自学编程与计算机专业背景者的差异分析
    本文探讨了自学编程者和计算机专业毕业生在技能、知识结构及职业发展上的不同之处,结合实际案例分析两者的优势与劣势。 ... [详细]
  • Composer Registry Manager:PHP的源切换管理工具
    本文介绍了一个用于Composer的源切换管理工具——Composer Registry Manager。该项目旨在简化Composer包源的管理和切换,避免与常见的CRM系统混淆,并提供了详细的安装和使用指南。 ... [详细]
  • 本文详细介绍了Git分布式版本控制系统中远程仓库的概念和操作方法。通过具体案例,帮助读者更好地理解和掌握如何高效管理代码库。 ... [详细]
author-avatar
luomo
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有