package com.yeshi.fanli.job; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import javax.annotation.Resource; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.select.Elements; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.yeshi.utils.entity.ProxyIP; import com.yeshi.fanli.entity.common.Config; import com.yeshi.fanli.entity.common.ImageInfo; import com.yeshi.fanli.service.inter.config.ConfigService; import com.yeshi.fanli.util.taobao.TaoBaoUtil; @Component public class IPUpdateJob { @Resource private ConfigService configService; /** * 更新淘宝有效IP */ @Scheduled(cron = "0 0/10 * * * ? ") public void updateValidTaoBaoIPJob() { try { List list = new ArrayList<>(); Document doc = Jsoup.connect("https://www.xicidaili.com/wn/") .userAgent( "Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Mobile Safari/537.36") .referrer("https://www.xicidaili.com/nn/").timeout(10000).get(); Elements els = doc.getElementById("ip_list").getElementsByTag("tr"); if (els != null && els.size() > 0) for (int i = 1; i < els.size(); i++) { if (i > 15) break; Elements tds = els.get(i).getElementsByTag("td"); if ("高匿".equalsIgnoreCase(tds.get(4).ownText())) { String ip = tds.get(1).ownText(); String port = tds.get(2).ownText(); ProxyIP proxyIP = new ProxyIP(ip, Integer.parseInt(port)); long startTime = System.currentTimeMillis(); List imgList = TaoBaoUtil.getTBDetailImageWithSizev2(538941799523L, proxyIP); long time = (System.currentTimeMillis() - startTime); if (imgList.size() > 0 && time < 1000 * 5) { list.add(new IPTime(ip + ":" + port, (int) time)); } } } Comparator cm = new Comparator() { @Override public int compare(IPTime o1, IPTime o2) { return o1.time - o2.time; } }; if (list.size() > 0) { Collections.sort(list, cm); Config conf = configService.getConfig("taobao_proxy_ip"); conf.setValue(list.get(0).ip.trim()); configService.update(conf); } } catch (IOException e) { e.printStackTrace(); } } class IPTime { String ip; int time; public IPTime(String ip, int time) { this.ip = ip; this.time = time; } public IPTime() { } } }