1

私の Rails アプリでは、API を介して ESPN の見出しをキャプチャするための実用的な方法があります。しかし、これを複製してすべての NFL プレーヤーをキャプチャしようとすると、この方法は失敗します。

これは、IRB を介して動作しているヘッドライン メソッドです。IRB で Headline.all を実行すると、うまく機能します。

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 リクエストを正常に実行できる (結果を確認できる) ことをコメントする必要があります

ありがとう。これは StackOverflow への私の最初の投稿なので、質問のアプローチ/形式に関するフィードバックをお待ちしています。

4

1 に答える 1

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

参考までに、私の app/views/athletes/index.html.erb 構文は次のとおりです。

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

(@ivanoats ともちろん @deefour に感謝します。)

于 2013-06-11T17:50:25.367 に答える