-1

我正在寻找创建一个可以放在 .html 中的 javascript 函数

我想向函数发送股票代码、开始日期和结束日期。

我想让函数返回一个二维数组,其中每一行是请求库存的 EOD 或 OHLC 数据的一天。

我想使用雅虎,因为谷歌股票数据将被淘汰。

我已经用其他语言做到了这一点,但我是 java 脚本的新手,几乎迷路了。

以下代码是在 Stack 上找到的,是我能找到的最接近的代码,但我不明白如何使用它。

<script type="text/javascript" src="jquery-1.5.1.js"></script>
<script type="text/javascript">
    $(document).ready(function() {
            var symbol='goog';
            var callback = function(data) {
                    var price=data.query.results.span[0].content;
                    alert('Stock Price: ' + price);
            };

        var url = 'http://query.yahooapis.com/v1/public/yql';
        // this is the lovely YQL query (html encoded) which lets us get the stock price:
        // select * from html where url="http://finance.yahoo.com/q?s=goog" and xpath='//span[@id="yfs_l10_goog"]'
        var data = "q=select%20*%20from%20html%20where%20url%3D%22http%3A%2F%2Ffinance.yahoo.com%2Fq%3Fs%3D" + symbol + "%22%20and%20xpath%3D'%2F%2Fspan%5B%40id%3D%22yfs_l10_" + symbol + "%22%5D'&format=json";
        $.getJSON(url, data, callback);
});

以下是我在 javascript 中想要的,但它在 python 中

def get_historical_prices(symbol, start_date, end_date):
"""
Get historical prices for the given ticker symbol.
Date format is 'YYYYMMDD'

Returns a nested list.
"""
url = 'http://ichart.yahoo.com/table.csv?s=%s&' % symbol + \
      'd=%s&' % str(int(end_date[4:6]) - 1) + \
      'e=%s&' % str(int(end_date[6:8])) + \
      'f=%s&' % str(int(end_date[0:4])) + \
      'g=d&' + \
      'a=%s&' % str(int(start_date[4:6]) - 1) + \
      'b=%s&' % str(int(start_date[6:8])) + \
      'c=%s&' % str(int(start_date[0:4])) + \
      'ignore=.csv'
days = urllib.urlopen(url).readlines()
data = [day[:-2].split(',') for day in days]
return data

对不起,如果我要求太多。因为我是 javascript 新手,但我真的有兴趣尽可能多地学习。

4

1 回答 1

1

首先对javascript进行一点解释:

$(document).ready(function() {
        //... lines
});

这是一个 jquery(参见 $(document))事件处理程序(它将在文档准备好时调用)。它的胆量:

        var symbol='goog';
        var callback = function(data) {
                var price=data.query.results.span[0].content;
                alert('Stock Price: ' + price);
        };

callback现在是一个带有一个参数的闭包。作为一个闭包,它带着它的上下文,所以当它被调用时,它可以访问它范围内的任何东西。在这里,它不使用其范围之外的任何东西,因此它的行为就像一个普通函数。它所做的只是与给出的数据对象的某些部分建立一个对话框。

    var url = 'http://query.yahooapis.com/v1/public/yql';
    var data = /* stuff */;

这些只是设置了请求,它被赋予了 jquerygetJSON方法:

    $.getJSON(url, data, callback);

在内部,jquery 将data请求发送到url,当它收到响应时,它会使用响应调用callback,有点像这个伪代码:

 response = queryURL(url,data);
 callback(response);

所以结构是创建一个查询对象,并将其与目标 url 一起传递给 jquery 为您完成艰苦的工作。您还创建了一个需要单个参数的函数,并将其传递给 jquery 在收到响应时调用。这些被称为回调。

要实现您的 python,只需将 url ( http://ichart.yahoo.com/table.csv) 从查询字符串(之后的所有内容)中拆分出来,并使用相同的结构。将要更新的内容(页面上的视图等)的逻辑放在callback函数中,或者更好地使用它来触发一些更新机制。

查看从 yahoo 返回的 json 对象中的内容的最简单方法是使用 Firebug 或 Chrome 中的调试工具在内部设置断点callback并查看其结构。您应该能够从该结构中看到如何从 yahoo 返回的对象中访问各个值。

于 2012-06-20T08:10:41.150 回答