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 <dt>Authors</dt><dd>Bob Aman, <a href="mailto:sbazyl@google.com">Steven Bazyl</a></dd>
6 <dt>Copyright</dt><dd>Copyright © 2011 Google, Inc.</dd>
7 <dt>License</dt><dd>Apache 2.0</dd>
10 [![Build Status](https://secure.travis-ci.org/google/google-api-ruby-client.png)](http://travis-ci.org/google/google-api-ruby-client)
11 [![Dependency Status](https://gemnasium.com/google/google-api-ruby-client.png)](https://gemnasium.com/google/google-api-ruby-client)
15 The Google API Ruby Client makes it trivial to discover and access supported
20 This library is in Alpha. We will make an effort to support the library, but we reserve the right to make incompatible changes when necessary.
24 Be sure `https://rubygems.org/` is in your gem sources.
26 For normal client usage, this is sufficient:
29 $ gem install google-api-client
35 require 'google/api_client'
36 require 'google/api_client/client_secrets'
37 require 'google/api_client/auth/installed_app'
39 # Initialize the client.
40 client = Google::APIClient.new(
41 :application_name => 'Example Ruby application',
42 :application_version => '1.0.0'
45 # Initialize Google+ API. Note this will make a request to the
46 # discovery service every time, so be sure to use serialization
47 # in your production code. Check the samples for more details.
48 plus = client.discovered_api('plus')
50 # Load client secrets from your client_secrets.json.
51 client_secrets = Google::APIClient::ClientSecrets.load
53 # Run installed application flow. Check the samples for a more
54 # complete example that saves the credentials between runs.
55 flow = Google::APIClient::InstalledAppFlow.new(
56 :client_id => client_secrets.client_id,
57 :client_secret => client_secrets.client_secret,
58 :scope => ['https://www.googleapis.com/auth/plus.me']
60 client.authorization = flow.authorize
63 result = client.execute(
64 :api_method => plus.activities.list,
65 :parameters => {'collection' => 'public', 'userId' => 'me'}
75 To take full advantage of the client, load API definitions prior to use. To load an API:
78 urlshortener = client.discovered_api('urlshortener')
81 Specific versions of the API can be loaded as well:
84 drive = client.discovered_api('drive', 'v2')
87 Locally cached discovery documents may be used as well. To load an API from a local file:
90 # Output discovery document to JSON
91 File.open('my-api.json', 'w') do |f| f.puts MultiJson.dump(client.discovery_document('myapi', 'v1')) end
93 # Read discovery document and load API
94 doc = File.read('my-api.json')
95 client.register_discovery_document('myapi', 'v1', doc)
96 my_api = client.discovered_api('myapi', 'v1')
101 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).
103 Credentials can be managed at the connection level, as shown, or supplied on a per-request basis when calling `execute`.
105 For server-to-server interactions, like those between a web application and Google Cloud Storage, Prediction, or BigQuery APIs, use service accounts.
107 As of version 0.8.3, service accounts can be configured using
108 [Application Default Credentials][1], which rely on the credentials being
109 available in a well-known location. If the credentials are not present
110 and it's being used on a Compute Engine VM, it will use the VM's default credentials.
113 client.authorization = :google_app_default # in a later version, this will become the default
114 client.authorization.fetch_access_token!
118 This is simpler API to use than in previous versions, although that is still available:
121 key = Google::APIClient::KeyUtils.load_from_pkcs12('client.p12', 'notasecret')
122 client.authorization = Signet::OAuth2::Client.new(
123 :token_credential_uri => 'https://accounts.google.com/o/oauth2/token',
124 :audience => 'https://accounts.google.com/o/oauth2/token',
125 :scope => 'https://www.googleapis.com/auth/prediction',
126 :issuer => '123456-abcdef@developer.gserviceaccount.com',
128 client.authorization.fetch_access_token!
132 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
133 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).
135 ### Automatic Retries & Backoff
137 The API client can automatically retry requests for recoverable errors. To enable retries, set the `client.retries` property to
138 the number of additional attempts. To avoid flooding servers, retries invovle a 1 second delay that increases on each subsequent retry.
139 In the case of authentication token expiry, the API client will attempt to refresh the token and retry the failed operation - this
140 is a specific exception to the retry rules.
142 The default value for retries is 0, but will be enabled by default in future releases.
144 ### Batching Requests
146 Some Google APIs support batching requests into a single HTTP request. Use `Google::APIClient::BatchRequest`
147 to bundle multiple requests together.
152 client = Google::APIClient.new
153 urlshortener = client.discovered_api('urlshortener')
155 batch = Google::APIClient::BatchRequest.new do |result|
159 batch.add(:api_method => urlshortener.url.insert,
160 :body_object => { 'longUrl' => 'http://example.com/foo' })
161 batch.add(:api_method => urlshortener.url.insert,
162 :body_object => { 'longUrl' => 'http://example.com/bar' })
163 client.execute(batch)
166 Blocks for handling responses can be specified either at the batch level or when adding an individual API call. For example:
169 batch.add(:api_method=>urlshortener.url.insert, :body_object => { 'longUrl' => 'http://example.com/bar' }) do |result|
176 For APIs that support file uploads, use `Google::APIClient::UploadIO` to load the stream. Both multipart and resumable
177 uploads can be used. For example, to upload a file to Google Drive using multipart
180 drive = client.discovered_api('drive', 'v2')
182 media = Google::APIClient::UploadIO.new('mymovie.m4v', 'video/mp4')
184 'title' => 'My movie',
185 'description' => 'The best home movie ever made'
187 client.execute(:api_method => drive.files.insert,
188 :parameters => { 'uploadType' => 'multipart' },
189 :body_object => metadata,
193 To use resumable uploads, change the `uploadType` parameter to `resumable`. To check the status of the upload
194 and continue if necessary, check `result.resumable_upload`.
197 client.execute(:api_method => drive.files.insert,
198 :parameters => { 'uploadType' => 'resumable' },
199 :body_object => metadata,
201 upload = result.resumable_upload
205 client.execute(upload)
211 See the full list of [samples on Github](https://github.com/google/google-api-ruby-client-samples).
216 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).
218 [1]: https://developers.google.com/accounts/docs/application-default-credentials