python调用QQ机器人向指定QQ发消息
暂时没想到这个能用来干什么,只是刚好看到相关文章,学习一下,就拿获取基金信息来做试验把
爬取基金的信息就不介绍了,请参考https://www.cnblogs.com/becks/p/14500495.html
这里主要是对输出内容修改了,改成不写入表格,实时打印出来
正文,通过调用别人已经架设好的QQ消息服务来给指定QQ发送消息
消息服务提供方https://qmsg.zendee.cn/index.html
我们先要到这里面注册账号,选择QQ机器人,绑定发送对象(QQ),获取key
下面截图页面标签对应QQ机器人,绑定发送对象(QQ),获取key。
设置好后,接收消息的QQ需要添加机器人QQ为好友(不加好友咋给你发消息)
然后就是python脚本中的代码部分,直接提取关键
qmsg_code = 'https://qmsg.zendee.cn/send/key?msg=' jj = qmsg_code + str(name[0]) + '\n' +"当前估值" + str(GUZHI[0]) + '\n' + "盘中涨跌" + ZHANGDIE[0] message_send = requests.get(jj)
解析一下
第一行是固定内容,提供服务的接口地址(未包含发送内容),里面有个key,就是上面图片里注册申请后的key
第二行是发送的内容,由接口地址和实际发送内容组成(参数),这里是指,地址+基金名称+当前估值+盘中涨跌
第三行请求接口+参数,执行后,机器人即发送消息。下图样子
附上所有代码咯
# -*-coding:utf8-*- # encoding:utf-8 import requests import re import time import random import openpyxl import xlrd import requests cookies = { 'em_hq_fls': 'js', 'em-quote-version': 'topspeed', 'HAList': 'f-0-000001-%u4E0A%u8BC1%u6307%u6570%2Ca-sz-002496-%u8F89%u4E30%u80A1%u4EFD%2Ca-sz-002458-%u76CA%u751F%u80A1%u4EFD%2Ca-sz-000615-%u4EAC%u6C49%u80A1%u4EFD%2Ca-sh-601398-%u5DE5%u5546%u94F6%u884C%2Ca-sh-601577-%u957F%u6C99%u94F6%u884C%2Ca-sz-002948-%u9752%u5C9B%u94F6%u884C%2Ca-sz-000651-%u683C%u529B%u7535%u5668%2Ca-sz-002075-%u6C99%u94A2%u80A1%u4EFD%2Ca-sz-000932-%u534E%u83F1%u94A2%u94C1%2Ca-sz-300104-%u4E50%u89C6%u7F51%2Ca-sh-603305-%u65ED%u5347%u80A1%u4EFD', '__guid': '41353141.1145764407078476400.1605601056797.9084', 'EMFUND1': 'null', 'EMFUND2': 'null', 'EMFUND3': 'null', 'EMFUND4': 'null', 'EMFUND5': 'null', 'EMFUND6': 'null', 'EMFUND7': 'null', 'qgqp_b_id': '10cff73dbfe1d89e1ae2accf1bd69820', 'EMFUND0': 'null', 'EMFUND8': '03-08%2017%3A55%3A43@%23%24%u6613%u65B9%u8FBE%u4E0A%u8BC150%u589E%u5F3AA@%23%24110003', 'ASP.NET_SessionId': 'bfgbzgfpspgvks3vt5ybbprx', 'st_si': '46448399938903', 'st_asi': 'delete', 'monitor_count': '7', 'st_pvi': '67980443940531', 'st_sp': '2018-09-21%2009%3A10%3A49', 'st_inirUrl': 'https%3A%2F%2Fwww.baidu.com%2Flink', 'st_sn': '7', 'st_psi': '20210315140331255-0-0163083037', } headers = { 'Connection': 'keep-alive', 'Pragma': 'no-cache', 'Cache-Control': 'no-cache', 'Upgrade-Insecure-Requests': '1', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 'Sec-Fetch-Site': 'none', 'Sec-Fetch-Mode': 'navigate', 'Sec-Fetch-User': '?1', 'Sec-Fetch-Dest': 'document', 'Accept-Language': 'zh-CN,zh;q=0.9', } #读取表格内的基金代码 def code(): wb = xlrd.open_workbook('更新数据.xlsx')# 打开Excel文件 data = wb.sheet_by_name('Sheet1')#通过excel表格名称(rank)获取工作表 b=data.col_values(1)#获取第一列数据(数组) list=[] for c in b[1:]:#for循环,排除第一行数据 d=int(c) s="%06d" % d#股票代码一共有6位,常规打印无法打印出首位带0的代码的0部分,补齐缺失的0 #print(s) list.append(s) return(list) code=code() def data(cookies,headers,code): for num in code: response = requests.get('https://fundf10.eastmoney.com/jjjz_'+num+'.html', headers=headers, cookies=cookies) response.encoding = 'utf-8' #处理编码得步骤 response = response.text #获取基金名称及代码 name = re.findall('<title>(.+?)基金历史净值 _ 基金档案 _ 天天基金网</title>', response, re.S) #获取盘中估值 valueD = re.findall('<span id="fund_gsz" class="grn lar bold guzhi">(.+?)</span>', response, re.S) if len(valueD)>0: #如果返回值长度大于0,即可理解为当天是跌,value从valueD取值 GUZHI = valueD else: #否则,即可理解为当天是涨,value从valueZ取值 valueZ = re.findall('<span id="fund_gsz" class="red lar bold guzhi">(.+?)</span>', response, re.S)#当天净值为涨 GUZHI = valueZ #获取盘中涨跌幅 valueG = re.findall('<span id="fund_gszf" class="grn lar bold ">(.+?)</span>', response, re.S) if len(valueG)>0: #如果返回值长度大于0,即可理解为当天是跌,value从valueD取值 ZHANGDIE = valueG else: #否则,即可理解为当天是涨,value从valueZ取值 valueZ = re.findall('<span id="fund_gszf" class="red lar bold ">(.+?)</span>', response, re.S)#当天净值为涨 ZHANGDIE = valueZ #print(str(name[0])) #print("当前估值" + str(GUZHI[0])) #print("盘中涨跌" + ZHANGDIE[0]) #print("......................") qmsg_code = 'https://qmsg.zendee.cn/send/key?msg=' jj = qmsg_code + str(name[0]) + '\n' +"当前估值" + str(GUZHI[0]) + '\n' + "盘中涨跌" + ZHANGDIE[0] message_send = requests.get(jj) print(str(name[0])+'发送成功') data(cookies,headers,code) #time.sleep(30)