Refresh samples + add new ones for YouTube, Analytics
This commit is contained in:
parent
1715fc9945
commit
fd4ff04266
10
README.md
10
README.md
|
@ -205,6 +205,16 @@ result = translate.list_translations(source: 'en', target: 'es', q: 'Hello world
|
||||||
puts result.translations.first.translated_text
|
puts result.translations.first.translated_text
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Samples
|
||||||
|
|
||||||
|
Samples for versions 0.9 and onward can be found in the `samples` directory.
|
||||||
|
Contributions for additional samples are welcome. See [CONTRIBUTING](CONTRIBUTING.md).
|
||||||
|
|
||||||
|
Samples for previous versions can be found in the
|
||||||
|
[google-api-ruby-client-samples](https://github.com/google/google-api-ruby-client-samples)
|
||||||
|
repository.
|
||||||
|
|
||||||
|
|
||||||
## Generating APIs
|
## Generating APIs
|
||||||
|
|
||||||
For [Cloud Endpoints](https://cloud.google.com/endpoints/) or other APIs not included in the gem, ruby code can be
|
For [Cloud Endpoints](https://cloud.google.com/endpoints/) or other APIs not included in the gem, ruby code can be
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
source 'https://rubygems.org'
|
||||||
|
|
||||||
|
gem 'google-api-client', '~> 0.9.pre4'
|
||||||
|
gem 'thor', '~> 0.19'
|
||||||
|
gem 'os', '~> 0.9'
|
||||||
|
gem 'dotenv'
|
|
@ -0,0 +1,51 @@
|
||||||
|
# API Samples
|
||||||
|
|
||||||
|
This directory contains a small but growing collection of samples for various
|
||||||
|
APIs. Each sample can be run on the command line from the `google-api-samples`
|
||||||
|
script.
|
||||||
|
|
||||||
|
Contributions of new samples are welcome.
|
||||||
|
|
||||||
|
# Setup
|
||||||
|
|
||||||
|
Depending on which particular samples you want to run, different
|
||||||
|
steps may be required. Some samples, like Pub/Sub, require a service account,
|
||||||
|
others like Drive, Calendar, and YouTube require an OAuth Client ID. And in
|
||||||
|
some cases like Translate, only an API key is needed.
|
||||||
|
|
||||||
|
* Create a project at https://console.developers.google.com
|
||||||
|
* Go to the `API Manager` and enable the APIs you'd like to try
|
||||||
|
* Go to `Credentials` and create the appropriate type of credential for the sample
|
||||||
|
* For keys, use 'Server key' as the type
|
||||||
|
* For OAuth Client IDs, use 'Other' as the type
|
||||||
|
* For service accounts, use the 'JSON' key type
|
||||||
|
|
||||||
|
Additional details on how to enable APIs and create credentials can be
|
||||||
|
found in the help guide in the console.
|
||||||
|
|
||||||
|
|
||||||
|
## Example Environment Settings
|
||||||
|
|
||||||
|
For convenience, application credentials can be read from the shell environment
|
||||||
|
or placed in a .env file.
|
||||||
|
|
||||||
|
After setup, your .env file might look something like:
|
||||||
|
|
||||||
|
```
|
||||||
|
GOOGLE_API_KEY=AIzaSyC6GvjvPlEzJpTW2bW2t0MPHXXXXXXXXXX
|
||||||
|
GOOGLE_CLIENT_ID=479164972499-i7j6av7bp2s4on5ltb7pjXXXXXXXXXX.apps.googleusercontent.com
|
||||||
|
GOOGLE_CLIENT_SECRET=JBotCTG5biFWGzXXXXXXXXXX
|
||||||
|
GOOGLE_APPLICATION_CREDENTIALS=~/ruby-samples-cred.json
|
||||||
|
```
|
||||||
|
|
||||||
|
# Running the samples
|
||||||
|
|
||||||
|
To list the available sample modules, run the script:
|
||||||
|
```
|
||||||
|
google-api-samples
|
||||||
|
```
|
||||||
|
|
||||||
|
To get help on a specific set of samples, run:
|
||||||
|
```
|
||||||
|
google-api-samples help <module>
|
||||||
|
```
|
|
@ -1,43 +0,0 @@
|
||||||
# Copyright 2015 Google Inc.
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
|
|
||||||
require 'googleauth'
|
|
||||||
require 'google/apis/calendar_v3'
|
|
||||||
|
|
||||||
Calendar = Google::Apis::CalendarV3
|
|
||||||
|
|
||||||
calendar = Calendar::CalendarService.new
|
|
||||||
calendar.authorization = Google::Auth.get_application_default([Calendar::AUTH_CALENDAR])
|
|
||||||
|
|
||||||
# Create an event, adding any emails listed in the command line as attendees
|
|
||||||
event = Calendar::Event.new(summary: 'A sample event',
|
|
||||||
location: '1600 Amphitheatre Parkway, Mountain View, CA 94045',
|
|
||||||
attendees: ARGV.map { |email| Calendar::EventAttendee.new(email: email) },
|
|
||||||
start: Calendar::EventDateTime.new(date_time: DateTime.parse('2015-12-31T20:00:00')),
|
|
||||||
end: Calendar::EventDateTime.new(date_time: DateTime.parse('2016-01-01T02:00:00')))
|
|
||||||
event = calendar.insert_event('primary', event, send_notifications: true)
|
|
||||||
puts "Created event '#{event.summary}' (#{event.id})"
|
|
||||||
|
|
||||||
# List upcoming events
|
|
||||||
events = calendar.list_events('primary', max_results: 10, single_events: true,
|
|
||||||
order_by: 'startTime', time_min: Time.now.iso8601)
|
|
||||||
puts "Upcoming events:"
|
|
||||||
events.items.each do |event|
|
|
||||||
start = event.start.date || event.start.date_time
|
|
||||||
puts "- #{event.summary} (#{start}) (ID: #{event.id})"
|
|
||||||
end
|
|
||||||
|
|
||||||
# Delete the event we created earlier
|
|
||||||
calendar.delete_event('primary', event.id, send_notifications: true)
|
|
||||||
puts "Event deleted"
|
|
|
@ -1,47 +0,0 @@
|
||||||
# Copyright 2015 Google Inc.
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
|
|
||||||
# Pass all auth variables to .env file
|
|
||||||
# Read more about auth on https://developers.google.com/drive/web/about-auth
|
|
||||||
# For example, in my case I added GOOGLE_APPLICATION_CREDENTIALS=credentials.json
|
|
||||||
|
|
||||||
require 'dotenv'
|
|
||||||
Dotenv.load
|
|
||||||
|
|
||||||
require 'tempfile'
|
|
||||||
require 'googleauth'
|
|
||||||
require 'google/apis/drive_v2'
|
|
||||||
|
|
||||||
Drive = Google::Apis::DriveV2
|
|
||||||
|
|
||||||
drive = Drive::DriveService.new
|
|
||||||
drive.authorization = Google::Auth.get_application_default([Drive::AUTH_DRIVE])
|
|
||||||
|
|
||||||
# Insert a file
|
|
||||||
file = drive.insert_file({title: 'drive.rb'}, upload_source: __FILE__)
|
|
||||||
puts "Created file #{file.title} (#{file.id})"
|
|
||||||
|
|
||||||
# Search for it
|
|
||||||
files = drive.list_files(q: "title = 'drive.rb'")
|
|
||||||
puts "Search results:"
|
|
||||||
files.items.each do |file|
|
|
||||||
puts "- File: #{file.title} (#{file.id})"
|
|
||||||
end
|
|
||||||
|
|
||||||
# Read it back
|
|
||||||
tmp = drive.get_file(file.id, download_dest: Tempfile.new('drive'))
|
|
||||||
|
|
||||||
# Delete it
|
|
||||||
drive.delete_file(file.id)
|
|
||||||
puts "File deleted"
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
|
$:.unshift(File.expand_path("../lib", __FILE__))
|
||||||
|
|
||||||
|
require 'thor'
|
||||||
|
require 'dotenv'
|
||||||
|
|
||||||
|
|
||||||
|
# Small script to allow executing samples from the command line.
|
||||||
|
# Each sample is loaded as a subcommand.
|
||||||
|
#
|
||||||
|
# Example usage:
|
||||||
|
#
|
||||||
|
# google-api-samples drive upload myfile.txt
|
||||||
|
#
|
||||||
|
#
|
||||||
|
class App < Thor
|
||||||
|
|
||||||
|
# Load all the samples and register them as subcommands
|
||||||
|
Dir.glob('./lib/samples/*.rb').each do |file|
|
||||||
|
require file
|
||||||
|
end
|
||||||
|
|
||||||
|
Samples.constants.each do |const|
|
||||||
|
desc const.downcase, "#{const} samples"
|
||||||
|
subcommand const.downcase, Samples.const_get(const)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
Dotenv.load
|
||||||
|
App.start(ARGV)
|
|
@ -0,0 +1,94 @@
|
||||||
|
# Copyright 2016 Google Inc.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
require 'googleauth'
|
||||||
|
require 'googleauth/stores/file_token_store'
|
||||||
|
require 'fileutils'
|
||||||
|
require 'thor'
|
||||||
|
require 'os'
|
||||||
|
|
||||||
|
# Base command line module for samples. Provides authorization support,
|
||||||
|
# either using application default credentials or user authorization
|
||||||
|
# depending on the use case.
|
||||||
|
class BaseCli < Thor
|
||||||
|
include Thor::Actions
|
||||||
|
|
||||||
|
OOB_URI = 'urn:ietf:wg:oauth:2.0:oob'
|
||||||
|
|
||||||
|
class_option :user, :type => :string
|
||||||
|
class_option :api_key, :type => :string
|
||||||
|
|
||||||
|
no_commands do
|
||||||
|
|
||||||
|
# Returns the path to the client_secrets.json file.
|
||||||
|
def client_secrets_path
|
||||||
|
return ENV['GOOGLE_CLIENT_SECRETS'] if ENV.has_key?('GOOGLE_CLIENT_SECRETS')
|
||||||
|
return well_known_path_for('client_secrets.json')
|
||||||
|
end
|
||||||
|
|
||||||
|
# Returns the path to the token store.
|
||||||
|
def token_store_path
|
||||||
|
return ENV['GOOGLE_CREDENTIAL_STORE'] if ENV.has_key?('GOOGLE_CREDENTIAL_STORE')
|
||||||
|
return well_known_path_for('credentials.yaml')
|
||||||
|
end
|
||||||
|
|
||||||
|
# Builds a path to a file in $HOME/.config/google (or %APPDATA%/google,
|
||||||
|
# on Windows)
|
||||||
|
def well_known_path_for(file)
|
||||||
|
if OS.windows?
|
||||||
|
File.join(ENV['APPDATA'], 'google', file)
|
||||||
|
else
|
||||||
|
File.join(ENV['HOME'], '.config', 'google', file)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Returns application credentials for the given scope.
|
||||||
|
def application_credentials_for(scope)
|
||||||
|
Google::Auth.get_application_default(scope)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Returns user credentials for the given scope. Requests authorization
|
||||||
|
# if requrired.
|
||||||
|
def user_credentials_for(scope)
|
||||||
|
FileUtils.mkdir_p(File.dirname(token_store_path))
|
||||||
|
|
||||||
|
if ENV['GOOGLE_CLIENT_ID']
|
||||||
|
client_id = Google::Auth::ClientId.new(ENV['GOOGLE_CLIENT_ID'], ENV['GOOGLE_CLIENT_SECRET'])
|
||||||
|
else
|
||||||
|
client_id = Google::Auth::ClientId.from_file(client_secrets_path)
|
||||||
|
end
|
||||||
|
token_store = Google::Auth::Stores::FileTokenStore.new(:file => token_store_path)
|
||||||
|
authorizer = Google::Auth::UserAuthorizer.new(client_id, scope, token_store)
|
||||||
|
|
||||||
|
user_id = options[:user] || 'default'
|
||||||
|
|
||||||
|
credentials = authorizer.get_credentials(user_id)
|
||||||
|
if credentials.nil?
|
||||||
|
url = authorizer.get_authorization_url(base_url: OOB_URI)
|
||||||
|
say "Open the following URL in your browser and authorize the application."
|
||||||
|
say url
|
||||||
|
code = ask "Enter the authorization code:"
|
||||||
|
credentials = authorizer.get_and_store_credentials_from_code(
|
||||||
|
user_id: user_id, code: code, base_url: OOB_URI)
|
||||||
|
end
|
||||||
|
credentials
|
||||||
|
end
|
||||||
|
|
||||||
|
# Gets the API key of the client
|
||||||
|
def api_key
|
||||||
|
ENV['GOOGLE_API_KEY'] || options[:api_key]
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,62 @@
|
||||||
|
# Copyright 2016 Google Inc.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
require 'google/apis/analytics_v3'
|
||||||
|
require 'base_cli'
|
||||||
|
|
||||||
|
module Samples
|
||||||
|
# Examples for the Google Analytics APIs
|
||||||
|
#
|
||||||
|
# Sample usage session:
|
||||||
|
#
|
||||||
|
# $ ./google-api-samples analytics show_visits 55622900 --start='2015-12-01' --end='2015-12-08'
|
||||||
|
# ga:date ga:sessions ga:users ga:newUsers ga:percentNewSessions ga:sessionDuration ga:avgSessionDuration
|
||||||
|
# 20151201 0 0 0 0.0 0.0 0.0
|
||||||
|
# 20151202 0 0 0 0.0 0.0 0.0
|
||||||
|
# 20151203 1 1 1 100.0 0.0 0.0
|
||||||
|
# 20151204 2 2 1 50.0 616.0 308.0
|
||||||
|
# 20151205 0 0 0 0.0 0.0 0.0
|
||||||
|
# 20151206 1 1 1 100.0 0.0 0.0
|
||||||
|
# 20151207 0 0 0 0.0 0.0 0.0
|
||||||
|
# 20151208 2 2 1 50.0 0.0 0.0
|
||||||
|
#
|
||||||
|
class Analytics < BaseCli
|
||||||
|
Analytics = Google::Apis::AnalyticsV3
|
||||||
|
|
||||||
|
desc 'show_visits PROFILE_ID', 'Show visists for the given analytics profile ID'
|
||||||
|
method_option :start, type: :string, required: true
|
||||||
|
method_option :end, type: :string, required: true
|
||||||
|
def show_visits(profile_id)
|
||||||
|
analytics = Analytics::AnalyticsService.new
|
||||||
|
analytics.authorization = user_credentials_for(Analytics::AUTH_ANALYTICS)
|
||||||
|
|
||||||
|
dimensions = %w(ga:date)
|
||||||
|
metrics = %w(ga:sessions ga:users ga:newUsers ga:percentNewSessions
|
||||||
|
ga:sessionDuration ga:avgSessionDuration)
|
||||||
|
sort = %w(ga:date)
|
||||||
|
result = analytics.get_ga_data("ga:#{profile_id}",
|
||||||
|
options[:start],
|
||||||
|
options[:end],
|
||||||
|
metrics.join(','),
|
||||||
|
dimensions: dimensions.join(','),
|
||||||
|
sort: sort.join(','))
|
||||||
|
|
||||||
|
data = []
|
||||||
|
data.push(result.column_headers.map { |h| h.name })
|
||||||
|
data.push(*result.rows)
|
||||||
|
print_table(data)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,83 @@
|
||||||
|
# Copyright 2016 Google Inc.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
require 'google/apis/calendar_v3'
|
||||||
|
require 'base_cli'
|
||||||
|
|
||||||
|
|
||||||
|
module Samples
|
||||||
|
# Examples for the Google Calendar API
|
||||||
|
#
|
||||||
|
# Sample usage:
|
||||||
|
#
|
||||||
|
# $ ./google-api-samples calendar list --limit 10
|
||||||
|
class Calendar < BaseCli
|
||||||
|
Calendar = Google::Apis::CalendarV3
|
||||||
|
|
||||||
|
desc 'schedule', 'Create an event'
|
||||||
|
method_option :summary, type: :string, required: true
|
||||||
|
method_option :start, type: :string, required: true
|
||||||
|
method_option :end , type: :string, required: true
|
||||||
|
method_option :attendees, type: :array
|
||||||
|
def schedule
|
||||||
|
calendar = Calendar::CalendarService.new
|
||||||
|
calendar.authorization = user_credentials_for(Calendar::AUTH_CALENDAR)
|
||||||
|
|
||||||
|
event = {
|
||||||
|
summary: options[:summary],
|
||||||
|
attendees: Array(options[:attenddes]).map { |email| { email: email } },
|
||||||
|
start: {
|
||||||
|
date_time: DateTime.parse(options[:start])
|
||||||
|
},
|
||||||
|
end: {
|
||||||
|
date_time: DateTime.parse(options[:end])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
event = calendar.insert_event('primary', event, send_notifications: true)
|
||||||
|
say "Created event '#{event.summary}' (#{event.id})"
|
||||||
|
end
|
||||||
|
|
||||||
|
desc 'list', 'List upcoming events'
|
||||||
|
method_option :limit, type: :numeric
|
||||||
|
def list()
|
||||||
|
calendar = Calendar::CalendarService.new
|
||||||
|
calendar.authorization = user_credentials_for(Calendar::AUTH_CALENDAR)
|
||||||
|
|
||||||
|
page_token = nil
|
||||||
|
limit = options[:limit] || 1000
|
||||||
|
now = Time.now.iso8601
|
||||||
|
begin
|
||||||
|
result = calendar.list_events('primary',
|
||||||
|
max_results: [limit, 100].min,
|
||||||
|
single_events: true,
|
||||||
|
order_by: 'startTime',
|
||||||
|
time_min: now,
|
||||||
|
page_token: page_token,
|
||||||
|
fields: 'items(id,summary,start),next_page_token')
|
||||||
|
|
||||||
|
result.items.each do |event|
|
||||||
|
time = event.start.date_time || event.start.date
|
||||||
|
say "#{time}, #{event.summary}"
|
||||||
|
end
|
||||||
|
limit -= result.items.length
|
||||||
|
if result.next_page_token
|
||||||
|
page_token = result.next_page_token
|
||||||
|
else
|
||||||
|
page_token = nil
|
||||||
|
end
|
||||||
|
end while !page_token.nil? && limit > 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,82 @@
|
||||||
|
# Copyright 2016 Google Inc.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
require 'google/apis/drive_v3'
|
||||||
|
require 'base_cli'
|
||||||
|
|
||||||
|
|
||||||
|
module Samples
|
||||||
|
# Examples for the Google Drive API
|
||||||
|
#
|
||||||
|
# Sample usage:
|
||||||
|
#
|
||||||
|
# $ ./google-api-samples drive upload ~/myvideo.mov
|
||||||
|
class Drive < BaseCli
|
||||||
|
Drive = Google::Apis::DriveV3
|
||||||
|
|
||||||
|
desc 'upload FILE', 'Upload a file to Google Drive'
|
||||||
|
method_option :name, type: :string
|
||||||
|
def upload(file)
|
||||||
|
drive = Drive::DriveService.new
|
||||||
|
drive.authorization = user_credentials_for(Drive::AUTH_DRIVE)
|
||||||
|
|
||||||
|
metadata = {
|
||||||
|
name: options[:name] || file
|
||||||
|
}
|
||||||
|
result = drive.create_file(metadata, upload_source: file)
|
||||||
|
say "Upload complete"
|
||||||
|
end
|
||||||
|
|
||||||
|
desc 'download FILE_ID', 'Download a file from Google Drive'
|
||||||
|
method_option :out, type: :string
|
||||||
|
def download(file_id)
|
||||||
|
drive = Drive::DriveService.new
|
||||||
|
drive.authorization = user_credentials_for(Drive::AUTH_DRIVE)
|
||||||
|
|
||||||
|
dest = options[:out] || StringIO.new
|
||||||
|
drive.get_file(file_id, download_dest: dest)
|
||||||
|
|
||||||
|
if dest.is_a?(StringIO)
|
||||||
|
dest.rewind
|
||||||
|
STDOUT.write(dest.read)
|
||||||
|
else
|
||||||
|
say "File downloaded to #{options[:out]}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
desc 'list QUERY', 'Search for files'
|
||||||
|
method_option :limit, type: :numeric
|
||||||
|
def list(query)
|
||||||
|
drive = Drive::DriveService.new
|
||||||
|
drive.authorization = user_credentials_for(Drive::AUTH_DRIVE)
|
||||||
|
|
||||||
|
page_token = nil
|
||||||
|
limit = options[:limit] || 1000
|
||||||
|
begin
|
||||||
|
result = drive.list_files(q: query,
|
||||||
|
page_size: [limit, 100].min,
|
||||||
|
page_token: page_token,
|
||||||
|
fields: 'files(id,name),next_page_token')
|
||||||
|
|
||||||
|
result.files.each { |file| puts "#{file.id}, #{file.name}" }
|
||||||
|
limit -= result.files.length
|
||||||
|
if result.next_page_token
|
||||||
|
page_token = result.next_page_token
|
||||||
|
else
|
||||||
|
page_token = nil
|
||||||
|
end
|
||||||
|
end while !page_token.nil? && limit > 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,114 @@
|
||||||
|
# Copyright 2016 Google Inc.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
require 'google/apis/pubsub_v1'
|
||||||
|
require 'base_cli'
|
||||||
|
|
||||||
|
|
||||||
|
module Samples
|
||||||
|
# Examples for the Google Cloud Pub/Sub API.
|
||||||
|
#
|
||||||
|
# Sample usage session:
|
||||||
|
#
|
||||||
|
# $ ./google-api-samples pubsub create_topic mytopic --project=623040240964
|
||||||
|
# # ./google-api-samples pubsub subscribe mysub --topic=mytopic --project=623040240964
|
||||||
|
# $ ./google-api-samples pubsub publish 'Hello!' --topic=mytopic --project=623040240964
|
||||||
|
# $ ./google-api-samples pubsub pull mysub --project=623040240964
|
||||||
|
# Received: Hello!
|
||||||
|
# $ ./google-api-samples pubsub unsubscribe mysub --project=623040240964
|
||||||
|
# $ ./google-api-samples pubsub delete_topic mytopic --project=623040240964
|
||||||
|
#
|
||||||
|
class PubSub < BaseCli
|
||||||
|
Pubsub = Google::Apis::PubsubV1
|
||||||
|
|
||||||
|
desc 'create_topic TOPIC_NAME', 'Create a topic'
|
||||||
|
method_option :project, type: :string, required: true
|
||||||
|
def create_topic(name)
|
||||||
|
pubsub = Pubsub::PubsubService.new
|
||||||
|
pubsub.authorization = Google::Auth.get_application_default([Pubsub::AUTH_PUBSUB])
|
||||||
|
topic = "projects/#{options[:project]}/topics/#{name}"
|
||||||
|
|
||||||
|
pubsub.create_topic(topic)
|
||||||
|
end
|
||||||
|
|
||||||
|
desc 'delete_topic TOPIC_NAME', 'Delete a topic'
|
||||||
|
method_option :project, type: :string, required: true
|
||||||
|
def delete_topic(name)
|
||||||
|
pubsub = Pubsub::PubsubService.new
|
||||||
|
pubsub.authorization = Google::Auth.get_application_default([Pubsub::AUTH_PUBSUB])
|
||||||
|
|
||||||
|
topic = "projects/#{options[:project]}/topics/#{name}"
|
||||||
|
|
||||||
|
pubsub.delete_topic(topic)
|
||||||
|
end
|
||||||
|
|
||||||
|
desc 'subscribe SUBSCRIPTION_NAME', 'Subscribe to a topic'
|
||||||
|
method_option :project, type: :string, required: true
|
||||||
|
method_option :topic, type: :string, required: true
|
||||||
|
def subscribe(name)
|
||||||
|
pubsub = Pubsub::PubsubService.new
|
||||||
|
pubsub.authorization = Google::Auth.get_application_default([Pubsub::AUTH_PUBSUB])
|
||||||
|
|
||||||
|
topic = "projects/#{options[:project]}/topics/#{options[:topic]}"
|
||||||
|
subscription = "projects/#{options[:project]}/subscriptions/#{name}"
|
||||||
|
pubsub.create_subscription(subscription, Pubsub::Subscription.new(topic: topic))
|
||||||
|
end
|
||||||
|
|
||||||
|
desc 'unsubscribe subscription_name', 'Ububscribe from a topic'
|
||||||
|
method_option :project, type: :string, required: true
|
||||||
|
def unsubscribe(name)
|
||||||
|
pubsub = Pubsub::PubsubService.new
|
||||||
|
pubsub.authorization = Google::Auth.get_application_default([Pubsub::AUTH_PUBSUB])
|
||||||
|
|
||||||
|
subscription = "projects/#{options[:project]}/subscriptions/#{name}"
|
||||||
|
pubsub.delete_subscription(subscription)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
desc 'publish MESSAGE', 'Publish a message to a topic'
|
||||||
|
method_option :project, type: :string, required: true
|
||||||
|
method_option :topic, type: :string, required: true
|
||||||
|
def publish(message)
|
||||||
|
pubsub = Pubsub::PubsubService.new
|
||||||
|
pubsub.authorization = Google::Auth.get_application_default([Pubsub::AUTH_PUBSUB])
|
||||||
|
topic = "projects/#{options[:project]}/topics/#{options[:topic]}"
|
||||||
|
|
||||||
|
request = Pubsub::PublishRequest.new(messages: [])
|
||||||
|
request.messages << Pubsub::Message.new(data: message)
|
||||||
|
|
||||||
|
pubsub.publish_topic(topic, request)
|
||||||
|
end
|
||||||
|
|
||||||
|
desc 'pull SUBSCRIPTION_NAME', 'Pull message(s) from the topic'
|
||||||
|
method_option :project, type: :string, required: true
|
||||||
|
method_option :max, type: :numeric, default: 5
|
||||||
|
def pull(name)
|
||||||
|
pubsub = Pubsub::PubsubService.new
|
||||||
|
pubsub.authorization = Google::Auth.get_application_default([Pubsub::AUTH_PUBSUB])
|
||||||
|
|
||||||
|
subscription = "projects/#{options[:project]}/subscriptions/#{name}"
|
||||||
|
|
||||||
|
# Pull messages
|
||||||
|
response = pubsub.pull_subscription(subscription, Pubsub::PullRequest.new(max_messages: options[:max]))
|
||||||
|
response.received_messages.each do |received_message|
|
||||||
|
data = received_message.message.data
|
||||||
|
puts "Received: #{data}"
|
||||||
|
end
|
||||||
|
|
||||||
|
# Acknowledge receipt
|
||||||
|
ack_ids = response.received_messages.map{ |msg| msg.ack_id }
|
||||||
|
pubsub.acknowledge_subscription(subscription, Pubsub::AcknowledgeRequest.new(ack_ids: ack_ids))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,44 @@
|
||||||
|
# Copyright 2016 Google Inc.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
require 'google/apis/translate_v2'
|
||||||
|
require 'base_cli'
|
||||||
|
|
||||||
|
|
||||||
|
module Samples
|
||||||
|
# Examples for the Google Translate API
|
||||||
|
#
|
||||||
|
# Sample usage:
|
||||||
|
#
|
||||||
|
# $ ./google-api-samples translate 'Hola!' --target='en'
|
||||||
|
# Hello
|
||||||
|
#
|
||||||
|
class Translate < BaseCli
|
||||||
|
Translate = Google::Apis::TranslateV2
|
||||||
|
|
||||||
|
desc 'translate PHRASE', 'Translate a phrase'
|
||||||
|
method_option :source, type: :string
|
||||||
|
method_option :target, type: :string, required: true
|
||||||
|
def translate(phrase)
|
||||||
|
translate = Translate::TranslateService.new
|
||||||
|
translate.key = api_key
|
||||||
|
|
||||||
|
result = translate.list_translations(phrase, options[:target], source: options[:source])
|
||||||
|
puts result.translations.first.translated_text
|
||||||
|
end
|
||||||
|
|
||||||
|
default_task :translate
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,44 @@
|
||||||
|
# Copyright 2016 Google Inc.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
require 'google/apis/youtube_v3'
|
||||||
|
require 'base_cli'
|
||||||
|
|
||||||
|
|
||||||
|
module Samples
|
||||||
|
# Examples for the YouTube APIs
|
||||||
|
#
|
||||||
|
# Sample usage:
|
||||||
|
#
|
||||||
|
# $ ./google-api-samples youtube upload ~/myvideo.mov --title="So funny!"
|
||||||
|
#
|
||||||
|
class YouTube < BaseCli
|
||||||
|
YT = Google::Apis::YoutubeV3
|
||||||
|
|
||||||
|
desc 'upload FILE', 'Upload a video to YouTube'
|
||||||
|
method_option :title, type: :string
|
||||||
|
def upload(file)
|
||||||
|
youtube = YT::YouTubeService.new
|
||||||
|
youtube.authorization = user_credentials_for(YT::AUTH_YOUTUBE)
|
||||||
|
|
||||||
|
metadata = {
|
||||||
|
snippet: {
|
||||||
|
title: options[:title] || file
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result = youtube.insert_video('snippet', metadata, upload_source: file)
|
||||||
|
say "Upload complete"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,51 +0,0 @@
|
||||||
# Copyright 2015 Google Inc.
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
|
|
||||||
require 'googleauth'
|
|
||||||
require 'google/apis/pubsub_v1'
|
|
||||||
|
|
||||||
Pubsub = Google::Apis::PubsubV1
|
|
||||||
|
|
||||||
pubsub = Pubsub::PubsubService.new
|
|
||||||
pubsub.authorization = Google::Auth.get_application_default([Pubsub::AUTH_PUBSUB])
|
|
||||||
|
|
||||||
project = ARGV[0] || 'YOUR_PROJECT_NAME'
|
|
||||||
|
|
||||||
topic = "projects/#{project}/topics/foo"
|
|
||||||
subscription = "projects/#{project}/subscriptions/bar"
|
|
||||||
|
|
||||||
# Create topic & subscription
|
|
||||||
pubsub.create_topic(topic)
|
|
||||||
pubsub.create_subscription(subscription, Pubsub::Subscription.new(topic: topic))
|
|
||||||
|
|
||||||
# Publish messages
|
|
||||||
request = Pubsub::PublishRequest.new(messages: [])
|
|
||||||
request.messages << Pubsub::Message.new(attributes: { "language" => "en" }, data: 'Hello')
|
|
||||||
request.messages << Pubsub::Message.new(attributes: { "language" => "en" }, data: 'World')
|
|
||||||
pubsub.publish_topic(topic, request)
|
|
||||||
|
|
||||||
# Pull messages
|
|
||||||
response = pubsub.pull_subscription(subscription, Pubsub::PullRequest.new(max_messages: 5))
|
|
||||||
response.received_messages.each do |received_message|
|
|
||||||
data = received_message.message.data
|
|
||||||
puts "Received #{data}"
|
|
||||||
end
|
|
||||||
|
|
||||||
# Acknowledge receipt
|
|
||||||
ack_ids = response.received_messages.map{ |msg| msg.ack_id }
|
|
||||||
pubsub.acknowledge_subscription(subscription, Pubsub::AcknowledgeRequest.new(ack_ids: ack_ids))
|
|
||||||
|
|
||||||
# Delete the subscription & topic
|
|
||||||
pubsub.delete_subscription(subscription)
|
|
||||||
pubsub.delete_topic(topic)
|
|
|
@ -1,24 +0,0 @@
|
||||||
# Copyright 2015 Google Inc.
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
|
|
||||||
|
|
||||||
require 'google/apis/translate_v2'
|
|
||||||
|
|
||||||
Translate = Google::Apis::TranslateV2
|
|
||||||
|
|
||||||
translate = Translate::TranslateService.new
|
|
||||||
translate.key = ARGV[0] || 'YOUR_API_KEY'
|
|
||||||
|
|
||||||
result = translate.list_translations(source: 'en', target: 'es', q: 'Hello world!')
|
|
||||||
puts result.translations.first.translated_text
|
|
Loading…
Reference in New Issue