Instantly share code, notes, and snippets.

Embed
What would you like to do?
Ruby pull user twitter timeline
require 'rubygems'
require 'httparty'
require 'debugger'
require 'erb'
sig_hash1 = {
"oauth_consumer_key" => "cuYaigojU9A7ZWtE4QWog",
"oauth_nonce" => rand(10 ** 30).to_s.rjust(30,'0').to_s,
"oauth_signature_method" => "HMAC-SHA1",
"oauth_timestamp" => Time.now.to_i.to_s,
"oauth_token" => "352432920-GFPIddUT5z8jPRs8vukZccdiG0nKPhy60NuoJtGU",
"oauth_version" => "1.0",
"screen_name" => "AkshayKhole"
}
sig_hash = {}
sig_hash1.each do |k, v|
sig_hash.merge!(ERB::Util.url_encode(k) => ERB::Util.url_encode(v))
end
parameter_string = ""
sig_hash.keys.sort.each do |key|
parameter_string += key
parameter_string += "="
parameter_string += sig_hash[key]
parameter_string += "&"
end
parameter_string.slice!(-1)
sig_string = "GET"
sig_string += "&"
sig_string += ERB::Util.url_encode("https://api.twitter.com/1/statuses/user_timeline.json")
sig_string += ERB::Util.url_encode(parameter_string)
sig_string += "&"
puts "Signature base string----> #{sig_string}"
puts ''
consumer_secret = ERB::Util.url_encode("0XyrTSjnWEGCFA9CfBpWOdp5UpoQ9NkJDhdWWBLH2f4")
token_secret = ERB::Util.url_encode("UFEP4ld0FvCZAJQwjv36e3jbT7DU3gqMV0aWCCn2Q")
signing_key = consumer_secret + "&" + token_secret
final_signature = Base64.encode64(Digest::HMAC.hexdigest(sig_string, signing_key, Digest::SHA1))
puts "final signature--> #{final_signature}"
puts ''
header_string = "Oauth "
header_string_hash = sig_hash
header_string_hash.delete("screen_name") if header_string_hash.key?("screen_name")
header_string_hash.merge!("oauth_signature" => final_signature)
header_string_hash.each do |key, value|
header_string += ERB::Util.url_encode(key)
header_string += "="
header_string += %Q{"}
header_string += ERB::Util.url_encode(value)
header_string += %Q{"}
header_string += ", "
end
header_string.slice!(-1)
header_string.slice!(-1)
puts header_string
res = HTTParty.get("https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name='AkshayKhole'",
:headers => {
"Authorization" => header_string})
puts ''
puts res.inspect
puts ''
puts 'Parsed response ----> '
puts res.parsed_response
# Output on run
# $ ruby fetch_timeline_test.rb
# Signature base string----> GET&https%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fuser_timeline.jsonoauth_consumer_key%3DcuYaigojU9A7ZWtE4QWog%26oauth_nonce%3D406709817327445173332558882613%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1380018315%26oauth_token%3D352432920-GFPIddUT5z8jPRs8vukZccdiG0nKPhy60NuoJtGU%26oauth_version%3D1.0%26screen_name%3DAkshayKhole&
# final signature--> MTlmMjkyMjZmMGQ0NmQyZWU2N2UxMjdiZmY2MzVkNDYyOThkMWQ0Yw==
# Oauth oauth_consumer_key="cuYaigojU9A7ZWtE4QWog", oauth_nonce="406709817327445173332558882613", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1380018315", oauth_token="352432920-GFPIddUT5z8jPRs8vukZccdiG0nKPhy60NuoJtGU", oauth_version="1.0", oauth_signature="MTlmMjkyMjZmMGQ0NmQyZWU2N2UxMjdiZmY2MzVkNDYyOThkMWQ0Yw%3D%3D%0A"
# #<HTTParty::Response:0x7fd393c18f90 parsed_response={"errors"=>[{"message"=>"Could not authenticate you", "code"=>32}]}, @response=#<Net::HTTPUnauthorized 401 Unauthorized readbody=true>, @headers={"content-length"=>["63"], "content-type"=>["application/json; charset=utf-8"], "date"=>["Tue, 24 Sep 2013 10:25:16 UTC"], "server"=>["tfe"], "set-cookie"=>["guest_id=v1%3A138001831645053265; Domain=.twitter.com; Path=/; Expires=Thu, 24-Sep-2015 10:25:16 UTC"], "strict-transport-security"=>["max-age=631138519"], "connection"=>["close"]}>
# Parsed response ---->
# {"errors"=>[{"message"=>"Could not authenticate you", "code"=>32}]}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment