2013-06-21 7 views
9

yahoo api에서 주식 시세를 얻으려고했습니다. 쿼리에 대한 내 입력은 (텍스트 필드의) 주식 시세 표시 자일뿐입니다. 버튼을 클릭하면 배경 JavaScript 메서드 "getprice()"가 호출됩니다. 내가이 여기javascript를 사용하여 json 형식으로 yahoo finance에서 주식 시세를 가져옵니다.

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

"재고"과 같은 자바 스크립트 코드가 나는 주어진 시세의 LastTradePriceOnly을 표시 할 텍스트 필드입니다.

출력이 나타나지 않습니다. 디버깅도 오류를 표시하지 않습니다. 이 문제와 관련하여 제안 사항을 얻을 수 있습니까?

+0

당신으로 인해 원산지 제한에 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 용 두 개의 객체 정보가 있습니다. 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; 
    }); 
}]); 

: 당신이 yahooapis.com 도메인에서 자바 스크립트를 호스트하지 않는

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); 
    } 
}]); 
관련 문제