Ruby on rails 在IRB中使用Yahoo Fantasy体育API
我想玩一下Yahoo Fantasy Sports API。我不知道从哪里开始。为了开始在IRB中使用API并开始调用和检索不同的玩家或统计数据,我需要做什么?这是我第一次尝试解决一个没有现成RubyGem的API Yahoo Fantasy体育API: 我已经按照开发指南中详细介绍的步骤设置了开发人员消费者密钥和密钥。但不确定如何处理此信息Ruby on rails 在IRB中使用Yahoo Fantasy体育API,ruby-on-rails,ruby,api,ruby-on-rails-3.1,Ruby On Rails,Ruby,Api,Ruby On Rails 3.1,我想玩一下Yahoo Fantasy Sports API。我不知道从哪里开始。为了开始在IRB中使用API并开始调用和检索不同的玩家或统计数据,我需要做什么?这是我第一次尝试解决一个没有现成RubyGem的API Yahoo Fantasy体育API: 我已经按照开发指南中详细介绍的步骤设置了开发人员消费者密钥和密钥。但不确定如何处理此信息 我正在使用Rails 3.2.2和Ruby 1.9.2开始,我建议您熟悉OAuth,Yahoo Fantasy Sports API使用它进行身份验证。您
我正在使用Rails 3.2.2和Ruby 1.9.2开始,我建议您熟悉OAuth,Yahoo Fantasy Sports API使用它进行身份验证。您还需要知道如何在Ruby中发出HTTP请求。剩下的大部分工作将是阅读API文档和进行实验
如果您正在寻找Ruby库来使用OAuth或进行HTTP请求,或者其他任何您遇到的东西,您可能会发现它们很有用。在过去的几周里,我花了很多时间试图找到一个与Yahoo fantasysports API相结合的站点,直到最近才克服了通过OAuth进行身份验证的障碍,发出有效请求,并无限期刷新访问令牌。以下是您需要采取的步骤,以便能够在IRB中混日子: 宝石材料
- 包括在您的文件中。这还将安装OAuth/OAuth2 ruby gems作为依赖项。这将处理所需的请求/访问令牌,但不能立即完全兼容
- oauth插件需要为您的应用程序设置一个身份验证系统。我强烈推荐它的易用性,以及oauth插件几乎只需很少的设置就可以与它一起工作的事实。我发现,如果在使用oauth插件生成消费者之前,我首先通过Desive生成“用户”,那么将两者连接起来就更容易了。如果你遇到问题,有很多设计指南
- Yahoo版OAuth的一个怪癖是,您需要为用户存储一个“会话句柄”,以便在访问令牌在60分钟后过期时刷新它。我刚刚编辑了现有的OauthConsumerToken迁移,以包括
。我不确定我这样做时MYSQL的问题是什么,但我还必须为oauth创建的t.string:session\u handle
索引指定190的限制。因此,我的完整添加索引是consumer\u令牌
。我还建议在users表中添加一个add\u index:consumer\u令牌,:token,:unique=>true,:length=>190
字符串列,因为这是Yahoo使用的唯一标识符:guid
- 为了容纳oauth不知道的两个额外列(会话句柄和guid),您需要覆盖oauth插件的一些默认行为。如果您只想使用我的版本(),我已经完成了这个项目并进行了必要的更改。我的版本的三个依赖项是ConsumerTokens表中的
列,用户表中的session\u handle
列,并将development.rb中的变量yahoo\u guid
设置为在yahoo下注册应用程序的URL。还请记住,如果您使用我的插件版本,则需要根据您希望包含它的方式指定路径/github urlCB\u URL
- 您需要在
中设置config/initializers/oauth\u consumers.rb
和:key
。我称我的消费者为Yahotoken,所以我的消费者是这样的::secret
OAUTH_CREDENTIALS={ :yahoo => { :key => "the key given to me by yahoo" :secret => "the secret given to me by yahoo" } } load 'oauth/models/consumers/service_loader.rb'
- 您还需要在创建的自定义令牌类中指定全局yahoo设置。同样,我的是YahooToken,因此在
中,我的前几行是:app/models/yahoo_token.rb
class YahooToken < ConsumerToken YAHOO_SETTINGS={ :site=>"http://fantasysports.yahooapis.com/fantasy/v2", :authorize_url =>"https://api.login.yahoo.com/oauth/v2/request_auth", :request_token_url => "https://api.login.yahoo.com/oauth/v2/get_request_token", :access_token_url => "https://api.login.yahoo.com/oauth/v2/get_token", :oauth_version=>"1.0" }
- 现在,您可以加载服务器、创建用户并转到
获取您的令牌。Yahoo拒绝将您重定向回localhost,因此您最终将被重定向到Yahoo返回的http://localhost:3000/oauth_consumers/yahoo
CB_URL/参数。复制参数字符串并转到
。这将成功完成访问令牌的初始检索。不要担心,在本地开发时,您只需要为每个本地用户执行一次。它在生产环境中自动重定向http://localhost:3000/oauth_consumers/yahoo/callback/paste-此处的字符串
- 现在你有了一个代币,你可以在IRB中使用它,在接下来的一个小时里,你想用多少就用多少。以下是从控制台使用令牌的示例:
t = User.first.yahoo resp = t.client.get("http://fantasysports.yahooapis.com/fantasy/v2/users;use_login=1") puts resp.body
- 您还可以将
放在末尾,以json格式而不是xml格式获取它&format=json
- 60分钟后,您需要获得一个新的访问令牌。我的Yahotoken中有一个刷新功能:
def refresh! old_one = self request_token = OAuth::RequestToken.new(YahooToken.consumer, self.token, self.secret) options={} options[:oauth_session_handle]=self.session_handle access_token = request_token.get_access_token options new_one = YahooToken.find_or_create_from_access_token self.user, access_token if new_one old_one.delete return new_one end return nil end
- 每当我的令牌过期时,我就
t=t.refresh代码>。我还建议对您的令牌使用age方法,这将有助于创建一个rake任务,该任务将自动为您每小时刷新令牌
- 此处列出了所有可用的fantasysports相关资源:()
刷新中保存会话句柄代码>而不是分叉
消费者包装
灵感来源于@JamesSwift
迁移
我使用omniauth yahoo进行授权,因此guid保存在授权模型中,您需要在消费者令牌中添加会话句柄(:字符串)和更改令牌(:文本)列
享受。我可以用Omniauth代替Oauth吗?还是必须是Oauth?这两者有什么区别?我的理解是,Omniauth允许多个客户机,而Oauth则在您只需要使用一个客户机时使用。这准确吗?我想我宁愿使用Omniauth,因为有可用的railscasts。可以这样做吗?我应该为/oauth_consumers/ya配置路由文件吗
def refresh!
old_one = self
request_token = OAuth::RequestToken.new(YahooToken.consumer, self.token, self.secret)
options={}
options[:oauth_session_handle]=self.session_handle
access_token = request_token.get_access_token options
new_one = YahooToken.find_or_create_from_access_token self.user, access_token
if new_one
old_one.delete
return new_one
end
return nil
end