微信机器人项目开发--python
1、外网穿透工具下载与注册【http://ngrok.ciqiuwl.cn/】
2、公众号审请
3、代码编写
- 糗事百科接口
- # _*_ coding:utf-8 _*_
- import requests
- from lxml import etree
- from random import randint
- def get_joke():
- url="http://www.qiushibaike.com/text/page/"+ str(randint(1,5))
- r = requests.get(url)
- tree = etree.HTML(r.text)
- contentlist = tree.xpath('//div[@class="content"]/span')
- jokes = []
- for content in contentlist:
- content = content.xpath('string(.)') # string() 函数将所有子文本串联起来,# 必须传递单个节点,而不是节点集。
- if '查看全文' in content: # 忽略包含“查看原文”笑话
- continue
- jokes.append(content)
- joke = jokes[randint(1, len(jokes))].strip()
- return joke
- if __name__ == "__main__":
- content = get_joke()
- print(content)
结果:
看到好友动态一个治脚气的偏方晚上我准备调配好给老公泡脚,刚放姜片,盐和醋,我女儿跑过来正好看见我拉着她爸爸的脚往盆里放,
盆里还有调料淌着哈喇子蹲下来就问我:麻麻,我们晚上吃爸爸脚丫子呀
- 查询天气接口
- import requests
- from lxml import etree
- def get_weather(keyword):
- url = 'https://www.tianqi.com/tianqi/search?keyword=' + keyword
- headers = {
- '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'
- }
- response = requests.get(url,headers=headers)
- tree = etree.HTML(response.text)
- # 检测城市天气是否存在
- try:
- city_name = tree.xpath('//dd[@class="name"]/h2/text()')[0]
- except:
- content = '没有该城市天气信息,请确认查询格式'
- return content
- week = tree.xpath('//dd[@class="week"]/text()')[0]
- now = tree.xpath('//p[@class="now"]')[0].xpath('string(.)')
- temp = tree.xpath('//dd[@class="weather"]/span')[0].xpath('string(.)')
- shidu = tree.xpath('//dd[@class="shidu"]/b/text()')
- kongqi = tree.xpath('//dd[@class="kongqi"]/h5/text()')[0]
- pm = tree.xpath('//dd[@class="kongqi"]/h6/text()')[0]
- 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)
- return content
- if __name__ == "__main__":
- keyword = '北京'
- content = get_weather(keyword)
- print(content)
结果:
【北京】2020年09月01日 星期二 庚子年七月十四 天气
当前温度:21℃
今日天气:多云18 ~ 32℃
湿度:64%
风向:东北风 1级
紫外线:无
空气质量:优
PM: 5
- 启动flask服务
- from flask import Flask
- app = Flask(__name__)
- @app.route('/')
- def hello():
- return 'Hello World'
- if __name__ == "__main__":
- app.run(host='127.0.0.1', port=8088,debug=True)
- 微信机器人代码
- # _*_ coding:utf-8 _*_
- from config import TOKEN,XML_STR
- from flask import Flask, request, make_response
- import hashlib
- import xml.etree.ElementTree as ET
- from weather import get_weather
- from joke import get_joke
- app = Flask(__name__) # 实例化一个Flask app
- @app.route('/message', methods=['GET', 'POST']) # 路由
- def chatme(): # 定义控制器函数gf
- if request.method == 'GET': # GET请求
- data = request.args # 获取GET请求的参数
- token = TOKEN # 微信接口调用的token
- signature = data.get('signature', '') # 微信接口调用的签名
- timestamp = data.get('timestamp', '') # 微信接口相关时间戳参数
- nonce = data.get('nonce', '') # 微信接口相关nonce参数
- echostr = data.get('echostr', '') # 微信接口相关echostr参数
- s = [timestamp, nonce, token]
- s = ''.join(s).encode("utf-8") # 连接字符串用来校验签名
- if hashlib.sha1(s).hexdigest() == signature: # 校验签名
- return make_response(echostr)
- else: # 响应签名错误
- return make_response("signature validation error")
- if request.method == 'POST':
- xml_str = request.stream.read()
- xml = ET.fromstring(xml_str)
- toUserName = xml.find('ToUserName').text
- fromUserName = xml.find('FromUserName').text
- createTime = xml.find('CreateTime').text
- msgType = xml.find('MsgType').text
- # 判断是否文本消息
- if msgType != 'text':
- reply = XML_STR % (
- fromUserName,
- toUserName,
- createTime,
- 'text',
- 'Unknow Format, Please check out'
- )
- return reply
- content = xml.find('Content').text
- msgId = xml.find('MsgId').text
- if u'笑话' in content: # 输出笑话
- content = get_joke()
- elif content[-2:] == u"天气": # 输出天气
- keyword = content[:-2]
- if len(keyword) < 2:
- content = u'请输入正确的城市名称'
- return XML_STR % (fromUserName, toUserName, createTime, msgType, content)
- content = get_weather(keyword)
- else:
- # 输出反话
- if type(content).__name__ == "unicode":
- content = content[::-1]
- content = content.encode('UTF-8')
- elif type(content).__name__ == "str":
- print(type(content).__name__)
- content = content
- content = content[::-1]
- # 返回xml文件
- reply = XML_STR % (fromUserName, toUserName, createTime, msgType, content)
- return reply
- if __name__ == "__main__":
- app.run(host='0.0.0.0', port=80,debug=True)
微信机器人项目开发--python的更多相关文章
- 2020年09月15日-项目开发-python二次处理代码文件
Caterpillar通过将BPMN生成为solidity代码后, 我需要对solidity代码做二次处理,即在其中的特定函数中插入event类型,以便去做事件监听. 最终生成的不仅包括solidit ...
- Python创建微信机器人
微信,一个日活10亿的超级app,不仅在国内社交独领风骚,在国外社交也同样占有一席之地,今天我们要将便是如何用Python来生成一个微信机器人,突然想起鲁迅先生曾经说过的一句话:因为是微信机器人系列的 ...
- Python自制微信机器人:群发消息、自动接收好友
运营公众号也有半年了,今年5月份开始的,之前一直用一款windows工具来运营自动接受好友请求.群发文章.自动回复等操作,但颇有不便. 举几个场景: 突然在外面看到一篇文章很好,临时写了一篇,想群发一 ...
- phantomjs + python 打造一个微信机器人
phantomjs + python 打造一个微信机器人 1.前奏 媳妇公司不能上网,但经常需要在公众号上找一些文章做一些参考,需要的时候就把文章链接分享给我,然后我在浏览器打开网页,一点点复制过 ...
- python+爬虫+微信机器人 打造属于你的网购价格监督利器
写在最前 程序是为人类服务的,最近正好身边小伙伴们在做球衣生意,当然是去nikenba专区购买了,可是有些热门球衣发布几分钟就被抢完,有些折扣球衣也是很快就被抢售一空,那么我们只能靠自己的眼睛一直盯着 ...
- 你的网购价格监督利器——python+爬虫+微信机器人
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:风,又奈何 PS:如有需要Python学习资料的小伙伴可以加点击下方链 ...
- C#开发微信门户及应用(43)--微信各个项目模块的定义和相互关系
我们在开发微信相关的应用的时候,一般需要完善的基础模块支持,包括微信公众号,微信企业号,以及一些业务模块的支持,一般随着功能的增多,我们需要非常清晰的界定他们的关系.模块的分拆以及合并往往需要考虑的代 ...
- atitit.微信项目开发效率慢的一些总结
atitit.微信项目开发效率慢的一些总结 #---理念问题..这个是最大的问题.. 要有专人提升开发效率才好.. #---没有一个好的开发方法体系.... ini deve 法. fell asd+ ...
- 微信公众账号开发教程(三) 实例入门:机器人(附源码) ——转自http://www.cnblogs.com/yank/p/3409308.html
一.功能介绍 通过微信公众平台实现在线客服机器人功能.主要的功能包括:简单对话.查询天气等服务. 这里只是提供比较简单的功能,重在通过此实例来说明公众平台的具体研发过程.只是一个简单DEMO,如果需要 ...
随机推荐
- Bind DNS服务——基础知识
Linux基础--Bind DNS服务 Part0 DNS简介 域名系统(英语:Domain Name System,缩写:DNS)是互联网的一项服务.它作为将域名和IP地址相互映射的一个分布式数据库 ...
- 用Java如何设计一个阻塞队列,然后说说ArrayBlockingQueue和LinkedBlockingQueue
前言 用Java如何设计一个阻塞队列,这个问题是在面滴滴的时候被问到的.当时确实没回答好,只是说了用个List,然后消费者再用个死循环一直去监控list的是否有值,有值的话就处理List里面的内容.回 ...
- 【NX二次开发】三点画圆,三角形外心,已知三点求圆心
已知P1.P2.P3,求点O 算法:三点不在一条直线上时,通过连接任意两点,作中垂线.任意两条中垂线的交点是圆心.
- UF_LAYOUT 布局相关
Open C uc6460uc6462uc6463uc6464 根据视图名称旋转视图,在布局中替换视图uc6466uc6467uc6468uc6469uc6470uc6471uc6472uc6473
- 【odoo14】【开发侧】权限配置
欢迎转载,但需标注出处,谢谢! 说明: 本文面向开发人员,普通用户可参考[odoo14][用户侧]权限配置.文章结构与用户侧一致. 目录 一. odoo中的对象 二. 权限控制 2.1 实现原理 2. ...
- Java并发之ReentrantLock源码解析(一)
ReentrantLock ReentrantLock是一种可重入的互斥锁,它的行为和作用与关键字synchronized有些类似,在并发场景下可以让多个线程按照一定的顺序访问同一资源.相比synch ...
- 简聊DFA(确定性有限状态自动机)
状态机理论最初的发展在数字电路设计领域.而在软件设计领域,状态机设计的理论俨然已经自成一体. 状态机是软件编程中的一个重要概念,比这个概念更重要的是对它的灵活应用.在一个思路清晰而且高效的程序中,必然 ...
- Linux中su和sudo的用法
su -#su - oldboy //当执行这个命令的时候表示切换到oldboy用户,并且重新读取用户环境相关配置文件,具体的来说就是执行下用户家目录下.bash_profile和.bashrc文件, ...
- 5、修改oracle的字符集
注意:修改字符集前需要将表空间进行数据泵备份: 5.1.修改server端字符集: 1.登录到oracle实例查看字符集: [oracle@slave-node2 ~]$ echo $ORACLE_S ...
- Jenkins 凭证 Devops 的粘合剂
大家好,我是小猿来也,一个热衷于搞 Devops 自动化的 Java 程序猿. 万事具备,只欠东风.当我决定大搞特搞 Devops 的时候,Jenkins 凭证却傻傻分不清. 玩 Devops 的小伙 ...