小伙伴们还记得上上期
我们教大家从京东的网站上
获取到我们心仪商品的售价,
大家有没有去实践一下呢
但这时候,
离我们想要的售价变化还差了一些,
差了变化,差了通知。
今天我们就来聊一聊怎么监控变化,
和价格变化后怎么通知我们~
监控变化:
按我们的思路,如果是手工去做的做,那就是找一张白纸,然后把itemId(或者商品的名称) ,价格给抄下来,然后过个5分钟,或者1个小时,再去看一眼,看价格是不是比我们记录的低,如果是的话,那就可以下手啦。
在我们的程序中,因为只有这一个商品,所以可以用一个全局变量来存价格,如果有多个品,可以用Map<String,Double>来存:<名字,价格>。
private static double price ;
在获取到价格时,先提取 ¥ 后面的数字,然后转成double,代码如下:
//通过id获取到对应的元素
Elements eles =doc.select("#priceSale");
String text = eles.get(0).text();
//截取¥后面的价格,并转成double
double newPrice = Double.valueOf(text.substring(1));
//和原有的double 进行比较,如果小于则替换,并通知
if(newPrice<price){
System.out.println(MessageFormat.format("原价格是:{0},现价格是:{1}", price,newPrice));
price = newPrice;
}
此处,
为了运行有效果,
将price初始化为10000。
即private static double price = 10000;
现在这只是一次监视的效果。然后将代码进行改造,达到每隔一段时间自动获取一次价格的效果。
一般在写工具类时,为了方便,如直接在main函数里面写,调试完成之后,然后把main函数的方法名一改,就可以做成一个对外公开的工具类,然后再新建一个main函数 ,调用刚才改名的方法,如下图所示:
现在我们只需要每隔一段时间,对checkPrice这个方法调用就可以了,我们很容易会想到用while的形式,通常这种循环会加上一个标识位,标识什么时候可以退出循环。也可以一直true循环,然后循环体中break; 本例中采用第一种方式,
代码如下:
public static void main(String[] args) {
while(!notifyFlag){
checkPrice();
//每五分钟查一次
try {
Thread.sleep(5*60*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
if(newPrice<price){
System.out.println(MessageFormat.format("原价格是:{0},现价格是:{1}", price,newPrice));
price = newPrice;
//修改退出标识
notifyFlag = true;
}
这样就完成了每隔一定时间去请求一次,看是否有降价。小伙伴们可以结合上篇文章一起试一下。
但我们不可能一直这样看着控制台,程序也不能发出声音告诉我们,明天我们一起写如何用邮件发送降价通知~
扫码我就亲你一口
这个是我们的官方微博哦~欢迎来撩~
QQ群:661749608
微信群请点击公众号菜单进微信群
谢谢你的阅读,
是对我们最大的支持
都是宇宙超级无敌小可爱
文字:微笑的小小刀
排版:花音