Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在IRB中使用Yahoo Fantasy体育API_Ruby On Rails_Ruby_Api_Ruby On Rails 3.1 - Fatal编程技术网

Ruby on rails 在IRB中使用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使用它进行身份验证。您

我想玩一下Yahoo Fantasy Sports API。我不知道从哪里开始。为了开始在IRB中使用API并开始调用和检索不同的玩家或统计数据,我需要做什么?这是我第一次尝试解决一个没有现成RubyGem的API

Yahoo Fantasy体育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迁移,以包括
    t.string:session\u handle
    。我不确定我这样做时MYSQL的问题是什么,但我还必须为oauth创建的
    consumer\u令牌
    索引指定190的限制。因此,我的完整添加索引是
    add\u index:consumer\u令牌,:token,:unique=>true,:length=>190
    。我还建议在users表中添加一个
    :guid
    字符串列,因为这是Yahoo使用的唯一标识符

  • 为了容纳oauth不知道的两个额外列(会话句柄和guid),您需要覆盖oauth插件的一些默认行为。如果您只想使用我的版本(),我已经完成了这个项目并进行了必要的更改。我的版本的三个依赖项是ConsumerTokens表中的
    session\u handle
    列,用户表中的
    yahoo\u guid
    列,并将development.rb中的变量
    CB\u URL
    设置为在yahoo下注册应用程序的URL。还请记住,如果您使用我的插件版本,则需要根据您希望包含它的方式指定路径/github url

配置材料
  • 您需要在
    config/initializers/oauth\u consumers.rb
    中设置
    :key
    :secret
    。我称我的消费者为Yahotoken,所以我的消费者是这样的:

    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"
      }      
    
实际上在做一些事情
  • 现在,您可以加载服务器、创建用户并转到
    http://localhost:3000/oauth_consumers/yahoo
    获取您的令牌。Yahoo拒绝将您重定向回localhost,因此您最终将被重定向到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
    
  • 您还可以将
    &format=json
    放在末尾,以json格式而不是xml格式获取它

  • 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