项目需求
现在各行各业对数字货币都十分关注,今天带来的项目是定时关注iNFR的数字行情监控,监控指定数字货币的行情,超过心中指定的价位,即使发送信息提醒,不要让你错过买的时机。
需要程序和包
- Fiddler 抓包工具
- Google 浏览器
- VScode 编辑器
- Python 3.8.5
- Python 包
- requests (爬虫包)
- email (邮件包)
- smtplib (邮件包)
数据获取
为了保证网站数据安全与正常使用,网站关键性数据已隐藏。
- 数据分析时,找到关键性的url数据包
- 分析后,只要修改后面的id值,可得到对应的json数据包,将其写成dict模式,方便后面调用
category = { 'all' : 'all', 'iBox' : 'c8gb15q2dtei4q721ukg', '唯一艺术' : 'c8gcana2dtei4q721ur0', 'zTag':'c8uvgr9uk5rrg142ol02', '优版权':'c98g101uk5ro4vqnqjeg', '幻藏':'c98gb69uk5ro4vqnqka0', 'Art Meta':'c98gdt9uk5ro4vqnqkgg', }
- 获取数据
headers = { 'User-Agent': r'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36', 'Cookie': 'Hm_lvt_97ec653ce3458e152c3a8bc9e02fa66d=1652278211;Hm_lpvt_97ec653ce3458e152c3a8bc9e02fa66d=1652278269' } category = { 'all' : 'all', 'iBox' : 'c8gb15q2dtei4q721ukg', '唯一艺术' : 'c8gcana2dtei4q721ur0', 'zTag':'c8uvgr9uk5rrg142ol02', '优版权':'c98g101uk5ro4vqnqjeg', '幻藏':'c98gb69uk5ro4vqnqka0', 'Art Meta':'c98gdt9uk5ro4vqnqkgg', } url = 'https://XXXX.XXXX.XXX/XX/tourist/platform/detective/rt/query?platform_id=' + category[u_id] resopnse = get(url=url,headers=headers).json()
查询指定iNFR的货币,监控价值
- 获取对应的iNFR名称,匹配名字是否一直
for i in range(len(resopnse['data'])): # 匹配查询的名字 name = resopnse['data'][i]['name'] if monitor_name == name: print('名字匹配成功')
- 名字匹配成功,监控价值,超过指定价值发送邮件提醒
# 得到价值 crt_amount = resopnse['data'][i]['crt_amount'] # 匹配监控的价值 # ! 原网站显示的时候后面少了两个00,这里是测试,未作处理 if int(monitor_price) >= crt_amount: # 发邮件提醒 # ! 接受邮箱是个列表list,不要写成字符串str 标题 = '你关注的iNFR中分类' + u_id + '旗下的' + monitor_name + '价格达到了' + monitor_price Send_Email('你的发件邮箱', '邮箱授权码',['你的收件邮箱'], 标题, '内容', 'smtp.qq.com')
发邮件提醒
- 发邮件提醒有以下注意事项:
1.你发邮件的邮箱要开启stmp模式
2.邮箱授权码不是你登录邮箱的密码,而是你后台授权码
3.具体如何设置,这里不做说明,请自行百度
- 发邮件代码
1.my_email 发件邮箱
2.pwd 邮箱授权码
3.send_email 收件邮箱(列表模式)
4.mail_title 邮件标题
5.mail_content 邮件内容
6.smtp_server 邮箱服务器
def Send_Email(my_email, pwd, send_email, mail_title, mail_content, smtp_server): email = MIMEMultipart() email['Subject'] = Header(mail_title, 'utf-8') email['From'] = my_email email['To'] = ";".join(send_email) email.attach(MIMEText(mail_content, 'plain', 'utf-8')) try: smtp = SMTP_SSL(smtp_server) # ! 跟服务器打招呼,告诉它我们准备连接,最好加上这行代码 smtp.ehlo(smtp_server) smtp.login(my_email, pwd) smtp.sendmail(my_email, send_email, email.as_string()) smtp.quit() print("发送成功") except SMTPException: print("发送失败")
整个代码详情
# -*- coding: utf-8 -*- # @Author: cxys_dragon # @Date: 2022-05-11 22:15:17 # @Last Modified by: cxys_dragon # @Last Modified time: 2022-05-12 23:08:30 from requests import get from email.header import Header from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from smtplib import SMTP_SSL, SMTPException # todo 发邮件 def Send_Email(my_email, pwd, send_email, mail_title, mail_content, smtp_server): email = MIMEMultipart() email['Subject'] = Header(mail_title, 'utf-8') email['From'] = my_email email['To'] = ";".join(send_email) email.attach(MIMEText(mail_content, 'plain', 'utf-8')) try: smtp = SMTP_SSL(smtp_server) # ! 跟服务器打招呼,告诉它我们准备连接,最好加上这行代码 smtp.ehlo(smtp_server) smtp.login(my_email, pwd) smtp.sendmail(my_email, send_email, email.as_string()) smtp.quit() print("发送成功") except SMTPException: print("发送失败") # todo 监控程序 def Monitor(u_id,monitor_name,monitor_price): ''' u_id 匹配需要查询的对应ID值 monitor_name 监控NFT的名字 monitor_price 监控NFT的价值 ''' headers = { 'User-Agent': r'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36', 'Cookie': 'Hm_lvt_97ec653ce3458e152c3a8bc9e02fa66d=1652278211; Hm_lpvt_97ec653ce3458e152c3a8bc9e02fa66d=1652278269' } category = { 'all' : 'all', 'iBox' : 'c8gb15q2dtei4q721ukg', '唯一艺术' : 'c8gcana2dtei4q721ur0', 'zTag':'c8uvgr9uk5rrg142ol02', '优版权':'c98g101uk5ro4vqnqjeg', '幻藏':'c98gb69uk5ro4vqnqka0', 'Art Meta':'c98gdt9uk5ro4vqnqkgg', } url = 'https://xxx.xxx.xxx/xx/tourist/platform/detective/rt/query?platform_id=' + category[u_id] resopnse = get(url=url,headers=headers).json() for i in range(len(resopnse['data'])): # 匹配查询的名字 name = resopnse['data'][i]['name'] if monitor_name == name: # 得到价值 crt_amount = resopnse['data'][i]['crt_amount'] # 匹配监控的价值 # ! 原网站显示的时候后面少了两个00,这里是测试,未作处理 if int(monitor_price) >= crt_amount: # 发邮件提醒 # ! 接受邮箱是个列表list,不要写成字符串str text = '你关注的iNFR中分类' + u_id + '旗下的' + monitor_name + '价格达到了' + monitor_price Send_Email('你的发件邮箱', '邮箱授权码',['你的收件邮箱'], 标题, '内容', 'smtp.qq.com') break Monitor('iBox','仙境','4499900')
实时监控
- 关于实时监控,是在服务器上建议一个定时任务,定时执行代码。
- 这里以Linux服务器为例,使用定时命令crontab
# 编辑定时命令 crontab -e # 编辑定时任务 每隔十分钟执行一次 10 * * * * myCommand
- 具体编辑定时任务,请自行百度查询
后续数据分析的一些想法
- 可以建立一个数据库,将需要的数据存储下来。
- 根据存储数据,建立数据分析模型,例如折线形或柱状图。
- 形成类似股票的分析模式,便于分析走势。
- 可以用定时任务,自动爬取数据并存储,后面读取数据分析即可。
- 详细代码,这里不再分析,有兴趣的伙伴,可以自行研究。