He estado usando la gema vainilla OAuth para implementar algunas simples llamadas a la API de Twitter. No necesitaba una gema de peso pesado para hacer todo, y ya estaba usando OAuth, por lo que un enfoque 'roll-your-own' me pareció razonable. Sé que no he mencionado HTTParty, así que por favor no me molestes por eso. Esto puede ser útil para otros por la esencia de Twitter OAuth fácil si ya estás usando la gema OAuth.
En caso de que sea útil, aquí está el código pertinente (lo de mezclar algunas constantes y otras variables/métodos al principio - que era la forma más fácil y más precisa para extraer esto desde mi código real):
#Set up the constants, etc required for Twitter OAuth
OAUTH_SITE = "https://api.twitter.com"
TOKEN_REQUEST_METHOD = :post
AUTHORIZATION_SCHEME = :header
def app_request_token_path
"/oauth/request_token"
end
def app_authorize_path
"/oauth/authorize"
end
def app_access_token_path
"/oauth/access_token"
end
def consumer_key
"your twitter API key"
end
def consumer_secret
"your twitter API secret"
end
# Define the OAuth consumer
def consumer meth=:post
@consumer ||= OAuth::Consumer.new(consumer_key,consumer_secret, {
:site => "#{OAUTH_SITE}",
:request_token_path=>app_request_token_path,
:authorize_path=>app_authorize_path,
:access_token_path=>app_access_token_path,
:http_method=>:post,
:scheme=> :header,
:body_hash => ''
})
end
# Essential parts of a generic OAuth request method
def make_request url, method=:get, headers={}, content=''
if method==:get
res = @access_token.get(url, headers)
elsif method==:post
res = @access_token.post(url, content, headers)
end
if res.code.to_s=='200'
jres = ActiveSupport::JSON.decode(res.body)
if jres.nil?
@last_status_text = @prev_error = "Unexpected error making an OAuth API call - response body is #{res.body}"
end
return jres
else
@last_status_text = @prev_error = res if res.code.to_s!='200'
return nil
end
end
# Demonstrate the daily trends API call
# Note the use of memcache to ensure we don't break the rate-limiter
def daily_trends
url = "http://api.twitter.com/1/trends/daily.json"
@last_status_code = -1
@last_status_success = false
res = Rails.cache.fetch(url, :expires_in=> 5.minutes) do
res = make_request(url, :get)
unless res
@last_status_code = @prev_error.code.to_i
end
res
end
if res
@last_status_code = 200
@last_status_success = true
@last_status_text = ""
end
return res
end
Espero que esto, en gran parte en el contexto de un uso más amplio de la gema OAuth, pueda ser útil para otros.
Usted podría bifurcar la gema de twitter y agregar el método que necesita (ver: http://github.com/jnunemaker/twitter/blob/master/lib/twitter/base.rb). De cualquier manera, la gema de Twitter puede ser un buen lugar para ver cómo se hace esto (ya que usa tanto HTTParty y OAuth) – Brian
En realidad, parece que la gema de Twitter tiene la funcionalidad que está buscando, vea las líneas 33-35 en http://github.com/jnunemaker/twitter/blob/master/lib/twitter/base.rb – Brian
Gracias. No me di cuenta de que antes>. < –