通過爬蟲等手段,免費獲取非小號和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

基本還是很穩定的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM