• 通过爬虫等手段,免费获取非小号和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.361shipin.com/shipin/others/rate/get?coin=BTC&currency=USD

    基本还是很稳定的

  • 相关阅读:
    软件原则
    Optional
    雪花算法原理
    AOP
    trycatchfinally
    lambda表达式
    BeanUtils属性转换工具
    @Transactional 失效
    用户线程&&守护线程
    卡顿问题
  • 原文地址:https://www.cnblogs.com/MyOceansWeb/p/11428618.html
Copyright © 2020-2023  润新知