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. 解决使用Git找不到.ssh文件夹的办法

    解决使用Git找不到.ssh文件夹的办法 首先生成git密钥 git config --global user.name "你的名字(最好是中文全名)" git config -- ...

  2. 【VBA】类型转换

    每个函数都可以强制将一个表达式转换成某种特定数据类型. 语法 CBool(expression) CByte(expression) CCur(expression) CDate(expression ...

  3. 【模拟7.29】大佬(概率期望DP)

    首先根据数据范围,可以判断基本上是n^2的复杂度 通过分析我们发现每一次都可以从m个数中任意选,既然任意选,那么此时的概率的分母就是不变的,然而题中涉及的是某一段的最大值,所以我们按套路假设 f[i] ...

  4. 4.6 Python3 进阶 - 递归函数

    >>返回主目录 源码 # 定义及特性 # 简单递归思维练习,求和:1+2+3+-+100 # 思路:sum(100) = sum(99) + 100 # sum(99) = sum(98) ...

  5. vue+element表格

    效果图 备注:前后端分离实现效果 接下来是代码环节 <template>   <div class="comprehensive-table-container" ...

  6. 【原创】SystemVerilog中的多态和虚方法

    封装可以隐藏实现细节,使代码模块化,继承可以扩展已经存在的代码模块,目的都是为了代码重用.多态是为了实现接口的重用.在SystemVerilog中,子类和父类之间多个子程序使用同一个名字的现象称为Sy ...

  7. Jquery 插件 chosen_v1.8.7 下拉复选框带搜索功能

    地址:https://harvesthq.github.io/chosen/ 效果: 因为只需要这个功能,就只研究这个功能了,代码: <!doctype html> <html la ...

  8. SonarQube 启动无报错但是拒绝访问的解决过程及方案

    启动sonarqube [sonar_user@Sonnarqube-dev linux-x86-64]$ ./sonar.sh start 查看网页: 排错步骤 第一步输入启动过程命令查看启动信息 ...

  9. 使用 Cron4j 表达式 在 Solon 里开发定时任务

    cron4j 是一个轻量级的Java任务调度工具.cron4j-solon-plugin 是 solon 对 cron4j 的适配插件 添加 maven 引用 <dependency> & ...

  10. 容器化-Docker-1-速查手册-Docker常用命令

    目录 备注 常用命令 Docker镜像管理(操作对象是镜像) Docker容器管理(操作对象是容器) 容器外挂目录(宿主目录映射到容器中) 这篇文章的目的就是把最常用的命令列出来,没时间看速查命令使用 ...