股票数据采集

YangeIT大约 8 分钟今日指数SpringBoot

股票数据采集

目标

  1. 掌握RestTemplate基本使⽤;
  2. 阅读并理解第三⽅股票接⼝API;
  3. 基于RestTemplate实现国内⼤盘数据采集功能;
  4. 基于RestTemplate实现国内板块和股票流⽔数据采集功能;
  5. 熟悉mybatis批量插⼊实现;

1. 股票数据采集环境准备

股票数据采集环境准备

当前项⽬中的股票数据都是历史数据,不是实时最新的数据,⽽要想获取股票最新的数据,就需要定时调⽤第三⽅接⼝拉取最新数据流⽔;

Spring框架已为我们封装了⼀套访问远程http接⼝的模板⼯具:RestTemplate,借助于该⼯具,我们可访问第三⽅股票接⼝,获取股票最新数据。 RestTemplate本质上就是⼀个⾮常轻量级http客户端,使⽤简单且容易上⼿;

股票数据采集核⼼流程如下:

股票数据采集核⼼流程
股票数据采集核⼼流程

常⻅http客户端组件:

  1. RestTemplate:Spring提供,轻量易上⼿;
  2. HttpClient:apache提供;
  3. OkHttpClient

⼯程搭建代码操作:⼯程结构

⼯程搭建

  1. 在stock_parent⼯程下构建stock_job⼦⼯程,并在pom中引⼊依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>stock_parent</artifactId>
        <groupId>com.itheima.stock</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <packaging>jar</packaging>
    <artifactId>stock_job</artifactId>
    <description>
        该工程用于股票数据的采集工程
    </description>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <!--引入公共依赖-->
        <dependency>
            <groupId>com.itheima.stock</groupId>
            <artifactId>stock_common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--引入web依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--引入单元测试依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

    </dependencies>
	<build>
		<!--打包名称-->
		<finalName>${project.artifactId}</finalName>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>




















 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 













  1. application.yml主配置⽂件与stock_backend⼯程⼀致:
# 定义端口号
server:
  port: 8092
# 配置数据源
spring:
  datasource:
    druid:
      username: root
      password: root
      url: jdbc:mysql://192.168.200.129:3306/stock_db?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&serverTimezone=Asia/Shanghai
      driver-class-name: com.mysql.jdbc.Driver
      # 初始化时建立物理连接的个数。初始化发生在显示调用 init 方法,或者第一次 getConnection 时
      initialSize: 6
      # 最小连接池数量
      minIdle: 2
      # 最大连接池数量
      maxActive: 20
      # 获取连接时最大等待时间,单位毫秒。配置了 maxWait 之后,缺省启用公平锁,
      # 并发效率会有所下降,如果需要可以通过配置 useUnfairLock 属性为 true 使用非公平锁。
      maxWait: 60000
  profiles:
    active: stock # 激活|加载其它配置资源
# 配置mybatis
mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 打印运行的sql
  type-aliases-package: com.itheima.stock.pojo.entity # 批量给指定包下的实体类取别名,方便xml使用,默认是类名,首字母小写
  mapper-locations: classpath:mapper/*.xml # 加载类路径下的mapper下的所有xml文件
# 设置分页
pagehelper:
  helper-dialect: mysql #指定分页数据库类型(方言)
  reasonable: true #合理查询超过最大页,则查询最后一页





















 










  1. 添加main启动类:
package com.itheima.stock;

@SpringBootApplication
@MapperScan("com.itheima.stock.mapper")
public class JobApp {
 public static void main(String[] args) {
 SpringApplication.run(JobApp.class, args);
 }
}
  1. 工程结构如下:
工程结构如下
工程结构如下

2. 股票数据采集接⼝介绍

前言

⽬前市⾯上有⼀些正规的API⾦融接⼝,可为我们提供实时的股票⾦融数据,同时也提供有较为完整的开发⽂档,⽤起来也会更⽅便⼀些,但是⼤多是付费的,在这⾥给⼤家梳理了常⽤的股票API接⼝: image

day05\资料\股票接⼝

3. 股票相关数据采集

3.1 A股⼤盘数据采集

前言

代码操作

  1. 配置ID⽣成器bean

A股⼤盘数据采集⼊库时,主键ID保证唯⼀,所以在stock_job⼯程配置ID⽣成器:

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

    1. 配置股票地址参数 在stock_job⼯程下,定义股票相关配置⽂件application-stock.yml,该⽂件与stock_backend下的配置⼀致,然后我们把⼤盘、板块、股票相关的通⽤参数配置进来:
    	# 配置股票相关的参数
    	stock:
    	inner: # 国内⼤盘ID
    		- sh000001 # 上证ID
    		- sz399001 # 深证ID
    	outer: # 外盘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类:

      	@ConfigurationProperties(prefix = "stock")
      	@Data
      	public class StockInfoConfig {
      		private List<String> inner;
      		//外盘ID集合
      		private List<String> outer;
      		//⼤盘参数获取url
      		private String marketUrl;
      		//板块参数获取url
      		private String blockUrl;
      	}
      
      • 在公共配置类上开启配置
      @EnableConfigurationProperties(StockInfoConfig.class)//开启常⽤参数配置bean
      @Configuration
      public class CommonConfig {
      	//......
      	}
      
  3. A股⼤盘响应数据说明

image
image
var hq_str_sh000001="上证指
数,3358.9338,3361.5177,3398.6161,3417.0085,3358.9338,0,0,38
1243178,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:当前时间

面试点: