【问题标题】:Troubleshooting ESPN API in RailsRails 中的 ESPN API 故障排除
【发布时间】:2013-06-11 05:57:04
【问题描述】:

在我的 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 请求(并查看结果)...http://api.espn.com/v1/sports/football/nfl/athletes/?apikey=my_api_key_from_espn

谢谢。这是我在 StackOverflow 上的第一篇文章,因此欢迎对我的问题的方法/格式提供反馈。

【问题讨论】:

  • 能看到控制器动作的相关代码吗?你在Athlete.all方法中调试过response吗?它有您要查找的"athletes" 密钥吗?
  • 嗨@Deefour - 你能给我一些关于如何调试响应的基本指示吗?我应该评论说我可以通过浏览器成功运行 GET 请求(并查看结果)...
  • Rails.logger.debug response.to_s 之类的内容放入方法中并检查您的应用程序日志。或者,获取类似better_errors 的内容并在GET 请求之后抛出异常。 better_errors 提供了一个 REPL,您可以使用它来检查引发异常的应用程序的当前状态。最后,您可以尝试pry 并在GET 请求之后放置binding.pry 行并以这种方式进行检查。
  • 谢谢 - 这有帮助。将排除故障并回复。

标签: ruby-on-rails api methods espn


【解决方案1】:

我让它工作了,这是我为 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。)

【讨论】:

    猜你喜欢
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    • 2010-11-30
    • 2021-09-11
    • 2012-02-18
    • 2011-03-07
    • 1970-01-01
    相关资源
    最近更新 更多