-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,看看它的結構。您應該能夠從結構看如何從雅虎對象返回訪問單個值。