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
基本还是很稳定的