yahoofinance.quotes.query1v7.QuotesRequest Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of YahooFinanceAPI Show documentation
Show all versions of YahooFinanceAPI Show documentation
This library provides some methods that should make it easy
to communicate with the Yahoo Finance API.
It allows you to request detailed information, some statistics
and historical quotes on stocks.
Separate functionality is available to request a simple FX quote.
Please check the javadoc to get a complete overview of the available methods
and to get an idea of which data is available from Yahoo Finance.
package yahoofinance.quotes.query1v7;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import yahoofinance.Utils;
import yahoofinance.YahooFinance;
import yahoofinance.util.RedirectableRequest;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
*
* @author Stijn Strickx
* @param Type of object that can contain the retrieved information from a
* quotes request
*/
public abstract class QuotesRequest {
private static final Logger log = LoggerFactory.getLogger(QuotesRequest.class);
private static final ObjectMapper objectMapper = new ObjectMapper();
protected final String symbols;
public QuotesRequest(String symbols) {
this.symbols = symbols;
}
public String getSymbols() {
return symbols;
}
protected abstract T parseJson(JsonNode node);
public T getSingleResult() throws IOException {
List results = this.getResult();
if (results.size() > 0) {
return results.get(0);
}
return null;
}
/**
* Sends the request to Yahoo Finance and parses the result
*
* @return List of parsed objects resulting from the Yahoo Finance request
* @throws IOException when there's a connection problem or the request is incorrect
*/
public List getResult() throws IOException {
List result = new ArrayList();
Map params = new LinkedHashMap();
params.put("symbols", this.symbols);
String url = YahooFinance.QUOTES_QUERY1V7_BASE_URL + "?" + Utils.getURLParameters(params);
// Get JSON from Yahoo
log.info("Sending request: " + url);
URL request = new URL(url);
RedirectableRequest redirectableRequest = new RedirectableRequest(request, 5);
redirectableRequest.setConnectTimeout(YahooFinance.CONNECTION_TIMEOUT);
redirectableRequest.setReadTimeout(YahooFinance.CONNECTION_TIMEOUT);
URLConnection connection = redirectableRequest.openConnection();
InputStreamReader is = new InputStreamReader(connection.getInputStream());
JsonNode node = objectMapper.readTree(is);
if(node.has("quoteResponse") && node.get("quoteResponse").has("result")) {
node = node.get("quoteResponse").get("result");
for(int i = 0; i < node.size(); i++) {
result.add(this.parseJson(node.get(i)));
}
} else {
throw new IOException("Invalid response");
}
return result;
}
}