package io.bitsquare.pricefeed.providers;
import com.google.gson.Gson;
import com.google.gson.internal.LinkedTreeMap;
import io.bitsquare.http.HttpClient;
import io.bitsquare.http.HttpException;
import io.bitsquare.locale.CurrencyUtil;
import io.bitsquare.locale.TradeCurrency;
import io.bitsquare.pricefeed.PriceData;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
import static java.lang.Double.parseDouble;
public class CoinmarketcapProvider {
private static final Logger log = LoggerFactory.getLogger(CoinmarketcapProvider.class);
private final Set<String> supportedAltcoins;
private final HttpClient httpClient;
public CoinmarketcapProvider() {
this.httpClient = new HttpClient("https://api.coinmarketcap.com/");
supportedAltcoins = CurrencyUtil.getAllSortedCryptoCurrencies().stream()
.map(TradeCurrency::getCode)
.collect(Collectors.toSet());
}
public Map<String, PriceData> request() throws IOException, HttpException {
Map<String, PriceData> marketPriceMap = new HashMap<>();
String response = httpClient.requestWithGET("v1/ticker/?limit=200", "User-Agent", "");
List<LinkedTreeMap<String, Object>> list = new Gson().fromJson(response, ArrayList.class);
list.stream().forEach(treeMap -> {
String code = (String) treeMap.get("symbol");
if (supportedAltcoins.contains(code)) {
double price_btc = parseDouble((String) treeMap.get("price_btc"));
marketPriceMap.put(code, new PriceData(code, price_btc, price_btc, price_btc));
}
});
return marketPriceMap;
}
}