登入失败禁止登入3
This commit is contained in:
@@ -39,11 +39,11 @@ public class CrawlerSchedule {
|
||||
// 每天凌晨2点执行爬取开奖结果
|
||||
//@Scheduled(cron = "0 0 2 * * ?")
|
||||
// 每7秒执行一次爬取开奖结果
|
||||
@Scheduled(cron = "*/9 * * * * ?")
|
||||
//@Scheduled(cron = "*/9 * * * * ?")
|
||||
/*@Scheduled(cron = "0 6-59/5 7-23 * * ?")
|
||||
@Scheduled(cron = "0 0-55/5 0-6 * * ?")*/
|
||||
// 从7:00分30秒起每5分钟执行一次
|
||||
//@Scheduled(cron = "30 0/5 * * * ?")
|
||||
@Scheduled(cron = "30 0/5 * * * ?")
|
||||
public void executeLotteryDraw() {
|
||||
log.info("开始爬取开奖结果");
|
||||
int retryCount = 0;
|
||||
@@ -110,27 +110,46 @@ public class CrawlerSchedule {
|
||||
}
|
||||
|
||||
|
||||
//@Scheduled(cron = "50 0/5 * * * ?")
|
||||
@Scheduled(cron = "55 0/5 * * * ?")
|
||||
//@Scheduled(cron = "*/9 * * * * ?")
|
||||
public void executePksHistory() {
|
||||
log.info("开始获取历史开奖结果");
|
||||
// 获取API数据
|
||||
|
||||
// 获取数据库最新记录
|
||||
LotteryResult lotteryResult = lotteryResultRepository.findTopByOrderByTimeDesc()
|
||||
.orElse(null);
|
||||
|
||||
// 如果数据库为空,直接获取并保存所有历史数据
|
||||
if (lotteryResult == null) {
|
||||
log.info("数据库为空,获取全部历史数据");
|
||||
List<Map<String, Object>> historyList = HttpClientExample.getPksHistoryList();
|
||||
HttpClientExample.getPksHistory(historyList, pypath);
|
||||
return;
|
||||
}
|
||||
|
||||
String lastTime = lotteryResult.getTime();
|
||||
List<Map<String, Object>> historyList = HttpClientExample.getPksHistoryList();
|
||||
// 获取数据库最新时间
|
||||
Optional<String> latestTimeOpt = lotteryResultRepository.findTopByOrderByTimeDesc()
|
||||
.map(LotteryResult::getTime);
|
||||
|
||||
// 判断是否需要更新
|
||||
boolean needUpdate = latestTimeOpt
|
||||
.map(latestTime -> historyList.stream()
|
||||
.noneMatch(item -> latestTime.equals(item.get("time"))))
|
||||
.orElse(true); // 数据库为空时需要更新
|
||||
// 检查API数据中是否有比数据库最新时间更晚的数据
|
||||
boolean hasNewerData = false;
|
||||
for (Map<String, Object> item : historyList) {
|
||||
String itemTime = (String) item.get("time");
|
||||
|
||||
if (needUpdate) {
|
||||
log.info("需要更新数据,最新时间:{}",
|
||||
latestTimeOpt.orElse("数据库为空"));
|
||||
// 假设时间格式是 "yyyy-MM-dd HH:mm:ss" 或其他可比较的格式
|
||||
// 比较时间字符串(前提是格式一致且可按字典序比较)
|
||||
if (itemTime.compareTo(lastTime) > 0) {
|
||||
hasNewerData = true;
|
||||
log.info("发现新数据:{} > {}", itemTime, lastTime);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 如果有比数据库时间更新的数据,执行获取操作
|
||||
if (hasNewerData) {
|
||||
log.info("发现比数据库时间 {} 更新的数据,执行获取", lastTime);
|
||||
HttpClientExample.getPksHistory(historyList, pypath);
|
||||
} else {
|
||||
log.info("数据已是最新,无需更新");
|
||||
log.info("未发现比数据库时间 {} 更新的数据,无需处理", lastTime);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -96,27 +96,27 @@ public class HttpClientExample {
|
||||
String preDrawCode = item.get("preDrawCode").asText();
|
||||
String[] codeArray = preDrawCode.split(",");
|
||||
|
||||
// 转换为整数数组
|
||||
int[] result = new int[codeArray.length];
|
||||
for (int i = 0; i < codeArray.length; i++) {
|
||||
result[i] = Integer.parseInt(codeArray[i].trim());
|
||||
// 转换为List<Integer>
|
||||
List<Integer> resultNumbers = new ArrayList<>();
|
||||
for (String code : codeArray) {
|
||||
resultNumbers.add(Integer.parseInt(code.trim()));
|
||||
}
|
||||
|
||||
// 计算sum1和sum2
|
||||
int sum1 = 0;
|
||||
int sum2 = 0;
|
||||
for (int i = 0; i < 5; i++) {
|
||||
sum1 += result[i];
|
||||
sum1 += resultNumbers.get(i);
|
||||
}
|
||||
for (int i = 5; i < 10; i++) {
|
||||
sum2 += result[i];
|
||||
sum2 += resultNumbers.get(i);
|
||||
}
|
||||
|
||||
// 计算winner(前五个号码的和)
|
||||
int winner = sum1;
|
||||
|
||||
// 计算冠亚和(前两个号码的和)
|
||||
int championSum = result[0] + result[1];
|
||||
int championSum = resultNumbers.get(0) + resultNumbers.get(1);
|
||||
|
||||
// 判断冠亚单双
|
||||
String GD2 = (championSum % 2 == 0) ? "冠亚双" : "冠亚单";
|
||||
@@ -130,15 +130,15 @@ public class HttpClientExample {
|
||||
// 计算龙虎(1-5位对比)
|
||||
List<String> GLH_result = new ArrayList<>();
|
||||
for (int i = 0; i < 5; i++) {
|
||||
if (result[i] > result[9 - i]) {
|
||||
if (resultNumbers.get(i) > resultNumbers.get(9 - i)) {
|
||||
GLH_result.add("龙");
|
||||
} else {
|
||||
GLH_result.add("虎");
|
||||
}
|
||||
}
|
||||
|
||||
// 构建转换后的map
|
||||
map.put("result", result);
|
||||
// 构建转换后的map,使用List<Integer>作为result
|
||||
map.put("result", resultNumbers);
|
||||
map.put("sum1", sum1);
|
||||
map.put("sum2", sum2);
|
||||
map.put("winner", winner);
|
||||
@@ -152,31 +152,6 @@ public class HttpClientExample {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 打印转换后的结果列表
|
||||
System.out.println("Total records: " + resultList.size());
|
||||
|
||||
// 使用ObjectMapper将结果列表转换为JSON格式输出
|
||||
ObjectMapper outputMapper = new ObjectMapper();
|
||||
String jsonOutput = outputMapper.writerWithDefaultPrettyPrinter().writeValueAsString(resultList);
|
||||
System.out.println(jsonOutput);
|
||||
|
||||
// 或者以自定义格式输出(可选)
|
||||
System.out.println("\n=== 转换后的数据格式 ===");
|
||||
for (Map<String, Object> map : resultList) {
|
||||
System.out.println("{");
|
||||
System.out.println(" \"result\" : " + Arrays.toString((int[]) map.get("result")) + ",");
|
||||
System.out.println(" \"sum1\" : " + map.get("sum1") + ",");
|
||||
System.out.println(" \"sum2\" : " + map.get("sum2") + ",");
|
||||
System.out.println(" \"winner\" : " + map.get("winner") + ",");
|
||||
System.out.println(" \"GD2\" : \"" + map.get("GD2") + "\",");
|
||||
System.out.println(" \"GD1\" : \"" + map.get("GD1") + "\",");
|
||||
System.out.println(" \"GLH_result\" : " + map.get("GLH_result") + ",");
|
||||
System.out.println(" \"id\" : \"" + map.get("id") + "\",");
|
||||
System.out.println(" \"time\" : \"" + map.get("time") + "\"");
|
||||
System.out.println("},");
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
@@ -184,6 +159,112 @@ public class HttpClientExample {
|
||||
}
|
||||
|
||||
|
||||
/*public static List<Map<String, Object>> getPksHistoryList(){
|
||||
List<Map<String, Object>> resultList = new ArrayList<>();
|
||||
String todayDate = DateUtils.getTodayDate();
|
||||
try {
|
||||
String url = "https://api.api168168.com/pks/getPksHistoryList.do?lotCode=10058&"+todayDate;
|
||||
|
||||
// 移除代理设置,直接创建连接
|
||||
HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
|
||||
conn.setRequestMethod("GET");
|
||||
conn.setRequestProperty("Origin", "https://xy678kjw.com");
|
||||
conn.setRequestProperty("Referer", "https://xy678kjw.com/");
|
||||
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36");
|
||||
conn.setConnectTimeout(10000);
|
||||
conn.setReadTimeout(10000);
|
||||
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
|
||||
StringBuilder response = new StringBuilder();
|
||||
String line;
|
||||
while ((line = reader.readLine()) != null) {
|
||||
response.append(line);
|
||||
}
|
||||
reader.close();
|
||||
|
||||
// 使用Jackson解析JSON
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
JsonNode rootNode = objectMapper.readTree(response.toString());
|
||||
|
||||
// 检查是否成功
|
||||
int errorCode = rootNode.get("errorCode").asInt();
|
||||
if (errorCode == 0) {
|
||||
// 获取data数组
|
||||
JsonNode dataArray = rootNode
|
||||
.get("result")
|
||||
.get("data");
|
||||
|
||||
if (dataArray.isArray()) {
|
||||
for (JsonNode item : dataArray) {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
|
||||
// 解析原始数据
|
||||
String preDrawCode = item.get("preDrawCode").asText();
|
||||
String[] codeArray = preDrawCode.split(",");
|
||||
|
||||
// 转换为List<Integer>
|
||||
List<Integer> resultNumbers = new ArrayList<>();
|
||||
for (String code : codeArray) {
|
||||
resultNumbers.add(Integer.parseInt(code.trim()));
|
||||
}
|
||||
|
||||
// 计算sum1和sum2
|
||||
int sum1 = 0;
|
||||
int sum2 = 0;
|
||||
for (int i = 0; i < 5; i++) {
|
||||
sum1 += resultNumbers.get(i);
|
||||
}
|
||||
for (int i = 5; i < 10; i++) {
|
||||
sum2 += resultNumbers.get(i);
|
||||
}
|
||||
|
||||
// 计算winner(前五个号码的和)
|
||||
int winner = sum1;
|
||||
|
||||
// 计算冠亚和(前两个号码的和)
|
||||
int championSum = resultNumbers.get(0) + resultNumbers.get(1);
|
||||
|
||||
// 判断冠亚单双
|
||||
String GD2 = (championSum % 2 == 0) ? "冠亚双" : "冠亚单";
|
||||
|
||||
// 判断冠亚大小(冠亚和11为大,11为小)
|
||||
String GD1 = (championSum > 11) ? "冠亚大" : "冠亚小";
|
||||
if (championSum == 11) {
|
||||
GD1 = "冠亚小"; // 特殊处理:和值为11算小
|
||||
}
|
||||
|
||||
// 计算龙虎(1-5位对比)
|
||||
List<String> GLH_result = new ArrayList<>();
|
||||
for (int i = 0; i < 5; i++) {
|
||||
if (resultNumbers.get(i) > resultNumbers.get(9 - i)) {
|
||||
GLH_result.add("龙");
|
||||
} else {
|
||||
GLH_result.add("虎");
|
||||
}
|
||||
}
|
||||
|
||||
// 构建转换后的map,使用List<Integer>作为result
|
||||
map.put("result", resultNumbers);
|
||||
map.put("sum1", sum1);
|
||||
map.put("sum2", sum2);
|
||||
map.put("winner", winner);
|
||||
map.put("GD2", GD2);
|
||||
map.put("GD1", GD1);
|
||||
map.put("GLH_result", GLH_result);
|
||||
map.put("id", String.valueOf(item.get("preDrawIssue").asLong()));
|
||||
map.put("time", item.get("preDrawTime").asText());
|
||||
|
||||
resultList.add(map);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return resultList;
|
||||
}*/
|
||||
|
||||
|
||||
public static void writeToJsonFile(List<Map<String, Object>> resultList,String pypath) {
|
||||
try {
|
||||
// 创建 ObjectMapper 实例
|
||||
|
||||
Reference in New Issue
Block a user