Твиттер не работает из контроллера в Rails - PullRequest
1 голос
/ 01 сентября 2011

Я использовал драгоценный камень Twitter в своем последнем приложении Rails, и до сих пор у меня не было проблем.Я зарегистрировал приложение, установил токены API в config/initializers/twitter.rb и проверил, что оно работает в специальном тесте рейка, который требует гем.Проблема, однако, в том, что когда я пытаюсь отправить твит из контроллера, ничего не происходит.Мой инициализатор выглядит так:

require 'twitter'

Twitter.configure do |config|
  config.consumer_key = '###'
  config.consumer_secret = '###'
  config.oauth_token = '###'
  config.oauth_token_secret = '###'
end

### правильно заполнены в моем приложении, очевидно.В моем файле rake мне нужен гем в верхней части файла, и я могу отправить тестовый твит с Twitter.update(tweet), однако тот же синтаксис не работает с моими контроллерами.здесь делаешь неправильно?Нужно ли повторно инициализировать драгоценный камень из контроллера?

Ответы [ 2 ]

2 голосов
/ 01 сентября 2011

После некоторой обработки это простое решение:

@twitter = Twitter::Client.new
@twitter.update(tweet)

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

1 голос
/ 01 сентября 2011

Я также использую драгоценный камень Twitter, и я использую контроллер авторизации для своей клятвы, контроллер прямых сообщений для DM Twitter и ajax на передней панели. AppConfig - это просто файл yml, в котором есть мои кредиты.

authorizations_controller.rb

class AuthorizationsController < ApplicationController
  def new
    set_oauth
    render :update do |page|
      page.redirect_to @oauth.request_token.authorize_url
    end
  end

  def show
    @oauth ||= Twitter::OAuth.new(AppConfig['consumer']['token'], AppConfig['consumer']['secret'])
    @oauth.authorize_from_request(session['rtoken'], session['rsecret'], params[:oauth_verifier])

    session['rtoken'] = nil
    session['rsecret'] = nil
    session['atoken'] = @oauth.access_token.token
    session['asecret'] = @oauth.access_token.secret
    redirect_path = session['admin'] ? admin_tweets_path : root_path
    redirect_to redirect_path
  end
end

direct_messages_controller.rb

class DirectMessagesController < ApplicationController
  before_filter :authorize

  def create
    @client.update("@#{AppConfig['user']} #{params[:tweet][:text]}")

    render :update do |page|
      page.replace_html 'tweet_update', "Your tweet has been sent to #{AppConfig['user']} and should be updated momentarily."
    end
  end
end

view.html.haml

#tweet_update
  - form_remote_tag :url => direct_messages_url, :method => :post, :loading => "$('tweet_update').hide();$('loading').show()", :complete => "$('tweet_update').show();$('loading').hide()" do
    %div{:class => "subheader float_left"}Tweet to Whoever
    - if session_set?
      %input{:type => "image", :src=>"/images/sendButton.jpg", :class =>"float_right", :style=>"margin-bottom: 4px"}
    - else
      %div{:class => "float_right", :id => "twitter_login_button"}= link_to_remote image_tag('twitter-darker.png'), :url => new_authorization_url, :method => :get
    .float_clear
    #tweetbox_bg
      - textarea_options = {:id => "tweetbox", :style => "overflow: auto", :rows => "", :cols => ""}
      - textarea_value = nil
      - unless session_set?
        - textarea_options.merge!(:disabled => "disabled")
        - textarea_value = "Please login to tweet Whoever!"

      = text_area_tag 'tweet[text]', textarea_value, textarea_options

Мой фильтр "authorize" перед проверкой просто проверяет сессию:

def authorize
  session_set? ? set_client : redirect_to(new_authorization_url)
end

Надеюсь, это поможет.

...