2013-06-11 3 views
1

내 레일 앱에서 API를 통해 ESPN 헤드 라인을 캡쳐하는 작업 방법이 있습니다. 그러나 이것을 복제하여 모든 NFL 플레이어를 포착하려고하면이 방법이 실패합니다.레일에서 ESPN API 문제 해결

IRB에서 Headline.all을 실행하면 다음과 같이 IRB를 통해 작동하는 헤드 라인 메서드가 작동합니다.

MODEL (headline.rb) 
class Headline 
    include HTTParty 
    base_uri 'http://api.espn.com/v1/sports' 

    def self.all 
    response = Headline.get('/news/headlines', 
     :query => { :apikey => 'my_api_key' }) 
    response["headlines"] 
    end 
end 

CONTROLLER (headlines_controller.rb) 
class HeadlinesController < ApplicationController 
    def index 
    @headlines = Headline.all 
    end 
end 

다음은 NFL 플레이어와 거의 동일한 코드이며 IRB를 통해 "nil"을 반환합니다. 어떤 아이디어?

MODEL (athlete.rb) 
class Athlete 
    include HTTParty 
    base_uri 'http://api.espn.com/v1/sports' 

    def self.all 
    response = Athlete.get('/football/nfl/athletes', 
     :query => { :apikey => 'my_api_key_from_espn' }) 
    response["athletes"] 
    end 
end 

CONTROLLER (athletes_controller.rb) 
class AthletesController < ApplicationController 
    def index 
    @athletes = Athlete.all 
    end 
end 

업데이트 : 나는 ... 나는 성공적를 통해 브라우저를 통해 GET 요청을 실행 (결과 참조) 할 수 http://api.espn.com/v1/sports/football/nfl/athletes/?apikey=my_api_key_from_espn

감사를 언급해야한다. 이것은 StackOverflow에 대한 나의 첫 번째 게시물이므로 내 질문의 접근/형식에 대한 의견에 열려 있습니다.

+0

컨트롤러 작업 관련 코드를 볼 수 있습니까? 'Athlete.all' 메서드에서'response'를 디버깅 했습니까? 당신이 찾고있는 "선수"키가 있습니까? – deefour

+0

안녕하세요 @ Deefour - 응답을 디버깅하는 방법에 대한 몇 가지 기본 지침을 제공 할 수 있습니까? 나는 브라우저를 통해 GET 요청을 성공적으로 실행할 수 있다고 설명해야하고 (예 : 결과 참조) –

+0

메소드에 Rails.logger.debug response.to_s와 같은 것을 넣고 응용 프로그램 로그를 확인하십시오. 또는 [better_errors] (https://github.com/charliesome/better_errors)와 같은 것을 얻고 'GET'요청 후에 예외를 throw합니다. 'better_errors'는 예외가 던져진 응용 프로그램의 현재 상태를 검사하는 데 사용할 수있는 REPL을 제공합니다. 마지막으로, [시도] (https://github.com/pry/pry)를 시도하고'binding.pry' 라인을'GET' 요청 뒤에 올리고 그 방법을 검사 할 수 있습니다. – deefour

답변

0

나는 그것을 얻었고 여기에 나의 개정 된 Athlete.all 구문 구문이있다. 기본적으로 운동 선수 API 응답 배열은 헤드 라인 API보다 약간 더 걸어야합니다. 좋은 측정을 위해

class Athlete 
include HTTParty 
base_uri 'http://api.espn.com/v1/sports' 

    def self.all 
    response = Athlete.get('/football/nfl/athletes', 
     :query => { :apikey => 'my_api_key_from_espn' }) 
    response['sports'].first['leagues'].first['athletes'] 
    end 
end 

, 여기에 내 응용 프로그램/뷰/운동 선수/index.html.erb 구문입니다 : (. @ivanoats 및이에 코스 @deefour의 특별 감사)

<ul id="athletes"> 
    <% @athletes.each do |item| %> 
    <li class="item"><%= link_to item["displayName"], item["links"]["web"]["athletes"]["href"] %></li> 
    <% end %> 
</ul>