ybf

ybf


1.11火币网站汇率抓取代码参考

<p>@Service @Slf4j public class HuoBiExchangePrice implements CoinPriceFetchService { @Value(&quot;#{'${huobi.url}'.split(',')}&quot;) private List<String> huobiUrlList; private int index = 0;</p> <pre><code>private final BaseExchangeRateServiceImpl baseExchangeRateService; private final ExchangeRateCheckService exchangeRateService; @Autowired private CoinDisposeExchangePrice coinDisposeExchangePrice; @Autowired public HuoBiExchangePrice(BaseExchangeRateServiceImpl baseExchangeRateService , ExchangeRateCheckService exchangeRateService ) { this.baseExchangeRateService = baseExchangeRateService; this.exchangeRateService = exchangeRateService; } private final static Map&lt;String, String&gt; HEADERS = buildHeader(); private static Map&lt;String, String&gt; buildHeader() { Map&lt;String, String&gt; headers = new HashMap&lt;&gt;(); headers.put("portal", "web");</code></pre> <p>// headers.put(&quot;client-type&quot;, &quot;web&quot;); // headers.put(&quot;:authority&quot;, &quot;otc-api-hk.eiijo.cn&quot;); // headers.put(&quot;:method&quot;, &quot;GET&quot;); // headers.put(&quot;:scheme&quot;, &quot;https&quot;); // headers.put(&quot;accept&quot;, &quot;application/json, text/plain, <em>/</em>&quot;); // headers.put(&quot;accept-encoding&quot;, &quot;gzip, deflate, br&quot;); // headers.put(&quot;accept-language&quot;, &quot;zh-CN,zh;q=0.9&quot;); // headers.put(&quot;fingerprint&quot;, &quot;bf4852e9e49efbd201abf49b799ed6e1&quot;); // headers.put(&quot;origin&quot;, &quot;<a href="https://c2c.huobi.com">https://c2c.huobi.com</a>&quot;); // headers.put(&quot;otc-language&quot;, &quot;zh-CN&quot;); // headers.put(&quot;referer&quot;, &quot;<a href="https://c2c.huobi.com/">https://c2c.huobi.com/</a>&quot;); // headers.put(&quot;sec-fetch-dest&quot;, &quot;empty&quot;); // headers.put(&quot;sec-fetch-mode&quot;, &quot;cors&quot;); // headers.put(&quot;sec-fetch-site&quot;, &quot;cross-site&quot;); // headers.put(&quot;token&quot;, &quot;undefined&quot;); // headers.put(&quot;trace_id&quot;, &quot;b79c073f-8806-4e08-b3e2-f51186378ad9&quot;); // headers.put(&quot;uid&quot;, &quot;0&quot;); // headers.put(&quot;user-agent&quot;, &quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36&quot;); // headers.put(&quot;x-requested-with&quot;, &quot;XMLHttpRequest&quot;); return headers; }</p> <pre><code>public String buildParam(String buyOrSell, String assetType,String currency) { StringBuilder sb = new StringBuilder(); if (AssetType.USDT.getSymbol().equals(assetType)) { sb.append("?coinId=2"); } else if (AssetType.BTC.getSymbol().equals(assetType)) { sb.append("?coinId=1"); } else { throw new RuntimeException("查询的币种有误."); } //currency=1代表人民币 currency=2 USD currency=5 eth if(currency.equals(AssetType.USD.getSymbol())){ sb.append("&amp;currency=2"); }else{ sb.append("&amp;currency=1"); } sb.append("&amp;tradeType=").append(buyOrSell); sb.append("&amp;currPage=1"); sb.append("&amp;payMethod=0"); sb.append("&amp;country=37"); sb.append("&amp;blockType=general"); sb.append("&amp;online=1"); sb.append("&amp;range=0"); return sb.toString(); } @Override public void fetchPriceJsonAndSave() {</code></pre> <p>// 注意,sell和buy用小写 getAndSavePriceInfo(&quot;sell&quot;, AssetType.USDT.getSymbol(),AssetType.CNY.getSymbol()); getAndSavePriceInfo(&quot;buy&quot;, AssetType.USDT.getSymbol(),AssetType.CNY.getSymbol()); getAndSavePriceInfo(&quot;sell&quot;, AssetType.BTC.getSymbol(),AssetType.CNY.getSymbol()); getAndSavePriceInfo(&quot;buy&quot;, AssetType.BTC.getSymbol(),AssetType.CNY.getSymbol()); /**</p> <ul> <li>新增USDT-&gt;USD汇率抓取</li> <li>@author mortal</li> <li> <p>@date 2021-12-12 */ getAndSavePriceInfo(&quot;sell&quot;, AssetType.USDT.getSymbol(),AssetType.USD.getSymbol()); getAndSavePriceInfo(&quot;buy&quot;, AssetType.USDT.getSymbol(),AssetType.USD.getSymbol()); }</p> <p>private void getAndSavePriceInfo(String sellOrBuy, String assetType,String currency) { long start = System.currentTimeMillis(); String responseString; try { int size = huobiUrlList.size(); if (index &gt;= size) { index = 0; } String url = huobiUrlList.get(index++);</p> <pre><code> String params = buildParam(sellOrBuy, assetType,currency); responseString = HttpClientUtils.getUseProxy(url + params, HEADERS); /*log.info("获取火币网{}币价信息:\n{}", assetType, responseString);*/ } catch (Exception e) { log.warn("获取火币网{}币价信息失败:{}", assetType, e.getMessage()); responseString = e.getMessage(); } long duration = System.currentTimeMillis() - start; /*https://otc-api.huobi.com/v1/data/trade-market?</code></pre> </li> <li>会员买入数币时请求参数,tradeType=sell,价格由低到高:6.53到7.32,第一条即为网站卖出一价 <em>&quot;coinId=2&amp;currency=1&amp;tradeType=sell&amp;currPage=1&amp;payMethod=0&amp;country=37&amp;blockType=general&amp;online=1&amp;range=0&amp;amount=&quot;; </em>会员卖出数币时的请求参数,tradeType=buy,价格由高到低:6.01到5.88,第一条即为网站买入一价 *&quot;coinId=2&amp;currency=1&amp;tradeType=buy&amp;currPage=1&amp;payMethod=0&amp;country=37&amp;blockType=general&amp;online=1&amp;range=0&amp;amount=&quot;;</li> <li> <p>*/</p> <pre><code>/*已改: 注意条件中sell和buy,与方法参数中的方向是同向的*/ if ("buy".equals(sellOrBuy) &amp;&amp; AssetType.USDT.getSymbol().equals(assetType)) { //USDT-&gt;USD汇率 if(AssetType.USD.getSymbol().equals(currency)){ parseAndSave(responseString, AssetType.USDT,AssetType.USD, ApiInfoEnum.HT_USDT_USD_FIRST_BUY_PRICE,RateTradingEnum.USD_USDT, BUY_DIRECTION, duration); //根据中国银行汇率进行USD兑换 coinDisposeExchangePrice.fetchPriceJsonAndSave(AssetType.USD.getSymbol(), RateSourceEnum.HT.getMsg()); return; } parseAndSave(responseString, AssetType.USDT,AssetType.CNY,ApiInfoEnum.HT_OTC_USDT_FIRST_BUY_PRICE,RateTradingEnum.CNY_USDT, BUY_DIRECTION, duration); } else if ("sell".equals(sellOrBuy) &amp;&amp; AssetType.USDT.getSymbol().equals(assetType)) { //USDT-&gt;USD汇率 if(AssetType.USD.getSymbol().equals(currency)){ parseAndSave(responseString, AssetType.USDT,AssetType.USD, ApiInfoEnum.HT_USDT_USD_FIRST_SELL_PRICE,RateTradingEnum.USD_USDT, SELL_DIRECTION, duration); //根据中国银行汇率进行USD兑换 coinDisposeExchangePrice.fetchPriceJsonAndSave(AssetType.USD.getSymbol(), RateSourceEnum.HT.getMsg()); return; } parseAndSave(responseString, AssetType.USDT,AssetType.CNY, ApiInfoEnum.HT_OTC_USDT_FIRST_SELL_PRICE,RateTradingEnum.CNY_USDT, SELL_DIRECTION, duration); } else if ("buy".equals(sellOrBuy) &amp;&amp; AssetType.BTC.getSymbol().equals(assetType)) { parseAndSave(responseString, AssetType.BTC,AssetType.CNY, ApiInfoEnum.HT_OTC_BTC_FIRST_BUY_PRICE,RateTradingEnum.CNY_BTC, BUY_DIRECTION, duration); } else if ("sell".equals(sellOrBuy) &amp;&amp; AssetType.BTC.getSymbol().equals(assetType)) { parseAndSave(responseString, AssetType.BTC,AssetType.CNY, ApiInfoEnum.HT_OTC_BTC_FIRST_SELL_PRICE,RateTradingEnum.CNY_BTC, SELL_DIRECTION, duration); }</code></pre> <p>}</p> <p>private void parseAndSave(String responseString, AssetType assetType, AssetType priceUnit, ApiInfoEnum apiInfoEnum, RateTradingEnum rateTradingEnum, Integer directionCode, long duration) { BigDecimal price = null; if (StringUtils.isNotBlank(responseString)) { try { JSONArray jsonArray = JSONObject.parseObject(responseString).getJSONArray(&quot;data&quot;); //取第一条价格即可 JSONObject jsonObject = jsonArray.getJSONObject(0); price = new BigDecimal(jsonObject.getString(&quot;price&quot;)); try { log.info(&quot;HuoBi抓取到的{}价格为:{}&quot;, assetType, price); // influxDbHelperService.saveToInfluxDB(&quot;BASE&quot;, assetType, apiInfoEnum, directionCode, price); // // exchangeRateService.checkPrice(assetType, price);</p> <pre><code> } catch (Exception e) { return; } } catch (Exception e) { log.error("HuoBi数据格式异常:{}", e.getMessage()); } } try { BaseExchangeRateHistoryDTO baseExchangeRateHistoryDTO = new BaseExchangeRateHistoryDTO(); baseExchangeRateHistoryDTO.setPriceUnit(priceUnit); baseExchangeRateHistoryDTO.setCoinType(assetType); baseExchangeRateHistoryDTO.setDuration(duration); baseExchangeRateHistoryDTO.setResponse(responseString); baseExchangeRateHistoryDTO.setPrice(price); baseExchangeRateHistoryDTO.setApiInfo(apiInfoEnum); baseExchangeRateHistoryDTO.setDirection(directionCode); baseExchangeRateHistoryDTO.setApiSource(RateSourceEnum.HT); baseExchangeRateHistoryDTO.setPriceTrading(rateTradingEnum); baseExchangeRateService.mergeBaseExchangeRate(baseExchangeRateHistoryDTO, true); } catch (Exception e) { log.error("HuoBi汇率更新失败:" + e.getMessage(), e); }</code></pre> <p>}</p> <p>public static void main(String[] args) { try { // 会员卖出数币时的请求 String userSellUrl=&quot;<a href="https://otc-api.huobi.com/v1/data/trade-market?coinId=2&currency=1&tradeType=buy&currPage=1&payMethod=0&country=37&blockType=general&online=1&range=0&amount">https://otc-api.huobi.com/v1/data/trade-market?coinId=2&currency=1&tradeType=buy&currPage=1&payMethod=0&country=37&blockType=general&online=1&range=0&amount</a>=&quot;; // 会员买入数币时请求. String userBuyUrl = &quot;<a href="https://otc-api.huobi.com/v1/data/trade-market?coinId=2&currency=2&tradeType=sell&currPage=1&payMethod=0&country=37&blockType=general&online=1&range=0&amount">https://otc-api.huobi.com/v1/data/trade-market?coinId=2&currency=2&tradeType=sell&currPage=1&payMethod=0&country=37&blockType=general&online=1&range=0&amount</a>=&quot;; // String responseString = HttpClientUtils.getUseProxy(userBuyUrl, HEADERS); log.info(responseString); } catch (Exception e) { log.error(&quot;获取huobi币价信息失败:{}&quot;, e.getMessage()); } } }</p> </li> </ul>

页面列表

ITEM_HTML