2012-12-11 20 views
8

Tôi muốn thực hiện yêu cầu oAuth trong Ruby. Tôi đã lấy một số ví dụ nhưng không ai trong số họ sử dụng oauth_token_secret and oauth_token để đưa ra yêu cầu, họ chỉ sử dụng consumer_keyconsumer_secret để nhận oauth_token_secretoauth_token. Nhưng tôi đã có oauth_token_secretoauth_token.Để thực hiện cuộc gọi API có mã thông báo oAuth

Ví dụ, chương trình này tôi đã cố gắng để sử dụng

require 'rubygems' 
require 'oauth' 
consumer = OAuth::Consumer.new(consumer_key, consumer_secret, 
           { 
           :site=> "https://www.google.com", 
           :scheme=> :header, 
           :http_method=> :post, 
           :request_token_path => "/accounts/OAuthGetRequestToken", 
           :access_token_path => "/accounts/OAuthGetAccessToken", 
           :authorize_path=> "/accounts/OAuthAuthorizeToken", 
           :signature_method=>"RSA-SHA1"}, 
           # :private_key_file=>PATH_TO_PRIVATE_KEY 
           ) 

request_token = consumer.get_request_token() 

puts "Visit the following URL, log in if you need to, and authorize the app" 
puts request_token.authorize_url 
puts "When you've authorized that token, enter the verifier code you are assigned:" 

verifier = gets.strip 

puts "Converting request token into access token..." 

access_token=request_token.get_access_token(:oauth_verifier => verifier) 

puts "access_token.token --> #{access_token.token}" # But I initially have it 
puts "access_token.secret --> #{access_token.secret}" # But I initially have it 

Trong trường hợp của tôi, có 4 phím bí mật:

consumer_key = "anonymous" 
consumer_secret = "anonymous" 
oauth_token_secret = "fdsfdsfdfdsfds" 
oauth_token = "fdsfdsfdfdsfdsdsdsdsdsdsds" 

Vì vậy, những gì tôi cần làm là, để thực hiện một yêu cầu API vào một số url nhất định với một số tham số bổ sung và mã thông báo oAuth và để nhận câu trả lời.

Làm cách nào để thực hiện điều đó trong Ruby?

Trả lời

12
#!/usr/bin/env ruby 
require 'rubygems' 
require 'oauth' 
require 'json' 

Bạn cần nhận access_token (OAuth::AccessToken).

# Initialisation based on string values: 
consumer_key = 'AVff2raXvhMUxFnif06g' 
consumer_secret = 'u0zg77R1bQqbzutAusJYmTxqeUpWVt7U2TjWlzbVZkA' 
access_token = 'R1bQqbzYm0zg77tAusJzbVZkAVt7U2T' 
access_token_secret = 'sVbVZkAt7U2TjWlJYmTxqR1bQqbzutAuWzeUpu0zg77' 

@consumer = OAuth::Consumer.new(consumer_key, consumer_secret, {:site=>'http://my.site'}) 
accesstoken = OAuth::AccessToken.new(@consumer, access_token, access_token_secret) 

Một khi bạn có đối tượng OAuth::AccessToken của bạn, bạn cần làm:

json_response = accesstoken.get('/photos.xml') 
# or 
json_response = accesstoken.post(url, params_hash) 

, vv

Câu trả lời là một đối tượng JSON. Để đọc nó, bạn có thể làm:

response = JSON.parse(json_response.body) 
# which is a hash 
# you just access content like 
id = response["id"] 
+0

Tôi không cần dùng OAuth :: AccessToken vì tôi đã có oauth_secret và oauth_token. –

+0

@AlanDert Tôi biết. Sử dụng đối tượng bạn nhận được ở đây: 'access_token = request_token.get_access_token (: oauth_verifier => verifier)' – oldergod

+0

Trình xác minh là gì? Bạn có thể cho ví dụ hoàn chỉnh được không? Hãy nhận biết rằng Typhoeus có lỗi, tôi không thể sử dụng nó. –

Các vấn đề liên quan