google-api-client 0.6.4 → 0.7.0
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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +14 -0
- data/Gemfile +13 -3
- data/README.md +133 -97
- data/Rakefile +1 -1
- data/lib/cacerts.pem +2183 -0
- data/lib/google/api_client/auth/compute_service_account.rb +28 -0
- data/lib/google/api_client/auth/file_storage.rb +87 -0
- data/lib/google/api_client/auth/installed_app.rb +8 -1
- data/lib/google/api_client/auth/jwt_asserter.rb +0 -11
- data/lib/google/api_client/client_secrets.rb +1 -1
- data/lib/google/api_client/discovery/method.rb +1 -0
- data/lib/google/api_client/errors.rb +11 -0
- data/lib/google/api_client/gzip.rb +28 -0
- data/lib/google/api_client/media.rb +80 -5
- data/lib/google/api_client/request.rb +15 -9
- data/lib/google/api_client/service/batch.rb +103 -0
- data/lib/google/api_client/service/request.rb +144 -0
- data/lib/google/api_client/service/resource.rb +40 -0
- data/lib/google/api_client/service/result.rb +162 -0
- data/lib/google/api_client/service/simple_file_store.rb +151 -0
- data/lib/google/api_client/service/stub_generator.rb +59 -0
- data/lib/google/api_client/service.rb +233 -0
- data/lib/google/api_client/service_account.rb +1 -0
- data/lib/google/api_client/version.rb +4 -3
- data/lib/google/api_client.rb +81 -42
- data/spec/google/api_client/batch_spec.rb +4 -4
- data/spec/google/api_client/discovery_spec.rb +60 -102
- data/spec/google/api_client/gzip_spec.rb +86 -0
- data/spec/google/api_client/media_spec.rb +49 -1
- data/spec/google/api_client/request_spec.rb +30 -0
- data/spec/google/api_client/result_spec.rb +3 -4
- data/spec/google/api_client/service_account_spec.rb +21 -0
- data/spec/google/api_client/service_spec.rb +586 -0
- data/spec/google/api_client/simple_file_store_spec.rb +137 -0
- data/spec/google/api_client_spec.rb +101 -3
- data/spec/spec_helper.rb +3 -0
- data/tasks/gem.rake +3 -4
- metadata +95 -50
- data/bin/google-api +0 -391
- /data/{CONTRIB.md → CONTRIBUTING.md} +0 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 25f7fed5190421b20ce39568ea716d2a5a52627e
|
|
4
|
+
data.tar.gz: f511d420725a7e69600d7654090d7794743c8591
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 4a889315a2b6d96b6d56ac808880203c7dbe6c108a214c610440182e784162a93c753367d49d9cc16b22a50a8d2668e507590d45f6665c3227fe31faed8adf88
|
|
7
|
+
data.tar.gz: 49493d0cb5c148bd88962b1eaca02acba2f21bfc04ef115a6e75958f2677a386a6945698f3ea2054b2f3e635be08fc441441aef149f60aa880503809b7618d90
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
# 0.7.0
|
|
2
|
+
* Remove CLI
|
|
3
|
+
* SUpport for automatic retires & backoff. Off by default, enable by setting `retries` on `APIClient`
|
|
4
|
+
* Experimental new interface (see `Google::APIClient::Service`)
|
|
5
|
+
* Fix warnings when using Faraday separately
|
|
6
|
+
* Support Google Compute Engine service accounts
|
|
7
|
+
* Enable gzip compression for responses
|
|
8
|
+
* Upgrade to Faraday 0.9.0. Resolves multiple issues with query parameter encodings.
|
|
9
|
+
* Use bundled root certificates for verifying SSL certificates
|
|
10
|
+
* Rewind media when retrying uploads
|
|
11
|
+
|
|
12
|
+
# 0.6.4
|
|
13
|
+
* Pin signet version to 0.4.x
|
|
14
|
+
|
|
1
15
|
# 0.6.3
|
|
2
16
|
|
|
3
17
|
* Update autoparse to 0.3.3 to fix cases where results aren't correctly parsed.
|
data/Gemfile
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
source
|
|
1
|
+
source 'https://rubygems.org'
|
|
2
2
|
|
|
3
3
|
gemspec
|
|
4
4
|
|
|
5
|
-
gem 'signet', '
|
|
5
|
+
gem 'signet', '>= 0.5.0'
|
|
6
6
|
gem 'addressable', '>= 2.3.2'
|
|
7
7
|
gem 'uuidtools', '>= 2.1.0'
|
|
8
8
|
gem 'autoparse', '>= 0.3.3'
|
|
9
|
-
gem 'faraday', '
|
|
9
|
+
gem 'faraday', '>= 0.9.0'
|
|
10
10
|
gem 'multi_json', '>= 1.0.0'
|
|
11
11
|
gem 'extlib', '>= 0.9.15'
|
|
12
12
|
gem 'jwt', '~> 0.1.5'
|
|
13
|
+
gem 'retriable', '>= 1.4'
|
|
13
14
|
gem 'jruby-openssl', :platforms => :jruby
|
|
14
15
|
|
|
15
16
|
group :development do
|
|
@@ -18,14 +19,23 @@ group :development do
|
|
|
18
19
|
gem 'kramdown'
|
|
19
20
|
end
|
|
20
21
|
|
|
22
|
+
|
|
23
|
+
platforms :rbx do
|
|
24
|
+
gem 'rubysl', '~> 2.0'
|
|
25
|
+
gem 'psych'
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
|
|
21
29
|
group :examples do
|
|
22
30
|
gem 'sinatra'
|
|
23
31
|
end
|
|
24
32
|
|
|
25
33
|
group :test, :development do
|
|
34
|
+
gem 'json', '~> 1.7.7'
|
|
26
35
|
gem 'rake', '>= 0.9.0'
|
|
27
36
|
gem 'rspec', '>= 2.11.0'
|
|
28
37
|
gem 'rcov', '>= 0.9.9', :platform => :mri_18
|
|
29
38
|
end
|
|
30
39
|
|
|
40
|
+
|
|
31
41
|
gem 'idn', :platform => :mri_18
|
data/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Google API Client
|
|
2
2
|
|
|
3
3
|
<dl>
|
|
4
|
-
<dt>Homepage</dt><dd><a href="http://
|
|
4
|
+
<dt>Homepage</dt><dd><a href="http://www.github.com/google/google-api-ruby-client">http://www.github.com/google/google-api-ruby-client</a></dd>
|
|
5
5
|
<dt>Authors</dt><dd>Bob Aman, <a href="mailto:sbazyl@google.com">Steven Bazyl</a></dd>
|
|
6
6
|
<dt>Copyright</dt><dd>Copyright © 2011 Google, Inc.</dd>
|
|
7
7
|
<dt>License</dt><dd>Apache 2.0</dd>
|
|
@@ -17,40 +17,52 @@ APIs.
|
|
|
17
17
|
|
|
18
18
|
## Install
|
|
19
19
|
|
|
20
|
-
Be sure `
|
|
20
|
+
Be sure `https://rubygems.org/` is in your gem sources.
|
|
21
21
|
|
|
22
22
|
For normal client usage, this is sufficient:
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
```bash
|
|
25
|
+
$ gem install google-api-client
|
|
26
|
+
```
|
|
25
27
|
|
|
26
28
|
## Example Usage
|
|
27
29
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
30
|
+
```ruby
|
|
31
|
+
require 'google/api_client'
|
|
32
|
+
require 'google/api_client/client_secrets'
|
|
33
|
+
require 'google/api_client/auth/installed_app'
|
|
34
|
+
|
|
35
|
+
# Initialize the client.
|
|
36
|
+
client = Google::APIClient.new(
|
|
37
|
+
:application_name => 'Example Ruby application',
|
|
38
|
+
:application_version => '1.0.0'
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
# Initialize Google+ API. Note this will make a request to the
|
|
42
|
+
# discovery service every time, so be sure to use serialization
|
|
43
|
+
# in your production code. Check the samples for more details.
|
|
44
|
+
plus = client.discovered_api('plus')
|
|
45
|
+
|
|
46
|
+
# Load client secrets from your client_secrets.json.
|
|
47
|
+
client_secrets = Google::APIClient::ClientSecrets.load
|
|
48
|
+
|
|
49
|
+
# Run installed application flow. Check the samples for a more
|
|
50
|
+
# complete example that saves the credentials between runs.
|
|
51
|
+
flow = Google::APIClient::InstalledAppFlow.new(
|
|
52
|
+
:client_id => client_secrets.client_id,
|
|
53
|
+
:client_secret => client_secrets.client_secret,
|
|
54
|
+
:scope => ['https://www.googleapis.com/auth/plus.me']
|
|
55
|
+
)
|
|
56
|
+
client.authorization = flow.authorize
|
|
57
|
+
|
|
58
|
+
# Make an API call.
|
|
59
|
+
result = client.execute(
|
|
60
|
+
:api_method => plus.activities.list,
|
|
61
|
+
:parameters => {'collection' => 'public', 'userId' => 'me'}
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
puts result.data
|
|
65
|
+
```
|
|
54
66
|
|
|
55
67
|
## API Features
|
|
56
68
|
|
|
@@ -58,36 +70,53 @@ For normal client usage, this is sufficient:
|
|
|
58
70
|
|
|
59
71
|
To take full advantage of the client, load API definitions prior to use. To load an API:
|
|
60
72
|
|
|
61
|
-
|
|
73
|
+
```ruby
|
|
74
|
+
urlshortener = client.discovered_api('urlshortener')
|
|
75
|
+
```
|
|
62
76
|
|
|
63
77
|
Specific versions of the API can be loaded as well:
|
|
64
78
|
|
|
65
|
-
|
|
79
|
+
```ruby
|
|
80
|
+
drive = client.discovered_api('drive', 'v2')
|
|
81
|
+
```
|
|
66
82
|
|
|
67
83
|
Locally cached discovery documents may be used as well. To load an API from a local file:
|
|
68
84
|
|
|
69
|
-
|
|
70
|
-
|
|
85
|
+
```ruby
|
|
86
|
+
doc = File.read('my-api.json')
|
|
87
|
+
my_api = client.register_discovery_document('myapi', 'v1', doc)
|
|
88
|
+
```
|
|
71
89
|
|
|
72
90
|
### Authorization
|
|
73
91
|
|
|
74
|
-
Most interactions with Google APIs require users to authorize applications via OAuth 2.0. The client library uses [Signet](https://github.com/google/signet) to handle most aspects of authorization. For additional details about Google's OAuth support, see [Google Developers](https://developers.google.com/accounts/docs/OAuth2).
|
|
92
|
+
Most interactions with Google APIs require users to authorize applications via OAuth 2.0. The client library uses [Signet](https://github.com/google/signet) to handle most aspects of authorization. For additional details about Google's OAuth support, see [Google Developers](https://developers.google.com/accounts/docs/OAuth2).
|
|
75
93
|
|
|
76
94
|
Credentials can be managed at the connection level, as shown, or supplied on a per-request basis when calling `execute`.
|
|
77
|
-
|
|
95
|
+
|
|
78
96
|
For server-to-server interactions, like those between a web application and Google Cloud Storage, Prediction, or BigQuery APIs, use service accounts.
|
|
79
97
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
98
|
+
```ruby
|
|
99
|
+
key = Google::APIClient::KeyUtils.load_from_pkcs12('client.p12', 'notasecret')
|
|
100
|
+
client.authorization = Signet::OAuth2::Client.new(
|
|
101
|
+
:token_credential_uri => 'https://accounts.google.com/o/oauth2/token',
|
|
102
|
+
:audience => 'https://accounts.google.com/o/oauth2/token',
|
|
103
|
+
:scope => 'https://www.googleapis.com/auth/prediction',
|
|
104
|
+
:issuer => '123456-abcdef@developer.gserviceaccount.com',
|
|
105
|
+
:signing_key => key)
|
|
106
|
+
client.authorization.fetch_access_token!
|
|
107
|
+
client.execute(...)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Service accounts are also used for delegation in Google Apps domains. The target user for impersonation is specified by setting the `:person` parameter to the user's email address
|
|
111
|
+
in the credentials. Detailed instructions on how to enable delegation for your domain can be found at [developers.google.com](https://developers.google.com/drive/delegation).
|
|
112
|
+
|
|
113
|
+
### Automatic Retries & Backoff
|
|
114
|
+
|
|
115
|
+
The API client can automatically retry requests for recoverable errors. To enable retries, set the `client.retries` property to
|
|
116
|
+
the number of additional attempts. To avoid flooding servers, retries invovle a 1 second delay that increases on each subsequent retry.
|
|
117
|
+
|
|
118
|
+
The default value for retries is 0, but will be enabled by default in future releases.
|
|
119
|
+
|
|
91
120
|
### Batching Requests
|
|
92
121
|
|
|
93
122
|
Some Google APIs support batching requests into a single HTTP request. Use `Google::APIClient::BatchRequest`
|
|
@@ -95,82 +124,89 @@ to bundle multiple requests together.
|
|
|
95
124
|
|
|
96
125
|
Example:
|
|
97
126
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
127
|
+
```ruby
|
|
128
|
+
client = Google::APIClient.new
|
|
129
|
+
urlshortener = client.discovered_api('urlshortner')
|
|
130
|
+
|
|
131
|
+
batch = Google::APIClient::BatchRequest.new do |result|
|
|
132
|
+
puts result.data
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
batch.add(:api_method => urlshortener.url.insert,
|
|
136
|
+
:body_object => { 'longUrl' => 'http://example.com/foo' })
|
|
137
|
+
batch.add(:api_method => urlshortener.url.insert,
|
|
138
|
+
:body_object => { 'longUrl' => 'http://example.com/bar' })
|
|
139
|
+
client.execute(batch)
|
|
140
|
+
```
|
|
141
|
+
|
|
111
142
|
Blocks for handling responses can be specified either at the batch level or when adding an individual API call. For example:
|
|
112
143
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
144
|
+
```ruby
|
|
145
|
+
batch.add(:api_method=>urlshortener.url.insert, :body_object => { 'longUrl' => 'http://example.com/bar' }) do |result|
|
|
146
|
+
puts result.data
|
|
147
|
+
end
|
|
148
|
+
```
|
|
116
149
|
|
|
117
150
|
### Media Upload
|
|
118
151
|
|
|
119
152
|
For APIs that support file uploads, use `Google::APIClient::UploadIO` to load the stream. Both multipart and resumable
|
|
120
153
|
uploads can be used. For example, to upload a file to Google Drive using multipart
|
|
121
154
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
media = Google::APIClient::UploadIO.new('mymovie.m4v', 'video/mp4')
|
|
125
|
-
metadata = {
|
|
126
|
-
'title' => 'My movie',
|
|
127
|
-
'description' => 'The best home movie ever made'
|
|
128
|
-
}
|
|
129
|
-
client.execute(:api_method => drive.files.insert,
|
|
130
|
-
:parameters => { 'uploadType' => 'multipart' },
|
|
131
|
-
:body_object => metadata,
|
|
132
|
-
:media => media )
|
|
133
|
-
|
|
134
|
-
To use resumable uploads, change the `uploadType` parameter to `resumable`. To check the status of the upload
|
|
135
|
-
and continue if necessary, check `result.resumable_upload`.
|
|
155
|
+
```ruby
|
|
156
|
+
drive = client.discovered_api('drive', 'v2')
|
|
136
157
|
|
|
137
|
-
|
|
138
|
-
|
|
158
|
+
media = Google::APIClient::UploadIO.new('mymovie.m4v', 'video/mp4')
|
|
159
|
+
metadata = {
|
|
160
|
+
'title' => 'My movie',
|
|
161
|
+
'description' => 'The best home movie ever made'
|
|
162
|
+
}
|
|
163
|
+
client.execute(:api_method => drive.files.insert,
|
|
164
|
+
:parameters => { 'uploadType' => 'multipart' },
|
|
139
165
|
:body_object => metadata,
|
|
140
166
|
:media => media )
|
|
141
|
-
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
To use resumable uploads, change the `uploadType` parameter to `resumable`. To check the status of the upload
|
|
170
|
+
and continue if necessary, check `result.resumable_upload`.
|
|
171
|
+
|
|
172
|
+
```ruby
|
|
173
|
+
client.execute(:api_method => drive.files.insert,
|
|
174
|
+
:parameters => { 'uploadType' => 'resumable' },
|
|
175
|
+
:body_object => metadata,
|
|
176
|
+
:media => media )
|
|
177
|
+
upload = result.resumable_upload
|
|
142
178
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
179
|
+
# Resume if needed
|
|
180
|
+
if upload.resumable?
|
|
181
|
+
client.execute(upload)
|
|
182
|
+
end
|
|
183
|
+
```
|
|
147
184
|
|
|
148
185
|
## Command Line
|
|
149
186
|
|
|
150
187
|
Included with the gem is a command line interface for working with Google APIs.
|
|
151
188
|
|
|
152
|
-
|
|
153
|
-
|
|
189
|
+
```bash
|
|
190
|
+
# Log in
|
|
191
|
+
google-api oauth-2-login --client-id='...' --client-secret='...' --scope="https://www.googleapis.com/auth/plus.me"
|
|
154
192
|
|
|
155
|
-
|
|
156
|
-
|
|
193
|
+
# List the signed-in user's activities
|
|
194
|
+
google-api execute plus.activities.list --api=plus -- userId="me" collection="public"
|
|
157
195
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
196
|
+
# Start an interactive API session
|
|
197
|
+
google-api irb
|
|
198
|
+
>> plus = $client.discovered_api('plus')
|
|
199
|
+
>> $client.execute(plus.activities.list, {'userId' => 'me', 'collection' => 'public'})
|
|
200
|
+
=> # returns a response from the API
|
|
201
|
+
```
|
|
163
202
|
|
|
164
203
|
For more information, use `google-api --help`
|
|
165
204
|
|
|
166
205
|
## Samples
|
|
167
206
|
|
|
168
|
-
See the full list of [samples on
|
|
207
|
+
See the full list of [samples on Github](https://github.com/google/google-api-ruby-client-samples).
|
|
169
208
|
|
|
170
209
|
|
|
171
210
|
## Support
|
|
172
211
|
|
|
173
|
-
Please [report bugs at the project on
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
212
|
+
Please [report bugs at the project on Github](https://github.com/google/google-api-ruby-client/issues). Don't hesitate to [ask questions](http://stackoverflow.com/questions/tagged/google-api-ruby-client) about the client or APIs on [StackOverflow](http://stackoverflow.com).
|
data/Rakefile
CHANGED
|
@@ -11,7 +11,7 @@ PKG_DISPLAY_NAME = 'Google API Client'
|
|
|
11
11
|
PKG_NAME = PKG_DISPLAY_NAME.downcase.gsub(/\s/, '-')
|
|
12
12
|
PKG_VERSION = Google::APIClient::VERSION::STRING
|
|
13
13
|
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
|
14
|
-
PKG_HOMEPAGE = '
|
|
14
|
+
PKG_HOMEPAGE = 'https://github.com/google/google-api-ruby-client'
|
|
15
15
|
|
|
16
16
|
RELEASE_NAME = "REL #{PKG_VERSION}"
|
|
17
17
|
|