Java 获得;不适用;检索BSE/NSE上市股票时';s以csv格式从finance.yahoo.com获取的价格
我曾试图从雅虎财经获取印度NSE和BSE股票价格数据。我浏览了stackoverflow中的一些链接,它提供了以csv格式获取数据的功能。这似乎只适用于非印度股市的价格。我需要通过雅虎金融获得BSE(孟买证券交易所)和NSE(国家证券交易所) 这是样品 当我尝试获取值时,它在表的所有值中给出“N/A” 如何获得股票价格的真实价值??我需要在Java程序中进一步实现它。感谢您的帮助 这是我的Java代码Java 获得;不适用;检索BSE/NSE上市股票时';s以csv格式从finance.yahoo.com获取的价格,java,yahoo,stock,yahoo-finance,stockquotes,Java,Yahoo,Stock,Yahoo Finance,Stockquotes,我曾试图从雅虎财经获取印度NSE和BSE股票价格数据。我浏览了stackoverflow中的一些链接,它提供了以csv格式获取数据的功能。这似乎只适用于非印度股市的价格。我需要通过雅虎金融获得BSE(孟买证券交易所)和NSE(国家证券交易所) 这是样品 当我尝试获取值时,它在表的所有值中给出“N/A” 如何获得股票价格的真实价值??我需要在Java程序中进一步实现它。感谢您的帮助 这是我的Java代码 package httpDownloader; import java.text.Date
package httpDownloader;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import stock.StockInTime;
public class HistoryHttpDownloader extends HttpDownloader {
public static ArrayList<StockInTime> getHistoricalQuotes(String symbol,
Date from, Date to) {
String data = downloadFile(getHistoryURI(symbol, from, to));
ArrayList<StockInTime> stockHistory = parseHistoryData(data);
return stockHistory;
}
private static String getHistoryURI(String symbol, Date from, Date to) {
Calendar fromDate = new GregorianCalendar();
fromDate.setTime(from);
Calendar toDate = new GregorianCalendar();
toDate.setTime(to);
String uri = "http://ichart.finance.yahoo.com/table.csv?s=";
uri += symbol;
uri += "&a=" + fromDate.get(Calendar.MONTH);
uri += "&b=" + fromDate.get(Calendar.DAY_OF_MONTH);
uri += "&c=" + fromDate.get(Calendar.YEAR);
uri += "&d=" + toDate.get(Calendar.MONTH);
uri += "&e=" + toDate.get(Calendar.DAY_OF_MONTH);
uri += "&f=" + toDate.get(Calendar.YEAR);
return uri += "&g=d";
}
public static ArrayList<StockInTime> parseHistoryData(String data) {
ArrayList<StockInTime> stockHistory = new ArrayList<StockInTime>();
String[] csvRows = data.split("\n");
// First row contains headers, ignored
for (int i = 1; i < csvRows.length; i++) {
String[] stockInfo = csvRows[i].split(",");
StockInTime stockPoint = new StockInTime(
convertToDate(stockInfo[0]), parseDouble(stockInfo[4]));
stockHistory.add(stockPoint);
}
return stockHistory;
}
private static Date convertToDate(String sDate) {
try {
DateFormat dateformater = new SimpleDateFormat("yyyy-MM-dd");
return dateformater.parse(sDate);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}
package-httpDownloader;
导入java.text.DateFormat;
导入java.text.ParseException;
导入java.text.simpleDataFormat;
导入java.util.ArrayList;
导入java.util.Calendar;
导入java.util.Date;
导入java.util.GregorianCalendar;
进口库存.库存时间;
公共类HistoryHttpDownloader扩展了HttpDownloader{
公共静态ArrayList getHistoricalQuotes(字符串符号,
日期从,日期到){
字符串数据=下载文件(getHistoryURI(符号,从,到));
ArrayList stockHistory=parseHistoryData(数据);
返回股票历史;
}
私有静态字符串getHistoryURI(字符串符号、日期从、日期到){
日历fromDate=新的GregorianCalendar();
fromDate.setTime(从);
日历toDate=新的GregorianCalendar();
toDate.设置时间(至);
字符串uri=”http://ichart.finance.yahoo.com/table.csv?s=";
uri+=符号;
uri+=“&a=“+fromDate.get(Calendar.MONTH);
uri+=“&b=“+fromDate.get(日历.月日);
uri+=“&c=“+fromDate.get(日历年);
uri+=“&d=“+toDate.get(日历月);
uri+=“&e=“+toDate.get(日历日/月日);
uri+=“&f=“+toDate.get(日历年);
返回uri+=“&g=d”;
}
公共静态ArrayList parseHistoryData(字符串数据){
ArrayList stockHistory=新的ArrayList();
字符串[]csvRows=data.split(“\n”);
//第一行包含标题,已忽略
对于(int i=1;i
问题在于你无法从雅虎的CSV中获取BSE或NSE数据,这就是你遇到问题的原因。如果我将您的URL更改为垃圾符号,则会得到相同类型的“N/a”响应:“。如果您使用有效符号(如MSFT)进行查询,则会得到良好的CSV响应
你需要弄清楚如何获得好的数据。要获得好的数据,你通常需要付费。你可以看到雅虎最近停止支持这一数据:。我通过你提供的链接,可以通过任何其他方式从雅虎获得数据?不是从雅虎,而是其他提供商。(通常你必须为这些数据付费。)最后一点是,我们并不是免费获得BSE数据的?对-你通常必须为金融数据付费。如果你计划在商业环境中使用这些数据,这一点尤其正确。在某种程度上,你可以得到你付费的数据。在这种情况下,如果提供商(雅虎)要求“免费”,你就没有追索权停止提供它。