Java实现双色球历史是否中奖查询功能

Java实现双色球历史是否中奖查询

在一些问答里,很多彩友都在问:如何查看自己的双色球号码在历史期次中有没有中过奖?作为开发者兼彩友,这个问题就简单了,决定解决一下这个问题,先上结果: 双色球历史是否中奖查询网站

要实现这个功能,关键点如下:

  1. 收集双色球历史所有数据,并自动接收增量期次数据
  2. 做一个接口,传参为双色球号码,单式、复式、胆拖,然后后台接收这个号码以后,与历史每一期的数据进行对比,查看是否中奖
  3. 做一个前端展示页面,允许用户输入号码,点击查询按钮,调用2的接口,展示返回结果

采用Springboot+Freemarker引擎实现

1. 收集双色球历史所有数据

采取java jsoup爬虫方式,示例:


public class LotteryCrawler {

    public static void main(String[] args) {
        String url = "http://kaijiang.500.com/ssq.shtml"; // 双色球开奖结果页面
        try {
            crawlLotteryData(url);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void crawlLotteryData(String url) throws IOException {
        Document doc = Jsoup.connect(url).get();
        Elements pageLinks = doc.select("div.iSelectList a"); // 根据实际页面结构调整选择器

        Path csvFilePath = Paths.get("双色球开奖结果.csv");
        if (Files.exists(csvFilePath)) {
            Files.delete(csvFilePath);
        }
        List<String> csvHeader = new ArrayList<>();
        csvHeader.add("期号,红球1,红球2,红球3,红球4,红球5,红球6,蓝球");
        Files.write(csvFilePath, csvHeader, java.nio.charset.StandardCharsets.UTF_8);

        for (Element link : pageLinks) {
            String pageUrl = link.attr("href");
            String period = link.text();
            crawlLotteryPeriodData(pageUrl, period, csvFilePath);
        }
    }

    public static void crawlLotteryPeriodData(String url, String period, Path csvFilePath) throws IOException {
        Document periodDoc = Jsoup.connect(url).get();
        Elements balls = periodDoc.select("div.ball_box01 ul li"); // 根据实际页面结构调整选择器

        List<String> dataRow = new ArrayList<>();
        dataRow.add(period);
        for (Element ball : balls) {
            dataRow.add(ball.text());
        }

        String dataLine = String.join(",", dataRow);
        Files.appendString(csvFilePath, dataLine + "\n");
        System.out.println("第" + period + "期开奖结果录入完成");
    }
}

2. 查询接口

编写REST服务接口,示例:

    //查看单期是否中奖
    @RequestMapping(value ="/duotoneLottery/query",method = RequestMethod.GET)
    public List<DuotoneLotteryHistory> getDuotoneLotteriesByList(@RequestParam(value = "blue", required = false) Integer blue,
                                                                 @RequestParam(value = "red") String red){
        long startTime = System.currentTimeMillis();
        logger.info("begin query, blue: " + blue + ", red: " + red);
        List<String> ballList = Arrays.asList(red.split(","));
        List<Integer> balls = ballList.stream().map(Integer::valueOf).collect(Collectors.toList());
        Collections.sort(balls);
        DuotoneLotteryHistory duotoneLotteryQO = new DuotoneLotteryHistory();
        duotoneLotteryQO.setRed1(balls.get(0));
        duotoneLotteryQO.setRed2(balls.get(1));
        duotoneLotteryQO.setRed3(balls.get(2));
        duotoneLotteryQO.setRed4(balls.get(3));
        duotoneLotteryQO.setRed5(balls.get(4));
        duotoneLotteryQO.setRed6(balls.get(5));
        duotoneLotteryQO.setBlue(blue);
        QueryWrapper<DuotoneLotteryHistory> wrapper = new QueryWrapper<>(duotoneLotteryQO);
        List<DuotoneLotteryHistory> duotoneLotteryHistories = duotoneLotteryHistoryService.list(wrapper);
        logger.info("result size: " + duotoneLotteryHistories.size());
        String totalTime = DateUtils.getFriendlyTimeDiff(startTime, System.currentTimeMillis());
        logger.info("end totalTime: " + totalTime);
        return duotoneLotteryHistories;
    }

3. 前端

<!--begin header-->
<header class="header">
    <#include "../../pc/public/header.html">
</header>
<!--end header-->

<!--begin banner-->
<div class="banner mt20"></div>
<!--end banner-->

<div class="container fix mt20">
    <!--begin rightBar-->
    <div class="rightBar">
        <#include "../../pc/public/rightbar.html">
    </div>
    <!--end rightBar-->
    <div class="content-body">
        <div class="filter filter-body">
            <div class="head-bar">
                <#include "../../pc/public/ssq-header-bar.html">
            </div>
            <div class="panel bbd">
                <div class="desc">双色球历史中奖查询:将查询您输入的双色球号(单式),在历史期数中是否已经中过奖,供您参考。<br/>若中过,将显示对应的开奖记录;若未中过奖,将显示 ‘未出现在历史中奖纪录中’</div>
                <div class="red-ball"><p>红球区</p> --- 选择6个</div>
                <div class="red-ball-list">
                    <ul class="clearfix">
                        <li><em>01</em></li>
                        <li><em>02</em></li>
                        <li><em>03</em></li>
                        <li><em>04</em></li>
                        <li><em>05</em></li>
                        <li><em>06</em></li>
                        <li><em>07</em></li>
                        <li><em>08</em></li>
                        <li><em>09</em></li>
                        <li><em>10</em></li>
                        <li><em>11</em></li>
                        <li><em>12</em></li>
                        <li><em>13</em></li>
                        <li><em>14</em></li>
                        <li><em>15</em></li>
                        <li><em>16</em></li>
                        <li><em>17</em></li>
                        <li><em>18</em></li>
                        <li><em>19</em></li>
                        <li><em>20</em></li>
                        <li><em>21</em></li>
                        <li><em>22</em></li>
                        <li><em>23</em></li>
                        <li><em>24</em></li>
                        <li><em>25</em></li>
                        <li><em>26</em></li>
                        <li><em>27</em></li>
                        <li><em>28</em></li>
                        <li><em>29</em></li>
                        <li><em>30</em></li>
                        <li><em>31</em></li>
                        <li><em>32</em></li>
                        <li><em>33</em></li>
                    </ul>
                </div>
                <div class="blue-ball"><p>蓝球区</p> --- 选择1个</div>
                <div class="blue-ball-list">
                    <ul class="clearfix">
                        <li><em>01</em></li>
                        <li><em>02</em></li>
                        <li><em>03</em></li>
                        <li><em>04</em></li>
                        <li><em>05</em></li>
                        <li><em>06</em></li>
                        <li><em>07</em></li>
                        <li><em>08</em></li>
                        <li><em>09</em></li>
                        <li><em>10</em></li>
                        <li><em>11</em></li>
                        <li><em>12</em></li>
                        <li><em>13</em></li>
                        <li><em>14</em></li>
                        <li><em>15</em></li>
                        <li><em>16</em></li>
                    </ul>
                </div>
                <div class="sel-num">
                    <span>您当前选了 <b class="c-red">0</b> 个红球 <b class="c-blue">0</b> 个蓝球</span>
                    <a href="#" class="clean-btn">清空上方选号</a>
                </div>
                <button type="button" class="btn select-ok-btn">查询</button>
            </div>
            <div id="filterResult" ></div>
            <div class="resing" style="display:none"><img src="/images/loading.gif"></div>
            <div class="res" style="display:none">共匹配到&nbsp;<p class="total"></p>&nbsp;条记录</div>
            <div class="res0" style="display:none">未出现在历史中奖纪录中!</div>
            <div class="filter-list" id="filterList">

            </div>
        </div>
    </div>

</div>

双色球历史中奖查询

至此,查询双色球号码在历史期次中是否中过奖的功能就开发完了,前往体验: 双色球历史是否中奖查询网站

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值