tida_sina_weibo 0.0.8 → 0.0.9

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.
@@ -7,14 +7,12 @@ module TidaSinaWeibo
7
7
 
8
8
  attr_reader :access_token
9
9
  attr_reader :request_data
10
- attr_reader :token_provider
11
10
  attr_reader :rest_client
12
11
 
13
- def initialize(tp, rc = nil)
12
+ def initialize(token, rc = nil)
14
13
  rc = RestClientWrapper.new if rc.nil?
15
14
  @rest_client = rc
16
- @token_provider = tp
17
- @access_token = tp.token
15
+ @access_token = token
18
16
  end
19
17
 
20
18
  def status_update(content)
@@ -90,12 +88,6 @@ module TidaSinaWeibo
90
88
 
91
89
  def rest_request(url, data, method_post)
92
90
  result, code = do_request url, data, method_post
93
-
94
- while code == -1
95
- change_access_token
96
- result, code = do_request url, data, method_post
97
- end
98
-
99
91
  return result
100
92
  end
101
93
 
@@ -105,30 +97,25 @@ module TidaSinaWeibo
105
97
  rd[:params] = data[:params].merge(params)
106
98
 
107
99
  if method_post
108
- r = rest_client.post(url, rd)
109
- return r, 0
100
+ return rest_client.post(url, rd)
110
101
  else
111
- r = rest_client.get(url, rd)
112
- return r, 0
102
+ return rest_client.get(url, rd)
113
103
  end
114
104
  rescue RestClientException => e
115
105
  r = e.body
116
106
  api_error_code = r["error_code"].to_i
117
107
 
118
- if invalid_access_token? api_error_code
119
- return nil, -1
120
- end
121
-
122
- if reached_account_access_limit? api_error_code
123
- return nil, -1
108
+ if invalid_access_token?(api_error_code) || reached_account_access_limit?(api_error_code)
109
+ ex = InvalidAccessTokenException.new self.access_token
110
+ raise ex
124
111
  end
125
112
 
126
113
  if reached_ip_access_limit? api_error_code
127
- e = IPAccessLimitException.new self.access_token
128
- raise e
114
+ ex = IPAccessLimitException.new
115
+ raise ex
129
116
  end
130
117
 
131
- return nil, -2
118
+ raise e
132
119
  end
133
120
 
134
121
  def invalid_access_token?(error_code)
@@ -142,14 +129,5 @@ module TidaSinaWeibo
142
129
  def reached_ip_access_limit?(error_code)
143
130
  return error_code == 10022
144
131
  end
145
-
146
- def change_access_token
147
- self.token_provider.change
148
- @access_token = self.token_provider.token
149
- if @access_token.nil?
150
- e = NoAccessTokenAvaiableException.new
151
- raise e
152
- end
153
- end
154
132
  end
155
133
  end
@@ -0,0 +1,155 @@
1
+ require "rest-client"
2
+ require 'tida_sina_weibo/api_settings'
3
+
4
+ module TidaSinaWeibo
5
+
6
+ class AutoTokenSwitchApiWrapper
7
+
8
+ attr_reader :access_token
9
+ attr_reader :request_data
10
+ attr_reader :token_provider
11
+ attr_reader :rest_client
12
+
13
+ def initialize(tp, rc = nil)
14
+ rc = RestClientWrapper.new if rc.nil?
15
+ @rest_client = rc
16
+ @token_provider = tp
17
+ @access_token = tp.token
18
+ end
19
+
20
+ def status_update(content)
21
+ post_request(ApiSettings.api.status.update, :status => content)
22
+ end
23
+
24
+ def status_upload(content, image_path)
25
+ post_request(ApiSettings.api.status.upload, :status => content, :pic => File.new(image_path, 'rb'))
26
+ end
27
+
28
+ def status_user_timeline(uid, page = 1, count = 100)
29
+ get_request(ApiSettings.api.status.user_timeline, :params => {:uid => uid, :page => page, :count => count})
30
+ end
31
+
32
+ def status_repost_timeline(post_id, page = 1)
33
+ get_request(ApiSettings.api.status.repost_timeline, :params => {:id => post_id, :page => page, :count => 50})
34
+ end
35
+
36
+ def comments_show(post_id, page = 1)
37
+ get_request(ApiSettings.api.comments.show, :params => {:id => post_id, :page => page, :count => 50})
38
+ end
39
+
40
+ def status_show(wb_post_id)
41
+ get_request(ApiSettings.api.status.show, :params => {:id => wb_post_id})
42
+ end
43
+
44
+ def user_show(uid, is_number_id = true)
45
+ if is_number_id
46
+ get_request(ApiSettings.api.user.show, {:params => {:uid => uid}})
47
+ else
48
+ get_request(ApiSettings.api.user.show, {:params => {:screen_name => uid}})
49
+ end
50
+ end
51
+
52
+ def user_domain_show(domain)
53
+ get_request(ApiSettings.api.user.domain_show, :params => {:domain => domain})
54
+ end
55
+
56
+ def friendships_followers(uid, cursor)
57
+ get_request(ApiSettings.api.friendships.followers, :params => {:uid => uid, :cursor => cursor})
58
+ end
59
+
60
+ def friendships_followers_ids(uid, cursor)
61
+ get_request(ApiSettings.api.friendships.followers_ids, :params => {:uid => uid, :cursor => cursor})
62
+ end
63
+
64
+ def tags(uid)
65
+ get_request(ApiSettings.api.tags, :params => {:uid => uid})
66
+ end
67
+
68
+ def queryid(mid)
69
+ get_request(ApiSettings.api.status.queryid, {:params => {:mid => mid, :type => 1, :isBase62 => 1}})
70
+ end
71
+
72
+ def querymid(id, batch = false)
73
+ get_request(ApiSettings.api.status.querymid, {:params => {:id => id, :type => 1, :is_batch => batch ? 1 : 0}})
74
+ end
75
+
76
+ def querymids(ids)
77
+ ids_str = ids.join(',')
78
+ querymid(ids_str, true)
79
+ end
80
+
81
+ private
82
+
83
+ def post_request(url, data)
84
+ rest_request(url, data, true)
85
+ end
86
+
87
+ def get_request(url, data)
88
+ rest_request(url, data, false)
89
+ end
90
+
91
+ def rest_request(url, data, method_post)
92
+ result, code = do_request url, data, method_post
93
+
94
+ while code == -1
95
+ change_access_token
96
+ result, code = do_request url, data, method_post
97
+ end
98
+
99
+ return result
100
+ end
101
+
102
+ def do_request(url, data, method_post)
103
+ rd = data.clone
104
+ params = {:access_token => @access_token}
105
+ rd[:params] = data[:params].merge(params)
106
+
107
+ if method_post
108
+ r = rest_client.post(url, rd)
109
+ return r, 0
110
+ else
111
+ r = rest_client.get(url, rd)
112
+ return r, 0
113
+ end
114
+ rescue RestClientException => e
115
+ r = e.body
116
+ api_error_code = r["error_code"].to_i
117
+
118
+ if invalid_access_token? api_error_code
119
+ return nil, -1
120
+ end
121
+
122
+ if reached_account_access_limit? api_error_code
123
+ return nil, -1
124
+ end
125
+
126
+ if reached_ip_access_limit? api_error_code
127
+ e = IPAccessLimitException.new self.access_token
128
+ raise e
129
+ end
130
+
131
+ return nil, -2
132
+ end
133
+
134
+ def invalid_access_token?(error_code)
135
+ return error_code == 21332 || error_code == 21327
136
+ end
137
+
138
+ def reached_account_access_limit?(error_code)
139
+ return error_code == 10023 || error_code == 10024
140
+ end
141
+
142
+ def reached_ip_access_limit?(error_code)
143
+ return error_code == 10022
144
+ end
145
+
146
+ def change_access_token
147
+ self.token_provider.change
148
+ @access_token = self.token_provider.token
149
+ if @access_token.nil?
150
+ e = NoAccessTokenAvaiableException.new
151
+ raise e
152
+ end
153
+ end
154
+ end
155
+ end
@@ -25,8 +25,14 @@ module TidaSinaWeibo
25
25
  end
26
26
 
27
27
  class IPAccessLimitException < Exception
28
+ def initialize
29
+ super "IP access limit reached"
30
+ end
31
+ end
32
+
33
+ class InvalidAccessTokenException < Exception
28
34
  def initialize(token)
29
- super "The access token #{token} reached IP access limit"
35
+ super "The access token #{token} is not valid"
30
36
  end
31
37
  end
32
38
 
@@ -1,3 +1,3 @@
1
1
  module TidaSinaWeibo
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tida_sina_weibo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-09 00:00:00.000000000 Z
12
+ date: 2013-01-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -80,6 +80,7 @@ files:
80
80
  - lib/tida_sina_weibo.rb
81
81
  - lib/tida_sina_weibo/api_settings.rb
82
82
  - lib/tida_sina_weibo/api_wrapper.rb
83
+ - lib/tida_sina_weibo/auto_token_switch_api_wrapper.rb
83
84
  - lib/tida_sina_weibo/exceptions.rb
84
85
  - lib/tida_sina_weibo/rest_client_wrapper.rb
85
86
  - lib/tida_sina_weibo/version.rb