Ich habe die Vanille OAuth Edelstein verwendet, um ein paar einfache Twitter API-Aufrufe zu implementieren. Ich brauchte kein schweres Juwel, um alles zu machen, und ich benutzte bereits OAuth, also schien mir ein "Roll-your-own" -Ansatz vernünftig. Ich weiß, dass ich HTTParty nicht erwähnt habe, also bitte mich nicht dafür. Dies kann für andere Nutzer von Vorteil sein, wenn Sie das OAuth-Juwel bereits verwenden.
Falls es hilfreich ist, ist hier der relevante Code (sorry über einige Konstanten und andere Variablen/Methoden am Anfang Mischen - es war die einfachste und genaueste Weg, dies von meinem echten Code zu extrahieren):
#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
Ich hoffe, dass dies, vor allem im Zusammenhang mit der breiteren Verwendung des OAuth-Edelstein, für andere nützlich sein könnte.
Sie könnte das twitter-Juwel abzweigen und die von Ihnen benötigte Methode hinzufügen (siehe: http://github.com/jnunemaker/twitter/blob/master/lib/twitter/base.rb). Wie dem auch sei, das Twitter-Juwel ist ein guter Ort, um zu sehen, wie dies geschieht (da es sowohl HTTParty als auch OAuth verwendet). – Brian
Eigentlich sieht es so aus, als hätte das Twitter-Juwel die gesuchte Funktionalität, siehe Zeilen 33-35 in http://github.com/jnunemaker/twitter/blob/master/lib/twitter/base.rb – Brian
Danke. Habe das vorher nicht bemerkt. < –