使用node自动刷房源并发送可入住房源到邮箱
因为住的地方离公司太远,每天上下班都要坐很久的班车,所以最近想搬到公司旁边的皖水公寓住。去问了一下公寓的客服,客服说房源现在没有了,只能等到别人退房,才能在网站上申请到。
如果纯靠手动F5刷新浏览器,来捡漏可入住房源,那简直是太难了。要知道很多人都在电脑前面按着F5,感觉和春运抢票一样。
所以就准备写一个脚本来监测房源,解放双手。
平时对node.js用的比较多,所以就用node.js来写,怎么方便咱怎么搞。
一.房源信息抓取
通过对公寓申请网站的数据分析,找到了房源列表的接口地址。
二.数据获取
1.首先我们先要在电脑上安装node,node安装我就不写了,网上一大堆教程。
2.新建文件夹,进入文件夹 然后用命令行 输入
npm init
然后一路enter
2.按照必要的模块
axios(接口请求)
npm install axios -save npm install nodemailer --save
3.开始写代码
const nodemailer = require('nodemailer'); const axios = require('axios') let i = 1; // setInterval(()=> { console.log(`可入住房源第${i}次查询中...`) axios.get('http://117.71.57.99:9080/online/roomResource.xp?action=formList1&code=01&buildingCode=0011449816806945psc') .then(res=> { formatData(res.data.list, '1栋') }); axios.get('http://117.71.57.99:9080/online/roomResource.xp?action=formList1&code=01&buildingCode=0011449816830250MuI') .then(res=> { formatData(res.data.list, '2栋') }); axios.get('http://117.71.57.99:9080/online/roomResource.xp?action=formList1&code=01&buildingCode=0011449816876736sfx') .then(res=> { formatData(res.data.list, '综合楼东') }); axios.get('http://117.71.57.99:9080/online/roomResource.xp?action=formList1&code=01&buildingCode=0011449816949458BXk') .then(res=> { formatData(res.data.list, '综合楼西') }) i++ // }, 30000) function formatData(list, info) { for (var key in list) { for (var j = 0; j < list[key].length; j++) { const roomInfo = list[key][j] let {id,status,roomFloor,roomName,roomType} = roomInfo if (status == 02 || status == 01) { axios.get(`http://117.71.57.99:9080/online/roomConfig.xp?action=getRoomConfig&roomID=${id}`).then(res => { let {itemName,roomTypeName,price,roomArea} = res.data.info; let roomDirection = res.data.roomDirection; sendEmail(info, roomFloor, roomName,roomDirection,roomTypeName,price,roomArea,itemName) }) } } } } function sendEmail(info, roomFloor, roomName,roomDirection,roomTypeName,price,roomArea,itemName) { // 开启一个 SMTP 连接池 let transporter = nodemailer.createTransport({ host: 'smtp.163.com', secureConnection: true, // use SSL port: 465, secure: true, // secure:true for port 465, secure:false for port 587 auth: { user: '', // 你的邮箱账号 pass: '' // QQ邮箱需要使用授权码 //邮箱密码 } }); // 设置邮件内容(谁发送什么给谁) let mailOptions = { from: '"xxx" <marven@163.com>', // 发件人 to: 'xxx@qq.com', // 收件人 subject: `Hello ✔有可入住的房源啦`, // 主题 text: 'search house', // plain text body html: `<b style="font-size:18px;">已为你搜到可入住的房源啦</b> <br> <p style="font-size:22px">房间信息:${info}--${roomFloor}楼--${roomName}</p> <p style="font-size:22px;color'#db384c'">房间类型:${roomTypeName}</p> <p style="font-size:22px">房间价格:${price}元/月</p> <p style="font-size:22px">房间大小:${roomArea}m²米</p> <p style="font-size:22px">房间朝向:${roomDirection}</p> <p style="font-size:22px">房间配置:${itemName}</p> <a style="font-size:18px;color:blue" href="http://117.71.57.99:9080/online/gzflogin.jtml?action=login&accountCode=xxx&accountPass=xxx">立即登录</a>`, }; // 使用先前创建的传输器的 sendMail 方法传递消息对象 transporter.sendMail(mailOptions, (error, info) => { if (error) { return console.log(error); } console.log(`Message: ${info.messageId}`); console.log(`sent: ${info.response}`); }); }
然后保存为 app.js
在命令行 输入
node app.js
这样就可以自动刷房源了。
测试了一下,效果很好
使用node自动刷房源并发送可入住房源到邮箱的更多相关文章
- HDU 自动刷题机 Auto AC (轻轻松松进入HDU首页)
前言: 在写这篇文章之前,首先感谢给我思路以及帮助过我的学长们 以下4篇博客都是学长原创,其中有很多有用的,值得学习的东西,希望能够帮到大家! 1.手把手教你用C++ 写ACM自动刷题神器(冲入HDU ...
- 手把手教你用C++ 写ACM自动刷题神器(冲入HDU首页)
转载注明原地址:http://blog.csdn.net/nk_test/article/details/49497017 少年,作为苦练ACM,通宵刷题的你 是不是想着有一天能够荣登各大OJ榜首,俯 ...
- 三极管的妙用之C118自动刷机
首先咱们要搞清楚咱们自动刷机的原理,不谈修改固件那么高深的东西,简单的就是控制开机键. 使用继电器来控制基本上算是上个世纪的想法吧,之前博主也做过,做出来的感觉其实也很不错,就像是一个收藏品.因为继电 ...
- 狗扑论坛 自动刷取VIP狗粮
狗扑论坛 自动刷取VIP狗粮 开始闲狗粮回复太慢就自己想了想去写一个,成功总是给我的哈哈. 自己花了一小时 时间慢慢学就慢慢写的 虽然代码简单 但是已经够自己用了 using System; usi ...
- 【BZOJ-4590】自动刷题机 二分 + 判定
4590: [Shoi2015]自动刷题机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 156 Solved: 63[Submit][Status ...
- BZOJ4590 自动刷题机
Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机--一种可以自动AC题目的神秘装置.自动 刷题机刷题的方式非常简单:首先会瞬间得出题目的正确做法,然后开始写 ...
- BZOJ_4590_[Shoi2015]自动刷题机_二分答案
BZOJ_4590_[Shoi2015]自动刷题机_二分答案 Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机--一种可以自动AC题目的神秘装置.自动 刷题 ...
- Python-王者荣耀自动刷金币+爬取英雄信息+图片
前提:本文主要功能是 1.用python代刷王者荣耀金币 2.爬取英雄信息 3.爬取王者荣耀图片之类的. (全部免费附加源代码) 思路:第一个功能是在基于去年自动刷跳一跳python代码上面弄的,思路 ...
- Node.js 0.12: 正确发送HTTP POST请求
Node.js 0.12: 正确发送HTTP POST请求 本文针对版本:Node.js 0.12.4 之前写过一篇Node.js发送和接收HTTP的GET请求的文章,今天再写一篇,讲发送POST的请 ...
随机推荐
- 简单粗暴的在vmware虚拟机中固定ip
虚拟机对于很多做测试的或者在学习测试中的人来说是位常客,经常会用到,但是虚拟机重启之后,很多人遇到虚拟机ip变化,很是头痛,我在学习过程中也遇到了这个问题,百度了很多办法,有些办法对于网络知识小白来说 ...
- tp框架---验证码详解
很多注册登录界面都会验证码,用tp如何实现验证码的功能呢? 在tp中:Think\Verify类可以支持验证码的生成和验证功能. 首先,看一下逻辑: (1)如何生成?------ 先做Yanzheng ...
- var与let的区别
var与let的区别 前言: 在没接触Es6之前,我们在js中声明都是通过var来声明变量的,var声明变量虽说方便,但是,又有一些自己的诟病,下边来说一说,这三个的区别! var var相信大家都不 ...
- 优化js脚本设计,防止浏览器假死
在Web开发的时候经常会遇到浏览器不响应事件进入假死状态,甚至弹出"脚本运行时间过长"的提示框,如果出现这种情况说明你的脚本已经失控了,必须进行优化. 为什么会出现这种情况呢,我们 ...
- Oracle锁表处理操作笔记
--查看锁表进程SQL语句1: SELECT sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, ...
- 使用 VS2017 和 js 进行桌面程序开发 - electron 之 Hello Word
现在基于 js 和 web浏览器核心构建的 C/S 程序越来越多,比如微信桌面版(基于 duilib 和 cef).VS CODE(基于electron)等,出于了解的目的,最近学习了 electro ...
- Redis源码阅读之主从复制——Slave视角
Redis主从复制 为了提高性能和系统可用,Redis都会做主从复制,一来可以分担主库压力,二来在主库挂掉的时候从库依旧可以提供服务.Redis的主从复制是异步复制,返回结果给客户端和同步命令到从库是 ...
- C++学习(二) 入门篇
程序清单2. carrots.cpp //carrots.cpp - - food processing program //uses and displays a variable #inclu ...
- hdu_3336: Count the string(KMP dp)
题目链接 题意:求给定字符串中,可以与某一前缀相同的所有子串的数量 做这道题需要明白KMP算法里next[]数组的意义 首先用一数组nex[](这里与之前博客中提到的next明显不同)存储前缀后缀最长 ...
- Python面向对象编程(四)
1.多态 多态的概念虽然现在才说,但是我们一直在用.多态就是多种形态的意思,动物都猫,狗,猪等等,这些都是动物的多种形态. 反映在Python中,多态就意味着就算不知道变量所引用的对象类型是什么,也能 ...