Игра с API Yahoo Fantasy Sports в IRB - PullRequest
7 голосов
/ 21 марта 2012

Я хочу поиграть с Yahoo Fantasy Sports API.Я понятия не имею, с чего начать.Что мне нужно сделать, чтобы начать играть с API в IRB и начать звонить и получать информацию о разных игроках или статистике?Это моя первая попытка использовать API, который не имеет готового к использованию гема Ruby.

Yahoo Fantasy Sports API: http://developer.yahoo.com/fantasysports/guide/

Я выполнил шаги, подробно описанные в руководстве разработчика, и настроил свой ключ разработчика и Секретный ключ.Не уверен, что делать с этой информацией, хотя.

Я использую Rails 3.2.2 и Ruby 1.9.2

Ответы [ 3 ]

11 голосов
/ 30 марта 2012

В последние пару недель я потратил много часов, пытаясь заставить сайт связать себя с API-интерфейсом fantasysports для Yahoo, и лишь недавно преодолел препятствие на пути аутентификации через OAuth, создания действительных запросов и обновления доступа. жетоны до бесконечности. Вот шаги, которые нужно предпринять, чтобы возиться с IRB:

Драгоценные камни

  • Включите oauth-plugin в ваш Gemfile. Это также установит рубиновые гемы OAuth / OAuth2 в качестве зависимостей. Это обработает необходимые токены запроса / доступа, но не будет полностью совместимым сразу после установки.

  • Плагин oauth требует наличия системы аутентификации для вашего приложения. Я бы настоятельно рекомендовал devise как для простоты использования, так и для того факта, что плагин oauth в значительной степени работает вместе с ним при минимальных настройках. Мне было проще соединить их, если я сначала сгенерирую «User» с помощью devise, прежде чем сгенерирую потребителя с помощью oauth-plugin. Если у вас возникнут проблемы, есть множество руководств для разработки.

Миграционные штучки

  • Причуда версии OAuth для Yahoo заключается в том, что вам необходимо сохранить дескриптор сессии для пользователя, чтобы обновить токен доступа, когда он истекает через 60 минут. Я только что отредактировал существующую миграцию OauthConsumerToken, добавив t.string :session_handle. Я не уверен, в чем проблема с MYSQL, когда я это сделал, но мне также пришлось указать ограничение 190 для индекса consumer_tokens, который создал oauth. Таким образом, мой полный индекс добавления составляет add_index :consumer_tokens, :token, :unique => true, :length => 190. Я бы порекомендовал также добавить строковый столбец :guid в таблицу пользователей, поскольку именно это Yahoo использует в качестве уникального идентификатора.

  • Чтобы вместить два дополнительных столбца, о которых мы отслеживаем, о которых oauth не знает (дескриптор сеанса и guid), вам необходимо переопределить некоторые из свойств oauth-plugin по умолчанию. Я уже разработал проект и внес необходимые изменения, если вы хотите просто использовать мою версию (https://github.com/JamesSwift/oauth-plugin). Три зависимости для моей версии - это столбец session_handle в таблице ConsumerTokens, столбец yahoo_guid в таблицу Users и установите переменную CB_URL в вашем development.rb в качестве URL-адреса, под которым вы зарегистрировали свое приложение в 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'
    
  • Вам также необходимо указать глобальные настройки 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"
      }      
    
  • Сообщите вашей модели пользователя, что у нее есть токен:

    has_one :yahoo, :class_name=>"YahooToken", :dependent=>:destroy
    

На самом деле делать вещи, вещи

  • Теперь вы можете загрузить свой сервер, создать пользователя и перейти к http://localhost:3000/oauth_consumers/yahoo, чтобы получить свой токен. 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
    
  • Вы также можете поставить &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
    
  • Когда истекает срок действия моего токена, я просто t = t.refresh!. Я бы также порекомендовал возрастной метод для ваших токенов, который облегчит создание рейка, который будет обновлять токены каждый час для вас автоматически.

  • Все доступные ресурсы, связанные с fantasysports, перечислены здесь: (http://developer.yahoo.com/fantasysports/guide/)

1 голос
/ 25 мая 2012

Я предпочитаю pelle / oauth-plugin сохранить session_handle в refresh! вместо того, чтобы его разветвлять.

потребительская оболочка

модель / YahooToken.rb по мотивам @ JamesSwift.

Миграция

Я авторизируюсь с помощью omniauth-yahoo,поэтому guid сохраните в модели авторизации, и вам нужно добавить session_handle (: string) и изменить столбец token (: text) в consumer_tokens.

наслаждаться.

1 голос
/ 21 марта 2012

Для начала я бы посоветовал вам ознакомиться с OAuth, который Yahoo Fantasy Sports API использует для аутентификации.Вам также нужно знать, как делать HTTP-запросы в Ruby.Большая часть остальной работы будет заключаться в чтении документации API и экспериментировании.

Если вы ищете библиотеки Ruby для использования OAuth или выполнения HTTP-запросов, или чего-либо еще, с чем вы столкнетесь, вы можете найти Ruby Toolbox полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...