微信机器人项目开发--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)
心有猛虎,细嗅蔷薇
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步