我希望创建一个可以放在.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的新手,但我真的很想学习尽可能多的东西。
答案 0 :(得分: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 */;
这些只是设置请求,该请求被赋予jquery getJSON
方法:
$.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返回中访问各个值。