1、外网穿透工具下载与注册【http://ngrok.ciqiuwl.cn/

2、公众号审请

3、代码编写

  1. 糗事百科接口
  2. # _*_ coding:utf-8 _*_
  3. import requests
  4. from lxml import etree
  5. from random import randint
  6.  
  7. def get_joke():
  8. url="http://www.qiushibaike.com/text/page/"+ str(randint(1,5))
  9. r = requests.get(url)
  10. tree = etree.HTML(r.text)
  11. contentlist = tree.xpath('//div[@class="content"]/span')
  12. jokes = []
  13. for content in contentlist:
  14. content = content.xpath('string(.)') # string() 函数将所有子文本串联起来,# 必须传递单个节点,而不是节点集。
  15. if '查看全文' in content: # 忽略包含“查看原文”笑话
  16. continue
  17. jokes.append(content)
  18. joke = jokes[randint(1, len(jokes))].strip()
  19. return joke
  20.  
  21. if __name__ == "__main__":
  22. content = get_joke()
  23. print(content)

    结果:

看到好友动态一个治脚气的偏方晚上我准备调配好给老公泡脚,刚放姜片,盐和醋,我女儿跑过来正好看见我拉着她爸爸的脚往盆里放,

盆里还有调料淌着哈喇子蹲下来就问我:麻麻,我们晚上吃爸爸脚丫子呀



  1. 查询天气接口
  2. import requests
  3. from lxml import etree
  4.  
  5. def get_weather(keyword):
  6. url = 'https://www.tianqi.com/tianqi/search?keyword=' + keyword
  7. headers = {
  8. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
  9. }
  10. response = requests.get(url,headers=headers)
  11. tree = etree.HTML(response.text)
  12. # 检测城市天气是否存在
  13. try:
  14. city_name = tree.xpath('//dd[@class="name"]/h2/text()')[0]
  15. except:
  16. content = '没有该城市天气信息,请确认查询格式'
  17. return content
  18. week = tree.xpath('//dd[@class="week"]/text()')[0]
  19. now = tree.xpath('//p[@class="now"]')[0].xpath('string(.)')
  20. temp = tree.xpath('//dd[@class="weather"]/span')[0].xpath('string(.)')
  21. shidu = tree.xpath('//dd[@class="shidu"]/b/text()')
  22. kongqi = tree.xpath('//dd[@class="kongqi"]/h5/text()')[0]
  23. pm = tree.xpath('//dd[@class="kongqi"]/h6/text()')[0]
  24. content = "【{0}】{1}天气\n当前温度:{2}\n今日天气:{3}\n{4}\n{5}\n{6}".format(city_name, week.split('\u3000')[0], now, temp, '\n'.join(shidu),kongqi,pm)
  25. return content
  26.  
  27. if __name__ == "__main__":
  28. keyword = '北京'
  29. content = get_weather(keyword)
  30. print(content)

    结果:

【北京】2020年09月01日 星期二 庚子年七月十四 天气
当前温度:21℃
今日天气:多云18 ~ 32℃
湿度:64%
风向:东北风 1级
紫外线:无
空气质量:优
PM: 5

  1. 启动flask服务
  2.  
  3. from flask import Flask
  4.  
  5. app = Flask(__name__)
  6. @app.route('/')
  7. def hello():
  8. return 'Hello World'
  9.  
  10. if __name__ == "__main__":
  11. app.run(host='127.0.0.1', port=8088,debug=True)

  1. 微信机器人代码

  2. # _*_ coding:utf-8 _*_
  3. from config import TOKEN,XML_STR
  4. from flask import Flask, request, make_response
  5. import hashlib
  6. import xml.etree.ElementTree as ET
  7. from weather import get_weather
  8. from joke import get_joke
  9.  
  10. app = Flask(__name__) # 实例化一个Flask app
  11.  
  12. @app.route('/message', methods=['GET', 'POST']) # 路由
  13. def chatme(): # 定义控制器函数gf
  14. if request.method == 'GET': # GET请求
  15. data = request.args # 获取GET请求的参数
  16. token = TOKEN # 微信接口调用的token
  17. signature = data.get('signature', '') # 微信接口调用的签名
  18. timestamp = data.get('timestamp', '') # 微信接口相关时间戳参数
  19. nonce = data.get('nonce', '') # 微信接口相关nonce参数
  20. echostr = data.get('echostr', '') # 微信接口相关echostr参数
  21. s = [timestamp, nonce, token]
  22. s = ''.join(s).encode("utf-8") # 连接字符串用来校验签名
  23.  
  24. if hashlib.sha1(s).hexdigest() == signature: # 校验签名
  25. return make_response(echostr)
  26.  
  27. else: # 响应签名错误
  28. return make_response("signature validation error")
  29. if request.method == 'POST':
  30. xml_str = request.stream.read()
  31. xml = ET.fromstring(xml_str)
  32. toUserName = xml.find('ToUserName').text
  33. fromUserName = xml.find('FromUserName').text
  34. createTime = xml.find('CreateTime').text
  35. msgType = xml.find('MsgType').text
  36. # 判断是否文本消息
  37. if msgType != 'text':
  38. reply = XML_STR % (
  39. fromUserName,
  40. toUserName,
  41. createTime,
  42. 'text',
  43. 'Unknow Format, Please check out'
  44. )
  45. return reply
  46. content = xml.find('Content').text
  47. msgId = xml.find('MsgId').text
  48. if u'笑话' in content: # 输出笑话
  49. content = get_joke()
  50. elif content[-2:] == u"天气": # 输出天气
  51. keyword = content[:-2]
  52. if len(keyword) < 2:
  53. content = u'请输入正确的城市名称'
  54. return XML_STR % (fromUserName, toUserName, createTime, msgType, content)
  55. content = get_weather(keyword)
  56. else:
  57. # 输出反话
  58. if type(content).__name__ == "unicode":
  59. content = content[::-1]
  60. content = content.encode('UTF-8')
  61. elif type(content).__name__ == "str":
  62. print(type(content).__name__)
  63. content = content
  64. content = content[::-1]
  65.  
  66. # 返回xml文件
  67. reply = XML_STR % (fromUserName, toUserName, createTime, msgType, content)
  68. return reply
  69.  
  70. if __name__ == "__main__":
  71. app.run(host='0.0.0.0', port=80,debug=True)

微信机器人项目开发--python的更多相关文章

  1. 2020年09月15日-项目开发-python二次处理代码文件

    Caterpillar通过将BPMN生成为solidity代码后, 我需要对solidity代码做二次处理,即在其中的特定函数中插入event类型,以便去做事件监听. 最终生成的不仅包括solidit ...

  2. Python创建微信机器人

    微信,一个日活10亿的超级app,不仅在国内社交独领风骚,在国外社交也同样占有一席之地,今天我们要将便是如何用Python来生成一个微信机器人,突然想起鲁迅先生曾经说过的一句话:因为是微信机器人系列的 ...

  3. Python自制微信机器人:群发消息、自动接收好友

    运营公众号也有半年了,今年5月份开始的,之前一直用一款windows工具来运营自动接受好友请求.群发文章.自动回复等操作,但颇有不便. 举几个场景: 突然在外面看到一篇文章很好,临时写了一篇,想群发一 ...

  4. phantomjs + python 打造一个微信机器人

    phantomjs + python 打造一个微信机器人 1.前奏   媳妇公司不能上网,但经常需要在公众号上找一些文章做一些参考,需要的时候就把文章链接分享给我,然后我在浏览器打开网页,一点点复制过 ...

  5. python+爬虫+微信机器人 打造属于你的网购价格监督利器

    写在最前 程序是为人类服务的,最近正好身边小伙伴们在做球衣生意,当然是去nikenba专区购买了,可是有些热门球衣发布几分钟就被抢完,有些折扣球衣也是很快就被抢售一空,那么我们只能靠自己的眼睛一直盯着 ...

  6. 你的网购价格监督利器——python+爬虫+微信机器人

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:风,又奈何 PS:如有需要Python学习资料的小伙伴可以加点击下方链 ...

  7. C#开发微信门户及应用(43)--微信各个项目模块的定义和相互关系

    我们在开发微信相关的应用的时候,一般需要完善的基础模块支持,包括微信公众号,微信企业号,以及一些业务模块的支持,一般随着功能的增多,我们需要非常清晰的界定他们的关系.模块的分拆以及合并往往需要考虑的代 ...

  8. atitit.微信项目开发效率慢的一些总结

    atitit.微信项目开发效率慢的一些总结 #---理念问题..这个是最大的问题.. 要有专人提升开发效率才好.. #---没有一个好的开发方法体系.... ini deve 法. fell asd+ ...

  9. 微信公众账号开发教程(三) 实例入门:机器人(附源码) ——转自http://www.cnblogs.com/yank/p/3409308.html

    一.功能介绍 通过微信公众平台实现在线客服机器人功能.主要的功能包括:简单对话.查询天气等服务. 这里只是提供比较简单的功能,重在通过此实例来说明公众平台的具体研发过程.只是一个简单DEMO,如果需要 ...

随机推荐

  1. Bind DNS服务——基础知识

    Linux基础--Bind DNS服务 Part0 DNS简介 域名系统(英语:Domain Name System,缩写:DNS)是互联网的一项服务.它作为将域名和IP地址相互映射的一个分布式数据库 ...

  2. 用Java如何设计一个阻塞队列,然后说说ArrayBlockingQueue和LinkedBlockingQueue

    前言 用Java如何设计一个阻塞队列,这个问题是在面滴滴的时候被问到的.当时确实没回答好,只是说了用个List,然后消费者再用个死循环一直去监控list的是否有值,有值的话就处理List里面的内容.回 ...

  3. 【NX二次开发】三点画圆,三角形外心,已知三点求圆心

    已知P1.P2.P3,求点O 算法:三点不在一条直线上时,通过连接任意两点,作中垂线.任意两条中垂线的交点是圆心.

  4. UF_LAYOUT 布局相关

    Open C uc6460uc6462uc6463uc6464  根据视图名称旋转视图,在布局中替换视图uc6466uc6467uc6468uc6469uc6470uc6471uc6472uc6473

  5. 【odoo14】【开发侧】权限配置

    欢迎转载,但需标注出处,谢谢! 说明: 本文面向开发人员,普通用户可参考[odoo14][用户侧]权限配置.文章结构与用户侧一致. 目录 一. odoo中的对象 二. 权限控制 2.1 实现原理 2. ...

  6. Java并发之ReentrantLock源码解析(一)

    ReentrantLock ReentrantLock是一种可重入的互斥锁,它的行为和作用与关键字synchronized有些类似,在并发场景下可以让多个线程按照一定的顺序访问同一资源.相比synch ...

  7. 简聊DFA(确定性有限状态自动机)

    状态机理论最初的发展在数字电路设计领域.而在软件设计领域,状态机设计的理论俨然已经自成一体. 状态机是软件编程中的一个重要概念,比这个概念更重要的是对它的灵活应用.在一个思路清晰而且高效的程序中,必然 ...

  8. Linux中su和sudo的用法

    su -#su - oldboy //当执行这个命令的时候表示切换到oldboy用户,并且重新读取用户环境相关配置文件,具体的来说就是执行下用户家目录下.bash_profile和.bashrc文件, ...

  9. 5、修改oracle的字符集

    注意:修改字符集前需要将表空间进行数据泵备份: 5.1.修改server端字符集: 1.登录到oracle实例查看字符集: [oracle@slave-node2 ~]$ echo $ORACLE_S ...

  10. Jenkins 凭证 Devops 的粘合剂

    大家好,我是小猿来也,一个热衷于搞 Devops 自动化的 Java 程序猿. 万事具备,只欠东风.当我决定大搞特搞 Devops 的时候,Jenkins 凭证却傻傻分不清. 玩 Devops 的小伙 ...