2013-06-21 17 views
9

yahoo apiから株式相場を取得しようとしていました。 クエリへの私の入力は、(テキストフィールドからの)株式ティッカーだけです。ボタンをクリックすると背景のJavaScriptメソッド "getprice()"が呼び出されます。 が、私はこのここヤフーファイナンスからjson形式で株価情報を入手する

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); 

「ストック」のように見えるJavaスクリプトコードを持って、私は与えられたティッカーのためLastTradePriceOnlyを表示するテキストフィールドです。

出力が表示されません。 デバッグにもエラーは表示されません。 この問題で何か提案を受けることはできますか?

+0

あなたはyahooapis.comドメイン上のJavaScriptをホストする場合を除き、あなたが原因の原点制限にJSONを取得することができなくなります。 –

+0

また、株式市場APIを提供するライブラリを使用することもできます。そのため、自分で実装する必要はありません。 [stocks.js](https://github.com/wagenaartje/stocks.js)をご覧ください –

答えて

13

これを試してください。

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私もあなたのための実例を追加しました。

+0

例のおかげで - 非常にいいです。 –

+0

@vladbezden複数のシンボルを使用するクエリに対して、これをどのように実装しますか? – rambossa

+1

@MichaelRamosでは、複数のシンボルを取得するために同じコードを使用することができます。カンマ区切りのカンマ区切りのリスト( 'MSFT、IBM')をクエリに送信するだけで、data.query.results.quoteオブジェクトにMSFT用とIBM用の2つのオブジェクト情報が含まれます。そのオブジェクトがどのようなセキュリティを持っているかはdata.query.results.quote [0] .symbolは 'MSFT'を返し、data.query.results.quote [1] .symbolは 'IBM'を返します –

3

これは、それはあなたがそれを必要とする場合にはAngularJSで行うの方法です:

あなたのビューでは:お使いのコントローラで

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

:株式記号名は、サービスメソッドに$のscope.ticker_nameを経由して渡されます'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; 
    }); 
}]); 

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); 
    } 
}]); 
関連する問題