NAME

WebService::Google::Client - Server-side client library for any Google App API. Based on Moose

VERSION

version 0.06

SYNOPSIS

use WebService::Google::Client;

my $gapi = WebService::Google::Client->new(log_level => 'debug');
# my $gapi = WebService::Google::Client->new(access_token => '');
my $user = 'resource_owner@gmail.com'; # full gmail

$gapi->auth_storage->setup({type => 'jsonfile', path => '/path' }); # by default
# $gapi->auth_storage->setup({ type => 'dbi', path => 'DBI object' });  # NOT IMPLEMENTED YET
# $gapi->auth_storage->setup({ type => 'mongodb', path => 'details' }); # NOT IMPLEMENTED YET

$gapi->user($user);
$gapi->do_autorefresh(1);

my $r1 = $gapi->Calendar->Events->list({ calendarId => 'primary' })->json;
warn scalar @{$r1->{items}};

To create authorization file with tokens in current folder run goauth CLI tool

See unit test in xt folder for more examples

DESCRIPTION

This module, still undergoing heavy development, provides an OAuth 2.0 server-side web application flow to all of the Google API services.

GETTING STARTED

To develop with this module, you must have a user account with Google as well as a developer account both of which can be obtained from Google after acceoptance of their terms and conditions. Consult Google for more information on establishing these accounts.

Next, you will need to register a project with Google using the Google Developer Console and create OAuth2 cient ID credentials for the project. This is accomplished by first setting up a "consent screen." The consent screen is what allows a resource owner (which will be just you, the developer, at first) to give your Google project authorization to access their data using Google's API calls. This consent screen does not have to be verified since it is not public. Simply supply an "Application name" and hit "Save." Once done, finish the process by creating an "Other" application type. Finally, you will need to enable the various APIs and services you want your module to access on behalf of the resource owners. Consult Google's documentation for more detailed information on configuring your project and its APIS.

Once your project is set up with the OAuth 2.0 credentials and has APIs enabled, you now need to ask the resource owner (in this case you) for permission to access their data. This is done by using the goauth utility in the bin directory of this module. Before using it, you need to manually configure the scopes you will ask permission from the user to access. Unfortunately, these scopes are hard coded into this module at the bottom of the WebService/Google/Client/Server.pm module in the __DATA__. This will be improved in the near future. Add your scopes to the scope key. The scope is a URL and are listed here.

Once the scopes are added, execute the bin/goauth script. It will prompt you for the client_id and client_secret both which are available through the Google console. Once entered, point your browser to 127.0.0.1:3001 and click on the "Click here to get Mojo tokens" link. Next log in and/or approve the request to access your data for the scopes listed. Once the process is complete, a config.json file will be generated for you in your directory. This JSON file contains the tokens used by this module to make API requests on behalf of you, the resource owner.

Once you have verified you have everything working, you can set to work setting up a public facing consent screen so WebService::Google::Client can get scope authorization from other resource owners and begin making API requests on their behalf.

KEY FEATURES

Object-oriented calls by API->Resource->method schema. Like $gapi->Calendar->Events->lists
Classes are generated dynamically using Moose::Meta::Class based on Google API Discovery Service
Different app credentials (client_id, client_secret, users access_token && refresh_token) storage - json file, DBI, MongoDB (u can add your own even)
Automatic access_token refresh (if user has refresh_token) and saving refreshed token to storage
CLI tool (goauth) with lightweight server for easy OAuth2 authorization and getting access_ and refresh_ tokens

SUPPORTED APIs

SERVICE                     VERSIONS                                   DOCUMENTATION
abusiveexperiencereport     v1                                         https://developers.google.com/abusive-experience-report/
acceleratedmobilepageurl    v1                                         https://developers.google.com/amp/cache/
adexchangebuyer             v1.2, v1.3, v1.4                           https://developers.google.com/ad-exchange/buyer-rest
adexchangebuyer2            v2beta1                                    https://developers.google.com/ad-exchange/buyer-rest/reference/rest/
adexperiencereport          v1                                         https://developers.google.com/ad-experience-report/
admin                       datatransfer_v1, directory_v1, reports_v1  https://developers.google.com/admin-sdk/data-transfer/, https://developers.google.com/admin-sdk/directory/, https://developers.google.com/admin-sdk/reports/
adsense                     v1.4                                       https://developers.google.com/adsense/management/
adsensehost                 v4.1                                       https://developers.google.com/adsense/host/
analytics                   v2.4, v3                                   https://developers.google.com/analytics/
analyticsreporting          v4                                         https://developers.google.com/analytics/devguides/reporting/core/v4/
androiddeviceprovisioning   v1                                         https://developers.google.com/zero-touch/
androidenterprise           v1                                         https://developers.google.com/android/work/play/emm-api
androidmanagement           v1                                         https://developers.google.com/android/management
androidpublisher            v1, v1.1, v2, v3                           https://developers.google.com/android-publisher
appengine                   v1alpha, v1beta, v1, v1beta4, v1beta5      https://cloud.google.com/appengine/docs/admin-api/
appsactivity                v1                                         https://developers.google.com/google-apps/activity/
appstate                    v1                                         https://developers.google.com/games/services/web/api/states
bigquery                    v2                                         https://cloud.google.com/bigquery/
bigquerydatatransfer        v1                                         https://cloud.google.com/bigquery/
binaryauthorization         v1beta1                                    https://cloud.google.com/binary-authorization/
blogger                     v2, v3                                     https://developers.google.com/blogger/docs/2.0/json/getting_started, https://developers.google.com/blogger/docs/3.0/getting_started
books                       v1                                         https://developers.google.com/books/docs/v1/getting_started
calendar                    v3                                         https://developers.google.com/google-apps/calendar/firstapp
chat                        v1                                         https://developers.google.com/hangouts/chat
civicinfo                   v2                                         https://developers.google.com/civic-information
classroom                   v1                                         https://developers.google.com/classroom
cloudasset                  v1beta1                                    https://console.cloud.google.com/apis/api/cloudasset.googleapis.com/overview
cloudbilling                v1                                         https://cloud.google.com/billing/
cloudbuild                  v1alpha1, v1                               https://cloud.google.com/cloud-build/docs/
clouddebugger               v2                                         https://cloud.google.com/debugger
clouderrorreporting         v1beta1                                    https://cloud.google.com/error-reporting/
cloudfunctions              v1, v1beta2                                https://cloud.google.com/functions
cloudiot                    v1, v1beta1                                https://cloud.google.com/iot
cloudkms                    v1                                         https://cloud.google.com/kms/
cloudprofiler               v2                                         https://cloud.google.com/profiler/
cloudresourcemanager        v1, v1beta1, v2, v2beta1                   https://cloud.google.com/resource-manager
cloudshell                  v1alpha1, v1                               https://cloud.google.com/shell/docs/
cloudtasks                  v2beta2, v2beta3                           https://cloud.google.com/tasks/
cloudtrace                  v2alpha1, v1, v2                           https://cloud.google.com/trace
composer                    v1, v1beta1                                https://cloud.google.com/composer/
compute                     alpha, beta, v1                            https://developers.google.com/compute/docs/reference/latest/
container                   v1, v1beta1                                https://cloud.google.com/container-engine/
content                     v2sandbox, v2                              https://developers.google.com/shopping-content
customsearch                v1                                         https://developers.google.com/custom-search/v1/using_rest
dataflow                    v1b3                                       https://cloud.google.com/dataflow
dataproc                    v1, v1beta2                                https://cloud.google.com/dataproc/
datastore                   v1, v1beta1, v1beta3                       https://cloud.google.com/datastore/
deploymentmanager           alpha, v2beta, v2                          https://cloud.google.com/deployment-manager/, https://developers.google.com/deployment-manager/
dfareporting                v2.8, v3.0, v3.1, v3.2                     https://developers.google.com/doubleclick-advertisers/
dialogflow                  v2, v2beta1                                https://cloud.google.com/dialogflow-enterprise/
digitalassetlinks           v1                                         https://developers.google.com/digital-asset-links/
discovery                   v1                                         https://developers.google.com/discovery/
dlp                         v2                                         https://cloud.google.com/dlp/docs/
dns                         v1, v1beta2, v2beta1                       https://developers.google.com/cloud-dns
doubleclickbidmanager       v1                                         https://developers.google.com/bid-manager/
doubleclicksearch           v2                                         https://developers.google.com/doubleclick-search/
drive                       v2, v3                                     https://developers.google.com/drive/
file                        v1beta1                                    https://cloud.google.com/filestore/
firebasedynamiclinks        v1                                         https://firebase.google.com/docs/dynamic-links/
firebaserules               v1                                         https://firebase.google.com/docs/storage/security
firestore                   v1, v1beta1, v1beta2                       https://cloud.google.com/firestore
fitness                     v1                                         https://developers.google.com/fit/rest/
fusiontables                v1, v2                                     https://developers.google.com/fusiontables
games                       v1                                         https://developers.google.com/games/services/
gamesConfiguration          v1configuration                            https://developers.google.com/games/services
gamesManagement             v1management                               https://developers.google.com/games/services
genomics                    v1alpha2, v2alpha1, v1                     https://cloud.google.com/genomics
gmail                       v1                                         https://developers.google.com/gmail/api/
groupsmigration             v1                                         https://developers.google.com/google-apps/groups-migration/
groupssettings              v1                                         https://developers.google.com/google-apps/groups-settings/get_started
iam                         v1                                         https://cloud.google.com/iam/
iamcredentials              v1                                         https://cloud.google.com/iam/docs/creating-short-lived-service-account-credentials
iap                         v1beta1                                    https://cloud.google.com/iap
identitytoolkit             v3                                         https://developers.google.com/identity-toolkit/v3/
indexing                    v3                                         https://developers.google.com/search/apis/indexing-api/
jobs                        v3p1beta1, v2, v3                          https://cloud.google.com/talent-solution/job-search/docs/
kgsearch                    v1                                         https://developers.google.com/knowledge-graph/
language                    v1, v1beta1, v1beta2                       https://cloud.google.com/natural-language/
licensing                   v1                                         https://developers.google.com/google-apps/licensing/
logging                     v2, v2beta1                                https://cloud.google.com/logging/docs/
manufacturers               v1                                         https://developers.google.com/manufacturers/
mirror                      v1                                         https://developers.google.com/glass
ml                          v1                                         https://cloud.google.com/ml/
monitoring                  v3                                         https://cloud.google.com/monitoring/api/
oauth2                      v1, v2                                     https://developers.google.com/accounts/docs/OAuth2
oslogin                     v1alpha, v1beta, v1                        https://cloud.google.com/compute/docs/oslogin/rest/
pagespeedonline             v1, v2, v4                                 https://developers.google.com/speed/docs/insights/v1/getting_started, https://developers.google.com/speed/docs/insights/v2/getting-started, https://developers.google.com/speed/docs/insights/v4/getting-started
partners                    v2                                         https://developers.google.com/partners/
people                      v1                                         https://developers.google.com/people/
playcustomapp               v1                                         https://developers.google.com/android/work/play/custom-app-api
plus                        v1                                         https://developers.google.com/+/api/
plusDomains                 v1                                         https://developers.google.com/+/domains/
poly                        v1                                         https://developers.google.com/poly/
proximitybeacon             v1beta1                                    https://developers.google.com/beacons/proximity/
pubsub                      v1beta1a, v1, v1beta2                      https://cloud.google.com/pubsub/docs
redis                       v1, v1beta1                                https://cloud.google.com/memorystore/docs/redis/
replicapool                 v1beta1                                    https://developers.google.com/compute/docs/replica-pool/
replicapoolupdater          v1beta1                                    https://cloud.google.com/compute/docs/instance-groups/manager/#applying_rolling_updates_using_the_updater_service
reseller                    v1                                         https://developers.google.com/google-apps/reseller/
runtimeconfig               v1, v1beta1                                https://cloud.google.com/deployment-manager/runtime-configurator/
safebrowsing                v4                                         https://developers.google.com/safe-browsing/
script                      v1                                         https://developers.google.com/apps-script/api/
searchconsole               v1                                         https://developers.google.com/webmaster-tools/search-console-api/
servicebroker               v1alpha1, v1, v1beta1                      https://cloud.google.com/kubernetes-engine/docs/concepts/add-on/service-broker
serviceconsumermanagement   v1                                         https://cloud.google.com/service-consumer-management/docs/overview
servicecontrol              v1                                         https://cloud.google.com/service-control/
servicemanagement           v1                                         https://cloud.google.com/service-management/
servicenetworking           v1beta, v1                                 https://cloud.google.com/service-infrastructure/docs/service-networking/reference/rest/
serviceusage                v1, v1beta1                                https://cloud.google.com/service-usage/
serviceuser                 v1                                         https://cloud.google.com/service-management/
sheets                      v4                                         https://developers.google.com/sheets/
siteVerification            v1                                         https://developers.google.com/site-verification/
slides                      v1                                         https://developers.google.com/slides/
sourcerepo                  v1                                         https://cloud.google.com/source-repositories/docs/apis
spanner                     v1                                         https://cloud.google.com/spanner/
speech                      v1, v1beta1                                https://cloud.google.com/speech-to-text/docs/quickstart-protocol
sqladmin                    v1beta4                                    https://cloud.google.com/sql/docs/reference/latest
storage                     v1, v1beta1, v1beta2                       https://developers.google.com/storage/docs/json_api/
storagetransfer             v1                                         https://cloud.google.com/storage/transfer
streetviewpublish           v1                                         https://developers.google.com/streetview/publish/
surveys                     v2                                         unavailable
tagmanager                  v1, v2                                     https://developers.google.com/tag-manager/api/v1/, https://developers.google.com/tag-manager/api/v2/
tasks                       v1                                         https://developers.google.com/google-apps/tasks/firstapp
testing                     v1                                         https://developers.google.com/cloud-test-lab/
texttospeech                v1, v1beta1                                https://cloud.google.com/text-to-speech/
toolresults                 v1beta3                                    https://firebase.google.com/docs/test-lab/
tpu                         v1alpha1, v1                               https://cloud.google.com/tpu/
translate                   v2                                         https://code.google.com/apis/language/translate/v2/getting_started.html
urlshortener                v1                                         https://developers.google.com/url-shortener/v1/getting_started
vault                       v1                                         https://developers.google.com/vault
videointelligence           v1p1beta1, v1, v1beta2                     https://cloud.google.com/video-intelligence/docs/
vision                      v1p1beta1, v1p2beta1, v1                   https://cloud.google.com/vision/
webfonts                    v1                                         https://developers.google.com/fonts/docs/developer_api
webmasters                  v3                                         https://developers.google.com/webmaster-tools/
websecurityscanner          v1alpha, v1beta                            https://cloud.google.com/security-scanner/
youtube                     v3                                         https://developers.google.com/youtube/v3
youtubeAnalytics            v1, v1beta1, v2                            http://developers.google.com/youtube/analytics/, https://developers.google.com/youtube/analytics
youtubereporting            v1                                         https://developers.google.com/youtube/reporting/v1/reports/

BUGS AND LIMITATIONS

On 2018-10-03, this project was forked from the Moo::Google project which stagnated and has apparently been abandoned. As designed, this module does not function with all possible Google API calls but will work with simpler API calls. However, to our knowledge, all API calls with the exception of batch API calls, can be made via the lower level api_aquery method. This is documented here:

https://www.perlmonks.org/?node_id=1219833

CONTRIBUTIONS AND BUG REPORTS

Please visit our GitHub project home page to report bugs and make contributions.

More thorough documentation on how to contribute is in the works.

SEE ALSO

API::Google - my old lib

Google::API::Client - source of inspiration

AUTHOR

Steve Dondley <s@dondley.com>

CONTRIBUTORS

  • Pavel Serikov <pavelsr@cpan.org>

  • Pavel Serikov <pavel.p.serikov@gmail.com>

  • dafinder <mattdw@gmail.com>

COPYRIGHT AND LICENSE

This software is copyright (c) 2018 by Steve Dondley.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.