Как написать на чью-то стену в Facebook или Twitter с помощью Omniauth?

Я знаю, что Omniauth предназначен только для аутентификации, и на самом деле в нем нет инструментов FB или Twitter.

Однако предположим, что мое приложение Rails 3 использует Omniauth, и теперь у меня есть несколько пользователей, зарегистрированных в моей системе.

Как я могу опубликовать сообщение на их стене? Или мне нужна какая-то другая система авторизации?

Спасибо за любые указатели.


person cbmeeks    schedule 07.02.2011    source источник


Ответы (2)


Я нашел эту ссылку, которая позволила мне размещать сообщения как в Facebook, так и в Twitter. Очень хороший учебник:

http://blog.assimov.net/post/2358661274/twitter-integration-with-omniauth-and-devise-on-rails-3

person cbmeeks    schedule 30.03.2011
comment
это ссылки не должны быть разрешены. - person rmagnum2002; 28.03.2014

Я использовал это руководство при настройке приложения для подключения к твиттеру:

http://philsturgeon.co.uk/news/2010/11/using-omniauth-to-make-twitteroauth-api-requests

Помог мне тонну, надеюсь, что это делает для вас то же самое.


Исходное сообщение

Опубликовано: 16 ноября 2010 г.

Используя блестящий драгоценный камень пользовательской системы Devise и драгоценный камень под названием OmniAuth вы можете создать приложение Rails, которое с удивительной легкостью входит или регистрирует пользователей через Twitter, Facebook, Gowalla и т. д. Но как только пользователь войдет в систему, как вы будете фактически взаимодействовать с API от имени только что авторизованной учетной записи?

Эта статья начинается с того места, где заканчивается RailsCasts, поэтому, если вы еще не работаете с Devise и OmniAuth, возможно, вам стоит посмотреть:

Итак, если предположить, что мы все в том месте, где заканчивается третье видео, мы все готовы к работе. Я буду использовать пример Twitter, но на самом деле любой из провайдеров, использующих oAuth, будет использовать тот же подход. Как и в «старые времена», когда мы использовали имя пользователя и пароль Twitter для аутентификации запроса API, теперь мы используем токен доступа и секрет токена. Вы можете думать об этом как о том же самом, что и для аутентификации запросов API, для нас это так.

Чтобы получить токен и секрет, вам нужно добавить несколько полей в таблицу аутентификаций:

rails g migration AddTokenToAuthentications token:string secret:string
rake db:migrate

Теперь база данных готова для сохранения учетных данных, мы можем изменить код аутентификации, чтобы заполнить поля. Предполагая, что вы поместили метод в user.rb, как предложил RailsCast #236, откройте user.rb и измените следующую строку:

authentications.build(:provider => omniauth['provider'], :uid => omniauth['uid'])

и замените его на:

authentications.build(
  :provider => omniauth['provider'],
  :uid => omniauth['uid'],
  :token => omniauth['credentials']['token'],
  :secret => omniauth['credentials']['secret']
)

Теперь всякий раз, когда кто-либо аутентифицирует свою учетную запись, мы можем сохранить его учетные данные, которые передаются обратно из внутренней скрытой магии OmniAuth.

Следующим шагом является выполнение некоторых запросов с использованием этих сохраненных учетных данных, что почти идеально описано в Документация для разработчиков Twitter. Вы захотите установить гем oauth (поместите его в свой Gemfile и запустите установку пакета), затем вы можете использовать следующий код для тестового дампа списка твитов от пользователя:

class TwitterController < ApplicationController

    def recent_tweets
      # Exchange your oauth_token and oauth_token_secret for an AccessToken instance.

      def prepare_access_token(oauth_token, oauth_token_secret)
        consumer = OAuth::Consumer.new("APIKey", "APISecret"
            { :site => "http://api.twitter.com"
            })
        # now create the access token object from passed values
        token_hash = { :oauth_token => oauth_token,
                       :oauth_token_secret => oauth_token_secret
                     }
        access_token = OAuth::AccessToken.from_hash(consumer, token_hash )
        return access_token
      end

      auth = current_user.authentications.find(:first, :conditions => { :provider => 'twitter' })

      # Exchange our oauth_token and oauth_token secret for the AccessToken instance.
      access_token = prepare_access_token(auth['token'], auth['secret'])

      # use the access token as an agent to get the home timeline
      response = access_token.request(:get, "http://api.twitter.com/1/statuses/user_timeline.json")

    render :json => response.body
  end
end

Извлекая содержимое из current_user.authentications (я нахожу первое, поскольку в моем приложении у них должен быть только один), я могу получить учетные данные и иметь полные разрешения, чтобы получать их последние твиты, публиковать новые, просматривать твиты друзей и т. д.

Теперь я могу настроить это, сохранить вещи, возиться с JSON и взять то, что мне нужно. Работа с Facebook или любым другим поставщиком oAuth будет работать почти одинаково, или вы можете установить определенные драгоценные камни для взаимодействия с их API, если прямой подход не так гладок, как вам хотелось бы.

конец исходного сообщения

person omninonsense    schedule 08.02.2011
comment
Хотя пост, упомянутый в @cbmeeks, более сложный, поэтому я рекомендую его. - person omninonsense; 05.12.2012