小伙伴们还记得上上期

用程序获取商品售价变化,买到最低价的东西(一)

我们教大家从京东的网站上

获取到我们心仪商品的售价,

大家有没有去实践一下呢

但这时候,

离我们想要的售价变化还差了一些,

差了变化,差了通知。

今天我们就来聊一聊怎么监控变化,

和价格变化后怎么通知我们~

监控变化:

按我们的思路,如果是手工去做的做,那就是找一张白纸,然后把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;

            } 

这样就完成了每隔一定时间去请求一次,看是否有降价。小伙伴们可以结合上篇文章一起试一下。

但我们不可能一直这样看着控制台,程序也不能发出声音告诉我们,明天我们一起写如何用邮件发送降价通知~