Tôi đã sử dụng đá quý vanilla OAuth để thực hiện một vài cuộc gọi API Twitter đơn giản. Tôi không cần một viên đá quý nặng để làm mọi thứ, và tôi đã sử dụng OAuth, vì vậy cách tiếp cận 'cuộn của riêng bạn' có vẻ hợp lý. Tôi biết rằng tôi đã không đề cập đến HTTParty, vì vậy xin vui lòng không ding tôi cho điều đó. Điều này có thể hữu ích cho người khác vì bản chất của Twitter OAuth dễ dàng nếu bạn đã sử dụng đá quý OAuth.
Trong trường hợp nó là hữu ích, đây là mã thích hợp (xin lỗi về pha trộn một số hằng số và các biến khác/phương pháp ngay từ đầu - đó là cách dễ nhất và chính xác nhất để trích xuất này từ mã thật của tôi):
#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
Tôi hy vọng điều này, chủ yếu trong ngữ cảnh sử dụng rộng hơn đá quý OAuth, có thể hữu ích cho người khác.
Bạn có thể ngã ba đá quý twitter và thêm phương pháp bạn cần (xem: http://github.com/jnunemaker/twitter/blob/master/lib/twitter/base.rb). Dù bằng cách nào, đá quý Twitter có thể là một nơi tốt để xem cách thực hiện điều này (vì nó sử dụng cả HTTParty & OAuth) – Brian
Thực ra, Dường như đá quý Twitter có chức năng bạn đang tìm kiếm, xem các dòng 33-35 trong http://github.com/jnunemaker/twitter/blob/master/lib/twitter/base.rb – Brian
Cảm ơn. Không nhận thấy rằng trước đó>. < –