-1

Я ищу, чтобы создать яваскрипт функции, которая может быть помещена в .htmlполучить исторические данные о запасах в JavaScript

Я хотел бы послать функции а символ акции, начальную дату, и дату окончания.

Я хотел бы, чтобы функция возвращала массив 2d, где каждая строка является днем ​​данных EOD или OHLC для запрашиваемого запаса.

Я хотел бы использовать Yahoo, потому что данные о запасах Google будут прекращены.

Я сделал это на других языках, но я новичок в 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, но это в питона

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

нет, я работал над этим около недели и даже просто указатель, с чего начать было бы полезно. например, как выглядит вызов функции для верхнего кода, или есть javascript-версия urllib.urlopen(). – 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); 

Так ул ructure - создать объект запроса и передать его с целевым URL-адресом в jquery, чтобы выполнить тяжелую работу за вас. Вы также создаете функцию, которая ожидает один аргумент, и передает это также для jquery для вызова, когда он получает ответ. Они называются обратными вызовами.

Чтобы реализовать свой питон, просто разделите URL-адрес (http://ichart.yahoo.com/table.csv) на строку запроса (все после этого) и используйте ту же структуру. Поместите логику обновления (просмотров на странице и т. Д.) Внутри функции callback или даже лучше использовать это для запуска некоторого механизма обновления.

Самый простой способ узнать, что находится в объекте json, который вы возвращаете из yahoo, - использовать Firebug или инструменты отладки в Chrome, чтобы установить точку останова внутри и посмотреть ее структуру. Вы должны уметь видеть из этой структуры, как обращаться к отдельным значениям из возвращаемого объекта yahoo.

Смежные вопросы