weibo_oauth2 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,31 @@
1
+ class SaeClient2
2
+ attr_reader :oauth
3
+
4
+ def initialize(key, secret, access_token, refresh_token)
5
+ @oauth = SaeOauth2.new(key, secret, access_token, refresh_token)
6
+ end
7
+
8
+ def upload(status, pic_path, lat = nil, long = nil)
9
+ self.oauth.post('https://api.t.sina.com.cn/statuses/upload.json', {:status => status, :pic => File.new(File.expand_path(pic_path))})
10
+ end
11
+
12
+ def followers(cursor = -1, count = 200)
13
+ self.oauth.get("https://api.t.sina.com.cn/statuses/followers.json", {:cursor => cursor, :count => count})
14
+ end
15
+
16
+ def friends(cursor = -1, count = 200)
17
+ self.oauth.get("https://api.t.sina.com.cn/statuses/friends.json", {:cursor => cursor, :count => count})
18
+ end
19
+
20
+ def update(status)
21
+ self.oauth.post("https://api.t.sina.com.cn/statuses/update.json", {:status => status})
22
+ end
23
+
24
+ def create_friendship(id)
25
+ self.oauth.post("https://api.t.sina.com.cn/friendships/create.json", {:id => id})
26
+ end
27
+
28
+ def users_show(id)
29
+ self.oauth.get("https://api.t.sina.com.cn/users/show/#{id}.json")
30
+ end
31
+ end
data/lib/sae_oauth2.rb ADDED
@@ -0,0 +1,64 @@
1
+ require "base64"
2
+
3
+ class OpenSina
4
+ include HTTMultiParty
5
+ base_uri "https://api.t.sina.com.cn/"
6
+ headers "User-Agent" => "Sae OAuth2 v0.1"
7
+ end
8
+
9
+ class SaeOauth2
10
+ attr_accessor :client_id, :client_secret, :access_token, :refresh_token
11
+ attr_reader :access_token_url, :authorize_url
12
+
13
+ def initialize(client_id, client_secret, access_token = nil, refresh_token = nil)
14
+ @access_token_url = "https://api.t.sina.com.cn/oauth2/access_token"
15
+ @authorize_url = "https://api.t.sina.com.cn/oauth2/authorize"
16
+
17
+ @client_id = client_id
18
+ @client_secret = client_secret
19
+ @access_token = access_token
20
+ @refresh_token = refresh_token
21
+ end
22
+
23
+ ######################################################
24
+ #
25
+ # @param string $signed_request 应用框架在加载iframe时会通过向Canvas URL post的参数signed_request
26
+ #
27
+ #####################################################
28
+ def parse_signed_request(signed_request)
29
+ encoded_sig, payload = signed_request.split(".")
30
+ sig = base64_url_decode(encoded_sig)
31
+ data = Yajl::Parser.parse(base64_url_decode(payload))
32
+ return nil if data["algorithm"].upcase != "HMAC-SHA256"
33
+
34
+ expected_sig = OpenSSL::HMAC.digest("sha256", self.client_secret, payload)
35
+ (sig != expected_sig) ? nil : data
36
+ end
37
+
38
+ def get(url, parameters = {})
39
+ response = self.oauth_request(url, 'GET', parameters)
40
+ Yajl::Parser.parse(response)
41
+ end
42
+
43
+ def post(url, parameters = {})
44
+ response = self.oauth_request(url, 'POST', parameters)
45
+ Yajl::Parser.parse(response)
46
+ end
47
+
48
+ def oauth_request(url, method, parameters)
49
+ url = "#{@host}#{url}.json" unless url.starts_with?("https://")
50
+ case method
51
+ when 'GET'
52
+ OpenSina.get(url, :query => parameters, :headers => {"Authorization" => "OAuth2 #{@access_token}"}).body
53
+ when 'POST'
54
+ OpenSina.post(url, :query => parameters, :headers => {"Authorization" => "OAuth2 #{@access_token}"}).body
55
+ end
56
+ end
57
+
58
+ private
59
+ def base64_url_decode str
60
+ encoded_str = str.gsub('-','+').gsub('_','/')
61
+ encoded_str += '=' while !(encoded_str.size % 4).zero?
62
+ Base64.decode64(encoded_str)
63
+ end
64
+ end
@@ -0,0 +1,2 @@
1
+ require "sae_oauth2"
2
+ require "sae_client2"
metadata ADDED
@@ -0,0 +1,70 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: weibo_oauth2
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Li Guang
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-11-08 00:00:00 Z
19
+ dependencies: []
20
+
21
+ description: !binary |
22
+ 5paw5rWq5b6u5Y2a56uZ5YaF5bqU55Sob2F1dGjlrqLmiLfnq68u
23
+
24
+ email:
25
+ - lg2046@gmail.com
26
+ executables: []
27
+
28
+ extensions: []
29
+
30
+ extra_rdoc_files: []
31
+
32
+ files:
33
+ - lib/weibo_oauth2.rb
34
+ - lib/sae_client2.rb
35
+ - lib/sae_oauth2.rb
36
+ homepage: http://open.weibo.com/
37
+ licenses: []
38
+
39
+ post_install_message:
40
+ rdoc_options: []
41
+
42
+ require_paths:
43
+ - lib
44
+ required_ruby_version: !ruby/object:Gem::Requirement
45
+ none: false
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ hash: 3
50
+ segments:
51
+ - 0
52
+ version: "0"
53
+ required_rubygems_version: !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ hash: 3
59
+ segments:
60
+ - 0
61
+ version: "0"
62
+ requirements: []
63
+
64
+ rubyforge_project:
65
+ rubygems_version: 1.8.11
66
+ signing_key:
67
+ specification_version: 3
68
+ summary: Sina Weibo OAuth 2
69
+ test_files: []
70
+