通过爬虫等手段,免费获取非小号和coinmarket的实时汇率等行情数据

1.非小号

爬取非小号:通过抓取network,发现非小号的币价汇率接口,然后用程序拿这个返回的数据,就可以了。

https://dncapi.bqiapp.com/api/coin/web-coinrank?page=1&type=-1&pagesize=100&webp=1

当时觉得不能无限制这样请求,而且数据不会刷新得那么快,就自己写了一个缓存,设定N秒,不会去请求,而是返回上一次的请求数据。

private static BigDecimal doUrl(String url, String symbol, CurrencyFXH currency) {
    Map<String, String> headers = new TreeMap<>();
    headers.put("Content-Type", "application/json");
    headers.put("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36");
    BigDecimal result = null;
    try {
      if(dataCache.isEffeFXH()){
        result = dealData(dataCache.getFeixiaohao().getJsonArray(),symbol,currency);
      }else{
        String content = OkHttpClientUtil.doGet(url, null, headers, null);
        JSONObject jsonObject = JSONObject.parseObject(content);
        JSONArray array = (JSONArray) jsonObject.get("data"); // 这个数据放内存,有5秒寿命
        dataCache.setFeixiaohao(Feixiaohao.builder().ctime(System.currentTimeMillis()).jsonArray(array).build());
        result = dealData(array,symbol,currency);
      }
    } catch (Exception e) {
      e.printStackTrace();
      throw new RuntimeException("connect err:",e);
    }
    CommonUtil.cannotNull(result);
    return result;
  }

  

2.coinmarketcap

coinmarketcap以前的汇率等行情接口都是免费提供的,后来不可用了,还收起费来了,并且价格不低。但是所谓看到即可得到。他们刚收费后,我就试着写了这个。

如果有需求或者有兴趣,可以加QQ群857616624讨论爬一切东西。

他们的url:https://coinmarketcap.com/coins/;

这个没有找到直接的接口,但还可以用Jsoup爬页面后解析。

public static BigDecimal getPriceByCMC(String coin, Currency currency) {
    BigDecimal result = null;
    if (!dataCache.isEffeCMC()){// set date
      Document doc = getArticleListFromUrl(url_cmc);
      Elements currency_rates = doc.select("#currency-exchange-rates");// 这是所有主流火币(含法币)的汇率vs美元
      Elements prices = doc.select(".price");
      Elements symbols = doc.select(".hidden-xs");
      CoinMarketCap marketCap = CoinMarketCap.builder().ctime(System.currentTimeMillis()).currencyRates(currency_rates).prices(prices).symbols(symbols).build();
      dataCache.setCoinMarketCap(marketCap);
    }
    result = dealData(dataCache.getCoinMarketCap(),coin,currency);
    CommonUtil.cannotNull(result);
    return result;
  }

  

其他更多的行情数据,都可以通过这样的方式去获取。完整的代码git地址:

https://github.com/OceanBBBBbb/exchange-rate

欢迎star和fork。

这个可以作为内部工具类获取币价汇率,也可以直接写个controller提供api。都是非常方便的。

 

转载于:https://www.cnblogs.com/MyOceansWeb/p/11428618.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值