使用Java操作Tushare

1,087 阅读1分钟

tushare提供了丰富的金融数据接口,也提供了很方便的sdk,但是对于非python的程序员而言,在学习量化的过程中,学习理论的同时又要边学python边熟悉sdk,过程比较吃力,也影响学习效率。好在官方同时提供了通过http调用的方式,从而大家可以使用自己熟悉的语言来完成相关的操作。475582

如果你也使用java语言,强烈推荐大佬开源的一款java sdk,基本涵盖了官方提供的所有接口。

Tushare官网: tushare.pro

项目地址: github.com/QHh6eQ/tush…

有了现成java版本的sdk,那只需要在项目中添加依赖,就可以放心食用啦。

  1. 添加依赖
<dependency>
  <groupId>com.github.qhh6eq</groupId>
  <artifactId>tushare-pro-java-sdk</artifactId>
  <version>2.0.5-RELEASE</version>
</dependency>
  1. 调用api

final TusharePro.Builder builder = new TusharePro.Builder()
        .setToken("**********");  // 你的token

TusharePro.setGlobal(builder.build());  // 设置全局配置

final KeyValue<String, String> list_status = StockBasic.Params.list_status.value("L");

// 打印 上海交易所所有上市的沪股通股票 信息
TushareProService.stockBasic(new Request<StockBasicEntity>() {}  // 使用全局配置
        .allFields()  // 所有字段
        .param(StockBasic.Params.exchange.value("SSE"))  // 参数
        .param(list_status)  // 参数
        .param("is_hs", "H"))  // 参数
        .forEach(System.out::println);

final OkHttpClient defaultHttpClient = new OkHttpClient.Builder()
        .addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.NONE))
        .connectTimeout(42, TimeUnit.SECONDS)
        .writeTimeout(42, TimeUnit.SECONDS)
        .readTimeout(42, TimeUnit.SECONDS)
        .build();

// 一个完整的例子
TushareProService.stockBasic(
        new Request<StockBasicEntity>(builder.copy()  // 将配置拷贝
                .setMaxRetries(5)  // 设置重试次数, 默认为3
                .setRetrySleepTimeUnit(TimeUnit.SECONDS)  // 设置重试sleep单位, 默认毫秒
                .setRetrySleepTimeOut(60L)  // 设置重试sleep时间, 默认为0
                .setRequestExecutor(Executors.newSingleThreadExecutor((r -> {
                    Thread thread = new Thread(r);
                    thread.setDaemon(true);
                    return thread;
                })))  // 设置请求线程池, 默认CachedThreadPool
                .setHttpFunction(requestBytes -> {  // requestBytes -> function -> responseBytes 请使用阻塞的方式
                    try {
                        okhttp3.Request request = new okhttp3.Request.Builder()
                                .url("http://api.tushare.pro")
                                .post(RequestBody.create(MediaType.parse("application/json; charset=utf-8"), requestBytes))
                                .build();

                        return defaultHttpClient.newCall(request).execute().body().bytes();
                    }
                    catch (IOException e) {
                        e.printStackTrace();
                    }
                    return null;
                })
                .build()){}
        .allFields()
        .param(StockBasic.Params.exchange.value("SZSE"))
        .param(list_status))
        .stream()
        .filter(x -> "银行".equals(x.getIndustry()))
        .forEach(System.out::println);