2013-06-21 6 views
9

J'essayais d'obtenir des cotations boursières de yahoo api. Mon entrée dans la requête est uniquement un ticker boursier (à partir d'un champ de texte). Sur le bouton, cliquez sur la méthode JavaScript d'arrière-plan "getprice()" est appelée. J'ai un code java script qui ressemble à ceciObtenir des cotations boursières de Yahoo Finance au format json en utilisant un javascript

function getprice() 
{ 
    var symbol = $('#stockquote').val(); 


    var url = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22"+symbol+"%22)%0A%09%09&env=http%3A%2F%2Fdatatables.org%2Falltables.env&format=json"; 

    $.getJSON(url, function (json) 
    { 

     var lastquote = json.query.results.quote.LastTradePriceOnly; 
     $('#stock').text(lastquote); 

    }); 
} 

$('#stock').text(lastquote); 

Ici « stock » est le champ de texte où je veux afficher le LastTradePriceOnly pour le symbole donné.

Je ne vois aucune sortie se produire. Le débogage n'indique également aucune erreur. Puis-je avoir des suggestions sur ce problème?

+0

À moins que vous hébergez votre Javascript domaine yahooapis.com vous ne serez pas en mesure d'obtenir JSON en raison de la restriction d'origine. –

+0

Vous pouvez également essayer d'utiliser une bibliothèque qui fournit l'API boursière, vous n'avez donc pas besoin de l'implémenter vous-même. Jetez un oeil à [stocks.js] (https://github.com/wagenaartje/stocks.js) –

Répondre

13

Essayez ceci.

function getData() { 
    var url = 'http://query.yahooapis.com/v1/public/yql'; 
    var symbol = $("#symbol").val(); 
    var data = encodeURIComponent("select * from yahoo.finance.quotes where symbol in ('" + symbol + "')"); 

    $.getJSON(url, 'q=' + data + "&format=json&diagnostics=true&env=http://datatables.org/alltables.env") 
     .done(function (data) { 
      $('#result').text("Price: " + data.query.results.quote.LastTradePriceOnly); 
     }) 
     .fail(function (jqxhr, textStatus, error) { 
      var err = textStatus + ", " + error; 
      console.log('Request failed: ' + err); 
     }); 
} 

Here J'ai également ajouté un exemple de travail pour vous.

+0

Merci pour l'exemple - très agréable. –

+0

@vladbezden Comment implémenter ceci pour une requête qui utilise plus d'un symbole? – rambossa

+1

@MichaelRamos, vous pouvez utiliser le même code pour obtenir plus d'un symbole. Il suffit d'envoyer une liste de symboles séparés par des virgules ('MSFT, IBM') pour interroger, et maintenant votre objet data.query.results.quote aura deux informations d'objets, une pour MSFT et une autre pour IBM. Vous pouvez trouver la sécurité de cet objet par data.query.results.quote [0] .symbol renverra 'MSFT' et data.query.results.quote [1] .symbol renverra 'IBM' –

3

Voilà comment cela se fait dans AngularJS au cas où vous avez besoin:

À votre avis:

<section ng-controller='StockQuote'> 
    <span>Last Quote: {{lang}}, {{lastTradeDate}}, {{lastTradeTime}}, {{lastTradePriceOnly}}</span> 
</section><br> 

Dans votre contrôleur: Le nom de symbole boursier est passé par scope.ticker_name de $ à la méthode de service 'getData.getStockQuote'.

appModule.controller('StockQuote', ['$scope', 'getData', 
function($scope, getData) { 
    var api = getData.getStockQuote($scope.ticker_name); 
    var data = api.get({symbol:$scope.ticker_name}, function() { 
     var quote = data.query.results.quote; 
     $scope.lang = data.query.lang; 
     $scope.lastTradeDate = quote.LastTradeDate; 
     $scope.lastTradeTime = quote.LastTradeTime; 
     $scope.lastTradePriceOnly = quote.LastTradePriceOnly; 
    }); 
}]); 

Dans votre service:

appModule.service('getData', ['$http', '$resource', function($http, $resource) { 
    // This service method is not used in this example. 
    this.getJSON = function(filename) { 
     return $http.get(filename); 
    }; 
    // The complete url is from https://developer.yahoo.com/yql/. 
    this.getStockQuote = function(ticker) { 
     var url = 'http://query.yahooapis.com/v1/public/yql'; 
     var data = encodeURIComponent(
      "select * from yahoo.finance.quotes where symbol in ('" + ticker + "')"); 
     url += '?q=' + data + '&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys'; 
     return $resource(url); 
    } 
}]); 
Questions connexes