-1

我希望创造一个JavaScript函数,可以放置在一个html的历史股票数据可以在javascript

我想发送功能的股票代码,起始日期和结束日期。

我希望函数返回一个2d数组,其中每行是所需库存的EOD或OHLC数据的一天。

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

我已经在其他语言做了这个,但我新的Java脚本,几乎失去了。

下面的代码被发现堆栈,是我能找到的最接近,但我不明白如何使用它。

<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新手,但我真的很想学习尽可能多的东西。

+3

所以,你要我们改变在Python代码为JavaScript,而你只是坐在回和放松。 –

+0

没有,我一直工作在这一个星期左右,甚至仅仅是从哪里开始的指针将是有益的。像什么将一个函数调用顶端代码的样子,或者是那里了urllib.urlopen JavaScript版本()。 – user1002331

回答

1

第一的JavaScript的一点解释:

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

这是一个jQuery(见$(文件))事件处理程序(当文件已准备就绪,将被调用)。它的胆量:

 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 */; 

这些刚建立的请求,这是考虑到了jQuery getJSON方法:

$.getJSON(url, data, callback); 

在内部,jQuery是发送data请求url,并且当它接收到一个响应它正在呼叫callback与响应,有点像这样的伪代码:

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

所以ST这个工作就是创建一个查询对象,并将它与目标url传递给jquery,为你做好工作。你还可以创建一个需要单个参数的函数,并将其传递给jquery,以便在获得响应时进行调用。这些被称为回调。

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

,看看有什么可以JSON对象,你从雅虎拿回最简单的方法是使用萤火虫或调试工具在Chrome中设置一个断点内callback,看看它的结构。您应该能够从结构看如何从雅虎对象返回访问单个值。