繁体   English   中英

从csv格式的Finance.yahoo.com中检索BSE / NSE上市股票的价格时获得“ N / A”

[英]Getting “N/A” when retrieve BSE/NSE listed stock's price from finance.yahoo.com in csv format

我曾尝试从Yahoo Finance获取印度NSE和BSE股票价格数据。 我通过了stackoverflow中的一些链接,它提供了以csv格式获取数据的功能。 似乎仅适用于非印度股票市场价格。 我需要通过Yahoo金融获得BSE(孟买证券交易所)和NSE(国家证券交易所)。

这是示例链接

http://download.finance.yahoo.com/d/quotes.csv?s=BOBSL.BO,JAIPAN.BO,SANGHIIN.BO&f=snl1d1t1ohgdrx

当我尝试获取价值时,它在表格的所有价值中都给出了“ N / A”。

如何获得股票的实际价值? 我需要在Java程序中进一步实现它。 任何帮助表示赞赏!!

这是我的Java代码。

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;
    }
}

问题是您没有从Yahoo的CSV中获取BSE或NSE数据,这就是您遇到问题的原因。 如果将您的URL更改为垃圾符号,则会得到相同的“ N / A”响应: http : //download.finance.yahoo.com/d/quotes.csv?s=I_AM_A_FAKE_SYMBOL&f=snl1d1t1ohgdrx “。使用有效符号(例如MSFT)进行查询,您会获得良好的CSV响应。

您需要弄清楚如何获取良好的数据。 对于好的数据,通常需要付费。 您可以看到Yahoo最近停止支持此数据: http : //in.answers.yahoo.com/question/index?qid=20130711195331AAoMOCm

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM