google-spreadsheet-ruby 0.0.9 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +1 -0
- data/lib/google_spreadsheet.rb +81 -32
- metadata +12 -2
data/README.rdoc
CHANGED
@@ -17,6 +17,7 @@ Example:
|
|
17
17
|
require "google_spreadsheet"
|
18
18
|
|
19
19
|
# Logs in.
|
20
|
+
# You can also use OAuth. See document of GoogleSpreadsheet.login_with_oauth for details.
|
20
21
|
session = GoogleSpreadsheet.login("username@gmail.com", "mypassword")
|
21
22
|
|
22
23
|
# First worksheet of http://spreadsheets.google.com/ccc?key=pz7XtlQC-PYx-jrVMJErTcg&hl=en
|
data/lib/google_spreadsheet.rb
CHANGED
@@ -9,6 +9,7 @@ require "cgi"
|
|
9
9
|
require "uri"
|
10
10
|
require "rubygems"
|
11
11
|
require "hpricot"
|
12
|
+
require "oauth"
|
12
13
|
Net::HTTP.version_1_2
|
13
14
|
|
14
15
|
module GoogleSpreadsheet
|
@@ -19,7 +20,29 @@ module GoogleSpreadsheet
|
|
19
20
|
def self.login(mail, password)
|
20
21
|
return Session.login(mail, password)
|
21
22
|
end
|
22
|
-
|
23
|
+
|
24
|
+
# Authenticates with given OAuth token.
|
25
|
+
#
|
26
|
+
# For generating oauth_token, you can proceed as follow:
|
27
|
+
#
|
28
|
+
# 1) First generate OAuth consumer object with key and secret for your site by registering site with google
|
29
|
+
# @consumer = OAuth::Consumer.new( "key","secret", {:site=>"https://agree2"})
|
30
|
+
# 2) Request token with OAuth
|
31
|
+
# @request_token = @consumer.get_request_token
|
32
|
+
# session[:request_token] = @request_token
|
33
|
+
# redirect_to @request_token.authorize_url
|
34
|
+
# 3) Create an oauth access token
|
35
|
+
# @oauth_access_token = @request_token.get_access_token
|
36
|
+
# @access_token = OAuth::AccessToken.new(@consumer, @oauth_access_token.token, @oauth_access_token.secret)
|
37
|
+
#
|
38
|
+
# See these documents for details:
|
39
|
+
#
|
40
|
+
# - http://oauth.rubyforge.org/
|
41
|
+
# - http://code.google.com/apis/accounts/docs/OAuth.html
|
42
|
+
def self.login_with_oauth(oauth_token)
|
43
|
+
return Session.login_with_oauth(oauth_token)
|
44
|
+
end
|
45
|
+
|
23
46
|
# Restores GoogleSpreadsheet::Session from +path+ and returns it.
|
24
47
|
# If +path+ doesn't exist or authentication has failed, prompts mail and password on console,
|
25
48
|
# authenticates with them, stores the session to +path+ and returns it.
|
@@ -111,12 +134,21 @@ module GoogleSpreadsheet
|
|
111
134
|
session.login(mail, password)
|
112
135
|
return session
|
113
136
|
end
|
114
|
-
|
137
|
+
|
138
|
+
# The same as GoogleSpreadsheet.login_with_oauth.
|
139
|
+
def self.login_with_oauth(oauth_token)
|
140
|
+
session = Session.new(nil, oauth_token)
|
141
|
+
end
|
142
|
+
|
115
143
|
# Restores session using return value of auth_tokens method of previous session.
|
116
|
-
def initialize(auth_tokens =
|
117
|
-
|
144
|
+
def initialize(auth_tokens = nil, oauth_token = nil)
|
145
|
+
if oauth_token
|
146
|
+
@oauth_token = oauth_token
|
147
|
+
else
|
148
|
+
@auth_tokens = auth_tokens
|
149
|
+
end
|
118
150
|
end
|
119
|
-
|
151
|
+
|
120
152
|
# Authenticates with given +mail+ and +password+, and updates current session object
|
121
153
|
# if succeeds. Raises GoogleSpreadsheet::AuthenticationError if fails.
|
122
154
|
# Google Apps account is supported.
|
@@ -244,41 +276,58 @@ module GoogleSpreadsheet
|
|
244
276
|
end
|
245
277
|
response_type = params[:response_type] || :xml
|
246
278
|
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
end
|
268
|
-
case response_type
|
269
|
-
when :xml
|
270
|
-
return Hpricot.XML(response.body)
|
271
|
-
when :raw
|
272
|
-
return response.body
|
279
|
+
if @oauth_token
|
280
|
+
|
281
|
+
if method == :delete || method == :get
|
282
|
+
response = @oauth_token.__send__(method, url)
|
283
|
+
else
|
284
|
+
response = @oauth_token.__send__(method, url, data)
|
285
|
+
end
|
286
|
+
return convert_response(response, response_type)
|
287
|
+
|
288
|
+
else
|
289
|
+
|
290
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
291
|
+
http.use_ssl = uri.scheme == "https"
|
292
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
293
|
+
http.start() do
|
294
|
+
while true
|
295
|
+
path = uri.path + (uri.query ? "?#{uri.query}" : "")
|
296
|
+
header = auth_header(auth).merge(add_header)
|
297
|
+
if method == :delete || method == :get
|
298
|
+
response = http.__send__(method, path, header)
|
273
299
|
else
|
274
|
-
|
300
|
+
response = http.__send__(method, path, data, header)
|
301
|
+
end
|
302
|
+
if response.code == "401" && @on_auth_fail && @on_auth_fail.call()
|
303
|
+
next
|
304
|
+
end
|
305
|
+
if !(response.code =~ /^2/)
|
306
|
+
raise(
|
307
|
+
response.code == "401" ? AuthenticationError : GoogleSpreadsheet::Error,
|
308
|
+
"Response code #{response.code} for #{method} #{url}: " +
|
309
|
+
CGI.unescapeHTML(response.body))
|
310
|
+
end
|
311
|
+
return convert_response(response, response_type)
|
275
312
|
end
|
276
313
|
end
|
314
|
+
|
277
315
|
end
|
278
316
|
end
|
279
317
|
|
280
318
|
private
|
281
319
|
|
320
|
+
def convert_response(response, response_type)
|
321
|
+
case response_type
|
322
|
+
when :xml
|
323
|
+
return Hpricot.XML(response.body)
|
324
|
+
when :raw
|
325
|
+
return response.body
|
326
|
+
else
|
327
|
+
raise("unknown params[:response_type]: %s" % response_type)
|
328
|
+
end
|
329
|
+
end
|
330
|
+
|
282
331
|
def authenticate(mail, password, auth)
|
283
332
|
params = {
|
284
333
|
"accountType" => "HOSTED_OR_GOOGLE",
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google-spreadsheet-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hiroshi Ichikawa
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-01-
|
12
|
+
date: 2010-01-17 00:00:00 +09:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -22,6 +22,16 @@ dependencies:
|
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: "0.3"
|
24
24
|
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: oauth
|
27
|
+
type: :development
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.3.6
|
34
|
+
version:
|
25
35
|
description: This is a library to read/write Google Spreadsheet.
|
26
36
|
email:
|
27
37
|
- gimite+github@gmail.com
|