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¤cy=USD
基本還是很穩定的