gpt4 book ai didi

ruby-on-rails - 在 IRB 中使用 Yahoo Fantasy Sports API

转载 作者:数据小太阳 更新时间:2023-10-29 06:57:37 25 4
gpt4 key购买 nike

我想玩转 Yahoo Fantasy Sports API。我不知道从哪里开始。我需要做什么才能开始在 IRB 中使用 API 并开始调用和检索不同的玩家或统计数据?这是我第一次尝试处理没有现成的 Ruby gem 的 API。

雅虎梦幻体育 API:http://developer.yahoo.com/fantasysports/guide/

我已经按照开发指南中详述的步骤设置了我的开发人员消费者 key 和 secret key 。不知道如何处理这些信息。

我正在使用 Rails 3.2.2 和 Ruby 1.9.2

最佳答案

在过去的几周里,我花了很多时间试图让一个网站与 Yahoo Fantasysports API 联系起来,直到最近才克服了能够通过 OAuth 进行身份验证、发出有效请求和无限期刷新访问 token 的障碍。以下是您需要采取的步骤才能在 IRB 中乱搞:

gem 的东西

  • 包括 oauth-plugin在你的 Gemfile 中。这还将安装 OAuth/OAuth2 ruby​​ gem 作为依赖项。这将处理所需的请求/访问 token ,但不会立即完全兼容。
  • oauth-plugin 需要为您的应用准备好身份验证系统。我强烈推荐 devise无论是因为它的易用性,还是因为 oauth-plugin 几乎可以与它一起使用,而且只需很少的设置。我发现如果我在使用 oauth-plugin 生成使用者之前首先通过设计生成“用户”,则连接两者会更容易。如果您遇到问题,有大量的设计指南。

  • 迁移的东西
  • Yahoo 版本的 OAuth 的一个怪癖是您需要为用户存储一个“session_handle”,以便在 60 分钟后过期时刷新访问 token 。我刚刚编辑了现有的 OauthConsumerToken 迁移以包含 t.string :session_handle .当我这样做时,我不确定 MYSQL 的问题是什么,但我还必须为 consumer_tokens 指定 190 的限制oauth 创建的索引。所以我的完整添加索引是 add_index :consumer_tokens, :token, :unique => true, :length => 190 .我还建议添加 :guid字符串列到 users 表,因为这是雅虎用作唯一标识符的内容。
  • 为了容纳我们正在跟踪的 oauth 不知道的两个额外列( session 句柄和 guid),您需要覆盖一些 oauth-plugin 默认行为。如果您只想使用我的版本( https://github.com/JamesSwift/oauth-plugin ),我已经 fork 了该项目并进行了必要的更改。我的版本的三个依赖项是 session_handle ConsumerTokens 表中的列,一个 yahoo_guid列,并设置变量 CB_URL在您的 development.rb 中成为您在雅虎注册您的应用程序的网址。还请记住,如果您使用我的插件版本,则需要根据您希望如何包含它来指定路径/​​github url。

  • 配置的东西
  • 您需要设置 :key:secretconfig/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'
  • 您还需要在您创建的自定义 token 类中指定全局 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"
    }
  • 告诉你的用户模型它有一个 token :
    has_one :yahoo, :class_name=>"YahooToken", :dependent=>:destroy

  • 实际上在做东西,东西
  • 现在您可以加载您的服务器,创建一个用户,然后转到 http://localhost:3000/oauth_consumers/yahoo获取您的 token 。雅虎拒绝将您重定向回本地主机,因此您最终将被重定向到 CB_URL/parameters-that-yahoo-returns .复制参数字符串并转到http://localhost:3000/oauth_consumers/yahoo/callback/paste-the-string-here .这应该成功完成访问 token 的初始检索。不用担心,在本地开发时,您只需为每个本地用户执行一次此操作。它会在生产环境中自动重定向。
  • 现在你有了一个 token ,你可以在接下来的一个小时内在 IRB 中使用它。以下是从控制台使用 token 的示例:
    t = User.first.yahoo
    resp = t.client.get("http://fantasysports.yahooapis.com/fantasy/v2/users;use_login=1")
    puts resp.body
  • 你也可以把&format=json最后用 json 而不是 xml
  • 60 分钟后,您需要获取新的访问 token 。我的 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
  • 每当我的 token 过期时,我只是 t = t.refresh! .我还建议在您的 token 上使用年龄方法,这将有助于创建一个 rake 任务,该任务将每小时自动为您刷新 token 。
  • 此处列出了所有可用的 Fantasysports 相关资源:( http://developer.yahoo.com/fantasysports/guide/ )
  • 关于ruby-on-rails - 在 IRB 中使用 Yahoo Fantasy Sports API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9795882/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com