1.11火币网站汇率抓取代码参考
<p>@Service
@Slf4j
public class HuoBiExchangePrice implements CoinPriceFetchService {
@Value("#{'${huobi.url}'.split(',')}")
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<String, String> HEADERS = buildHeader();
private static Map<String, String> buildHeader() {
Map<String, String> headers = new HashMap<>();
headers.put("portal", "web");</code></pre>
<p>// headers.put("client-type", "web");
// headers.put(":authority", "otc-api-hk.eiijo.cn");
// headers.put(":method", "GET");
// headers.put(":scheme", "https");
// headers.put("accept", "application/json, text/plain, <em>/</em>");
// headers.put("accept-encoding", "gzip, deflate, br");
// headers.put("accept-language", "zh-CN,zh;q=0.9");
// headers.put("fingerprint", "bf4852e9e49efbd201abf49b799ed6e1");
// headers.put("origin", "<a href="https://c2c.huobi.com">https://c2c.huobi.com</a>");
// headers.put("otc-language", "zh-CN");
// headers.put("referer", "<a href="https://c2c.huobi.com/">https://c2c.huobi.com/</a>");
// headers.put("sec-fetch-dest", "empty");
// headers.put("sec-fetch-mode", "cors");
// headers.put("sec-fetch-site", "cross-site");
// headers.put("token", "undefined");
// headers.put("trace_id", "b79c073f-8806-4e08-b3e2-f51186378ad9");
// headers.put("uid", "0");
// headers.put("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36");
// headers.put("x-requested-with", "XMLHttpRequest");
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("&currency=2");
}else{
sb.append("&currency=1");
}
sb.append("&tradeType=").append(buyOrSell);
sb.append("&currPage=1");
sb.append("&payMethod=0");
sb.append("&country=37");
sb.append("&blockType=general");
sb.append("&online=1");
sb.append("&range=0");
return sb.toString();
}
@Override
public void fetchPriceJsonAndSave() {</code></pre>
<p>// 注意,sell和buy用小写
getAndSavePriceInfo("sell", AssetType.USDT.getSymbol(),AssetType.CNY.getSymbol());
getAndSavePriceInfo("buy", AssetType.USDT.getSymbol(),AssetType.CNY.getSymbol());
getAndSavePriceInfo("sell", AssetType.BTC.getSymbol(),AssetType.CNY.getSymbol());
getAndSavePriceInfo("buy", AssetType.BTC.getSymbol(),AssetType.CNY.getSymbol());
/**</p>
<ul>
<li>新增USDT->USD汇率抓取</li>
<li>@author mortal</li>
<li>
<p>@date 2021-12-12
*/
getAndSavePriceInfo("sell", AssetType.USDT.getSymbol(),AssetType.USD.getSymbol());
getAndSavePriceInfo("buy", 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 >= 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>"coinId=2&currency=1&tradeType=sell&currPage=1&payMethod=0&country=37&blockType=general&online=1&range=0&amount=";
</em>会员卖出数币时的请求参数,tradeType=buy,价格由高到低:6.01到5.88,第一条即为网站买入一价
*"coinId=2&currency=1&tradeType=buy&currPage=1&payMethod=0&country=37&blockType=general&online=1&range=0&amount=";</li>
<li>
<p>*/</p>
<pre><code>/*已改: 注意条件中sell和buy,与方法参数中的方向是同向的*/
if ("buy".equals(sellOrBuy) && AssetType.USDT.getSymbol().equals(assetType)) {
//USDT->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) && AssetType.USDT.getSymbol().equals(assetType)) {
//USDT->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) && 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) && 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("data");
//取第一条价格即可
JSONObject jsonObject = jsonArray.getJSONObject(0);
price = new BigDecimal(jsonObject.getString("price"));
try {
log.info("HuoBi抓取到的{}价格为:{}", assetType, price);
// influxDbHelperService.saveToInfluxDB("BASE", 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="<a href="https://otc-api.huobi.com/v1/data/trade-market?coinId=2¤cy=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¤cy=1&tradeType=buy&currPage=1&payMethod=0&country=37&blockType=general&online=1&range=0&amount</a>=";
// 会员买入数币时请求.
String userBuyUrl = "<a href="https://otc-api.huobi.com/v1/data/trade-market?coinId=2¤cy=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¤cy=2&tradeType=sell&currPage=1&payMethod=0&country=37&blockType=general&online=1&range=0&amount</a>=";
//
String responseString = HttpClientUtils.getUseProxy(userBuyUrl, HEADERS);
log.info(responseString);
} catch (Exception e) {
log.error("获取huobi币价信息失败:{}", e.getMessage());
}
}
}</p>
</li>
</ul>