use*_*232 7 ruby api ruby-on-rails ruby-on-rails-3.1
我想玩Yahoo Fantasy Sports API.我不知道从哪里开始.为了开始在IRB中使用API并开始调用和检索不同的玩家或统计数据,我需要做什么?这是我第一次尝试处理没有现成Ruby gem的API.
Yahoo Fantasy Sports API:http://developer.yahoo.com/fantasysports/guide/
我按照开发指南中详述的步骤进行操作,并设置了我的开发人员用户密钥和密钥.不知道如何处理这些信息.
我正在使用Rails 3.2.2和Ruby 1.9.2
Jam*_*ift 11
过去几周我花了很多时间试图让一个网站与雅虎幻想体验API相结合,并且最近才克服了能够通过OAuth进行身份验证,发出有效请求以及无限期刷新访问令牌的障碍.以下是您需要采取的步骤,以便能够在IRB中乱七八糟:
在Gemfile中包含oauth-plugin.这也将安装OAuth/OAuth2 ruby gems作为依赖项.这将处理所需的请求/访问令牌,但不会完全兼容.
oauth-plugin需要为您的应用设置一个身份验证系统.我强烈建议设计它的易用性和oauth-plugin几乎与它一起工作的事实,只需很少的设置.如果我在使用oauth-plugin生成使用者之前首先通过设计生成'User',我发现连接这两者更容易.如果遇到问题,有大量的设计指南.
雅虎OAuth版本的一个怪癖是,您需要为用户存储"session_handle",以便在60分钟后过期时刷新访问令牌.我刚刚编辑了现有的OauthConsumerToken迁移包含t.string :session_handle.当我这样做时,我不确定MYSQL的问题是什么,但我还必须为consumer_tokensoauth创建的索引指定限制为190 .所以我的完整添加索引是add_index :consumer_tokens, :token, :unique => true, :length => 190.我建议还在:guidusers表中添加一个字符串列,因为这是Yahoo用作唯一标识符的内容.
为了容纳我们正在跟踪oauth不知道的两个额外列(会话句柄和guid),您需要覆盖一些oauth-plugin默认行为.如果您想使用我的版本(https://github.com/JamesSwift/oauth-plugin),我已经分叉了项目并进行了必要的更改.我的版本的三个依赖项是session_handleConsumerTokens表中的一yahoo_guid列,Users表中的一列,并将CB_URLdevelopment.rb中的变量设置为您使用Yahoo注册应用程序的URL.还要记住,如果你使用我的插件版本,你需要指定路径/ github网址,具体取决于你想要包含它的方式.
您需要设置:key和:secret在config/intializers/oauth_consumers.rb.我把我的消费者叫做YahooToken,所以我看起来像这样:
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'
Run Code Online (Sandbox Code Playgroud)您还需要在您创建的自定义标记类中指定全局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"
}
Run Code Online (Sandbox Code Playgroud)告诉您的用户模型它有一个令牌:
has_one :yahoo, :class_name=>"YahooToken", :dependent=>:destroy
Run Code Online (Sandbox Code Playgroud)现在,您可以加载服务器,创建用户,然后转到http://localhost:3000/oauth_consumers/yahoo获取令牌.雅虎拒绝将您重定向回localhost,因此您最终会被重定向到CB_URL/parameters-that-yahoo-returns.复制参数字符串并转到http://localhost:3000/oauth_consumers/yahoo/callback/paste-the-string-here.这应该成功完成访问令牌的初始检索.不用担心,在本地开发时,每个本地用户只需执行一次此操作.它会在生产环境中自动重定向.
现在您已经拥有了一个令牌,您可以在IRB中将其用于下一个小时.以下是从控制台使用令牌的示例:
t = User.first.yahoo
resp = t.client.get("http://fantasysports.yahooapis.com/fantasy/v2/users;use_login=1")
puts resp.body
Run Code Online (Sandbox Code Playgroud)你也可以把&format=json它放在json而不是xml中
60分钟后,您需要获得一个新的访问令牌.我的YahooToken中有刷新功能:
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
Run Code Online (Sandbox Code Playgroud)每当我的令牌到期时,我就是t = t.refresh!.我还建议在你的令牌上使用age方法,这将有助于创建一个rake任务,它会自动为你每小时刷新一次令牌.
所有可用的fantasysports相关资源都列在这里:( http://developer.yahoo.com/fantasysports/guide/)
首先,我建议您熟悉 OAuth,Yahoo Fantasy Sports API 使用 OAuth 进行身份验证。您还需要了解如何在 Ruby 中发出 HTTP 请求。剩下的大部分工作将是阅读 API 文档和进行实验。
如果您正在寻找用于使用 OAuth 或发出 HTTP 请求的 Ruby 库,或者您遇到的任何其他情况,您可能会发现Ruby Toolbox很有帮助。