urbanesia 0.0.1.4 → 0.0.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/lib/urbanesia/agent.rb +69 -8
  2. data/lib/urbanesia.rb +3 -3
  3. metadata +1 -1
@@ -13,14 +13,75 @@ module Urbanesia
13
13
  @base_url = base_url || "http://api1.urbanesia.com/"
14
14
  end
15
15
 
16
- def hi(output)
17
- p @base_url
18
- case output
19
- when :key
20
- @consumer_key
21
- else
22
- @consumer_secret
23
- end
16
+ def request( endpoint = "get/super_search", post = "", get = "" )
17
+
18
+ start_time = Time.now # eg Time.parse('2012-12-08 09:00:03 UTC')
19
+ @time = start_time.to_f.to_s # eg 1354975291
20
+ @nonce = self.generate_nonce( @time )
21
+
22
+ post = self.generate_default_post(post)
23
+
24
+ requestify = self.requestify(post + "&" + get)
25
+ oauth_signature = self.generate_oauth_signature(endpoint, requestify)
26
+
27
+ #### Note:
28
+ #### get should have replaced "," with "%2C" but I didn't put it into a separate
29
+ #### string. This is the same process in the self.requestify method.
30
+ #### Check this line first if any errors.
31
+ final_url = base_url + endpoint + oauth_sig + "&" + get
32
+
33
+ agent = Mechanize.new
34
+
35
+ response = agent.post(final_url,
36
+ "oauth_consumer_key" => @consumer_key,
37
+ "oauth_nonce" => @nonce,
38
+ "oauth_signature_method" => "HMAC-SHA1",
39
+ "oauth_timestamp" => @time,
40
+ "oauth_version" => "1.0",
41
+ "safe_encode" => 1
42
+ ).content
43
+
44
+ return response
45
+
46
+ end
47
+
48
+ private
49
+
50
+ # The "nonce" is a string based on a timestamp, eg 946eeff5e43578078c746bb1df62145d
51
+ # The API is limited to one request per nonce.
52
+ def generate_nonce(time = Time.now)
53
+ return Digest::MD5.hexdigest( time )
54
+ end
55
+
56
+ # Combine any user-inputted post variables with the default post variables required for the API call.
57
+ def generate_default_post(post)
58
+ return "oauth_consumer_key=" + @consumer_key + "&oauth_nonce=" + @nonce + "&oauth_signature_method=HMAC-SHA1&oauth_timestamp=" + @time + "&oauth_version=1.0&safe_encode=1&" + post
59
+ end
60
+
61
+ # Encode POST and GET for OAUTH
62
+ # Sort GET + POST into 1 string, sorted by param key
63
+ def requestify(vars)
64
+ arr = vars.split("&").sort!
65
+ requestify = ""
66
+ arr.each do |e|
67
+ requestify << "&" if !e.eql?(arr.first)
68
+ tmp = e.split("=")
69
+ requestify << CGI.escape(tmp[0]).gsub("+", "%20") + "=" + CGI.escape(tmp[1]).gsub("+", "%20")
70
+ end
71
+ return requestify
72
+ end
73
+
74
+ # The Oauth Signature is an encryption of the post/get variables and timestamp
75
+ # The API uses this to check that the API call is valid.
76
+ def generate_oauth_signature(endpoint, requestify)
77
+ base_sig = "POST&" + CGI.escape(@base_url + endpoint).gsub("+", "%20") + "&" + CGI.escape(requestify).gsub("+", "%20")
78
+ digest = OpenSSL::Digest::Digest.new('sha1')
79
+ oauth_sig = OpenSSL::HMAC.digest(digest, @consumer_secret + "&", base_sig )
80
+ oauth_sig = Base64.encode64( oauth_sig ).chomp.gsub(/\n/,'') # eg 2j16OUZpkwcj9oogIIPgIJhOI4Q=
81
+ oauth_sig = oauth_sig.gsub("=", "%3D")
82
+ oauth_sig = oauth_sig.gsub("+", "%2B") # eg OTg2N2I2YWIxZWFhOGNmNGYwNWM1Y2NkMTM1Mzc0YjFlMWE4MjE0Zg%3D%3D
83
+ oauth_sig = "?oauth_signature=" + oauth_sig
84
+ return oauth_sig
24
85
  end
25
86
 
26
87
  end
data/lib/urbanesia.rb CHANGED
@@ -12,11 +12,11 @@ module Urbanesia
12
12
  # @param [String] post Any required post variables, eg "year=2011"
13
13
  # @param [String] get Any required get variables, eg "what=culinary&where=jakarta&row=1&offset=1000"
14
14
  # @return [String] response The output of a Mechanize agent.post to the API endpoint
15
- def request( endpoint = "get/super_search", post = "", get = "" )
15
+ def self.request( endpoint = "get/super_search", post = "", get = "" )
16
16
 
17
- @@agent = Agent.new(@@consumer_key, @@consumer_secret, @@base_url) if @@agent.nil?
17
+ @agent = Agent.new(@@consumer_key, @@consumer_secret, @@base_url) if @agent.nil?
18
18
 
19
- p @@agent.hi
19
+ return @agent.request(endpoint, post, get)
20
20
 
21
21
  end
22
22
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: urbanesia
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.4
4
+ version: 0.0.1.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: