Получение обновлений акций с помощью Yahoo Finance

В основном то, что я пытаюсь сделать, это получить котировки акций для конкретной компании. В моем коде я даю символ конкретной компании (например: FB) в текстовом поле (символ) и когда я нажимаю кнопку (getupdate) он должен содержать подробную информацию об этой конкретной акции, которую я ввожу в текстовое поле.

Вот мой код:

<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js">
</script>
<script>
$(document).ready(function($){
$('getupdate').click(function() {

        var symbol = $('input[id=symb]').val(); \\For Example:FB

        var url = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20WHERE%20symbol%3D'+symbol+'&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys";

        $.getJSON(url, function(data) {
            var items = [];
            $.each(data.query.results.quote, function(key, val) {
                items.push('<li id="' + key + '">' + val + '</li>');

            });
            $('<ul/>', { 'class': 'my-new-list', html: items.join('')}).appendTo('body');
        });
});
});
</script>

</head>
<body>
<div style="padding:16px;">
    Stock Ticker : <input id="symb" type="textbox" value="Ticker"></input>
</div>
<button id="getupdate" name = "getupdate" type="button">Get Updates!</button>
</body>
</html>

Где я ошибаюсь?

Заранее спасибо.


person Deepesh Shetty    schedule 18.04.2013    source источник
comment
Как минимум 2 ошибки в коде $('getupdate') =› $('#getupdate') и кавычки в URL (около +symbol+) неверны.   -  person Mikhail Chernykh    schedule 18.04.2013
comment
Вы должны проверять и обрабатывать нулевые записи: if (data.query.count == 0)... И вы неправильно строите строку запроса. Действительно ли значение символа помещается в строку URL-адреса?   -  person Steve Wellens    schedule 18.04.2013
comment
@netme Спасибо. Я внес изменения в код. Но до сих пор не удалось получить котировки акций по моему запросу.   -  person Deepesh Shetty    schedule 18.04.2013
comment
@SteveWellens У меня есть эти изменения. Спасибо .   -  person Deepesh Shetty    schedule 18.04.2013
comment
@DeepeshShetty, пожалуйста, посмотрите мой ответ. Я также исправил строку запроса Yahoo.   -  person Mikhail Chernykh    schedule 18.04.2013


Ответы (4)


У вас есть несколько ошибок в вашем коде JS:

  1. Неверный селектор для кнопки: $('getupdate') => $('#getupdate');
  2. Неправильные кавычки внутри значения url;
  3. Неверная строка запроса к Yahoo API;
  4. Неправильный знак комментария \\For Example:FB.

Ваш JS должен быть таким:

jQuery(document).ready(function($){
    $('#getupdate').click(function() {
            var symbol = $('input[id=symb]').val(); 
            var url = 'http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%3D%22' + symbol + '%22&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=';
            $.getJSON(url, function(data) {
                var items = [];
                $('#results').html('');
                $.each(data.query.results.quote, function(key, val) {
                    items.push('<li id="' + key + '">' + val + '</li>');

                });
                $('<ul/>', { 'class': 'my-new-list', html: items.join('')}).appendTo('#results');
            });
    });
});

И, пожалуйста, добавьте этот код после тега <button> в свой HTML. Это поможет вам легко очистить результаты перед новым запросом:

<div id="results"></div>

Вот пример: http://jsfiddle.net/6EFqk/1/

Я не уверен, что выходной формат правильный, переформатируйте его по своему усмотрению.

person Mikhail Chernykh    schedule 18.04.2013
comment
Спасибо . Теперь работает нормально. Но проблема в том, что когда я изменяю значение текстового поля и снова нажимаю кнопку, оно не показывает мне кавычки нового значения, которое я ввел в текстовое поле (например: я даю значение FB в текстовом поле и нажимаю «Получить обновления», оно покажет мне кавычки FB, но когда я изменяю значение с FB на IBM, а затем нажимаю кнопку, он покажет мне предыдущие значения акций FB. Теперь мне нужно обновлять каждый раз, когда я ввожу новое значение в текстовое поле. Любая помощь? - person Deepesh Shetty; 18.04.2013
comment
Поскольку вы используете функцию appendTo, она добавляет новый контент в конец. Я добавил новый div и теперь каждый раз заменяю его содержимое. Я изменил пример: jsfiddle.net/6EFqk/1 - person Mikhail Chernykh; 18.04.2013

Во-первых, вы не правильно выбираете кнопку.

$('#getupdate').click(function() {

Во-вторых, ваши косые черты для комментария обратные, они всегда идут вперед, а не назад.

//For Example:FB

И, наконец, вы не получаете никаких результатов по этой причине, возвращаемой сервисом:

Текущая таблица yahoo.finance.quotes заблокирована. Это превысило отведенные квоты либо времени, либо инструкций

http://jsfiddle.net/RVFW3/

person Kevin B    schedule 18.04.2013
comment
Спасибо за быстрый ответ . Я внес необходимые изменения. Но почему этот стол заблокирован? Я не получаю заявления. Превышены отведенные квоты ни времени, ни инструкций. - person Deepesh Shetty; 18.04.2013
comment
Не знаю, никогда не пользовался этим сервисом. - person Kevin B; 18.04.2013
comment
@Keven B Теперь все работает. Но проблема в том, что когда я изменяю значение текстового поля и снова нажимаю кнопку, оно не показывает мне кавычки нового значения, которое я ввел в текстовое поле (например: я даю значение FB в текстовом поле и нажмите «Получить обновления», он покажет мне котировки FB , но когда я изменю значение с FB на IBM, а затем нажму кнопку, он покажи мне предыдущие значения акций FB. Теперь мне нужно обновлять каждый раз, когда я ввожу новое значение в текстовое поле. Любая помощь? - person Deepesh Shetty; 18.04.2013
comment
Это работало нормально для меня. Ответ выше. Большое спасибо дружище за помощь. - person Deepesh Shetty; 18.04.2013
comment
давайте продолжим обсуждение в чате - person Deepesh Shetty; 19.04.2013

Я только что нашел этот поток, выполнив поиск в Google по этому вопросу.

Возможно, этот сайт ответит на ваши вопросы... http://bitbenderz.com/stockticker/

person Tomcat253    schedule 05.10.2013
comment
Обратите внимание, что ответы только по ссылкам не рекомендуются, ответы SO должны быть конечной точкой поиска. для решения (по сравнению с еще одной остановкой ссылок, которые со временем устаревают). Пожалуйста, рассмотрите возможность добавления здесь отдельного синопсиса, оставив ссылку в качестве ссылки. - person kleopatra; 05.10.2013

Вот версия решения: jsfiddle

$.getJSON(yqlUrl1, function(data){
    $.each(data.query.results.row, function(index, item){

    var element = $('<div></div>');

    element.append('<span>' + item.symbol + '</span> ');
    element.append('<span>' + item.price + '</span> ');

    if (item.change.indexOf('+') > -1) {
        element.append('<span class="stockUp"> ' + item.change + '</span>');
    } else {
        element.append('<span class="stockDown"> ' + item.change + '</span>');
    }

    element.appendTo('#quotes');   
    });
})
person Marc    schedule 04.03.2014