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的更多相关文章

  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. SpringBoot数据访问(一) SpringBoot整合Mybatis

    前言 SpringData是Spring提供的一个用于简化数据库访问.支持云服务的开源框架.它是一个伞形项目,包含了大量关系型数据库及非关系型数据库的数据访问解决方案,其设计目的是为了使我们可以快速且 ...

  2. 【C++】map容器的用法

    检测map容器是否为空: 1 #include <iostream> 2 #include<map> 3 #include<string> 4 using name ...

  3. Echarts的使用教程

    项目中需要使用图表,最初使用的.NET自带的MSChart控件,做出来的效果不太好,所以又使用了Echarts控件. MSChart源码放在最后,可自行下载查看. Echarts是一个基于 JavaS ...

  4. .NET Core/.NET5/.NET6 开源项目汇总2:任务调度组件

    系列目录     [已更新最新开发文章,点击查看详细] 开源项目是众多组织与个人分享的组件或项目,作者付出的心血我们是无法体会的,所以首先大家要心存感激.尊重.请严格遵守每个项目的开源协议后再使用.尊 ...

  5. Java-学习日记(Atomic,Volatile)

    很早之前在公司就看到了atomicInteger,atomicLong这些变量了,一直不明白是什么意思,今天花了点时间了解下. volatile: 先从volatile开始讲起,volatile是多线 ...

  6. 《手把手教你》系列基础篇之(四)-java+ selenium自动化测试- 启动三大浏览器(下)基于Maven(详细教程)

    1.简介 上一篇文章,宏哥已经在搭建的java项目环境中实践了,今天就在基于maven项目的环境中给小伙伴们 或者童鞋们演示一下. 2.eclipse中新建maven项目 1.依次点击eclipse的 ...

  7. OSPF路由协议

    一.OSPF的工作过程 二.OSPF的基本概念 三.DR与BDR 四.OSPF数据包类型 五.OSPF邻接关系的建立 六.OSPF的路由器类型 一.OSPF的工作过程 OSPF路由协议针对每一个区域分 ...

  8. Unity中各种查找物体的方法

    本文转自博主:Teng的世界 https://blog.csdn.net/teng_ontheway/article/details/47188141 GameObject.Find().Transf ...

  9. 技术如何转产品01——1+1>2?

    当业务复杂到一定阶段的时候,效率问题会首当其冲,基本解法是化整为零.分赛道,对应的产物可以是子公司>>事业部>业务单元>项目组. ​好处是目标聚焦.所以问题也会聚焦,工作内容闭 ...

  10. 7.2、compute节点配置

    用于创建虚拟机的节点: 0.配置openstack版本yum源: yum install centos-release-openstack-rocky 1.nova-compute的安装: (1)安装 ...