【问题标题】:Getting "N/A" when retrieve BSE/NSE listed stock's price from finance.yahoo.com in csv format从 Finance.yahoo.com 以 csv 格式检索 BSE/NSE 上市股票价格时获取“N/A”
【发布时间】:2013-11-11 07:37:28
【问题描述】:

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

这是样本link

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

【问题讨论】:

    标签: java yahoo stock yahoo-finance stockquotes


    【解决方案1】:

    问题是您没有从 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 响应。

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

    【讨论】:

    • 我是通过您提供的链接来的,是否可以通过其他方式从雅虎获取数据?
    • 不是来自雅虎,但其他提供商会拥有它。 (通常您需要为这些数据付费。)
    • 最后的重点是,我们不是免费获得 BSE 数据吗?
    • 是的,您通常需要为财务数据付费。如果您计划在商业环境中使用它,则尤其如此。在某种程度上,你得到了你所付出的。在这种情况下,如果提供商(雅虎)停止提供“免费”,您将无法追索。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    相关资源
    最近更新 更多