Skip to content

sdondley/WebService-Google-Client

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

66 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NAME

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

VERSION

version 0.08

SYNOPSIS

Generate an access token JSON file per the instructions in "GETTING STARTED" below. You will then be able to make API calls to Google's authorization servers on a resource owner's behalf like so:

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 address of resource owner

$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}};

See unit test in xt folder for more examples.

NOTE: Due to current limitations in the module, you may need to resort to a lower level method, api_query to generate the API call. A fix to overcome this limitation will be in the works, soon. This lower level method looks something like this:

my $gapi = WebService::Google::Client->new(debug => 0);
my $user = 'me@gmail.com';

$gapi->auth_storage->setup({ type => 'jsonfile', path => 'config.json' });
$gapi->user($user);
$gapi->do_autorefresh;

$res = $gapi->api_query( {
    httpMethod => 'get',
    path => 'https://people.googleapis.com/v1/people/me',
    options => { personFields => 'emailAddresses' }
});

DESCRIPTION

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

GETTING STARTED

A basic familiarity with the OAuth 2.0 process will be helpful in getting started using this module. Or, you can use this module to assist you in getting hands on experience with OAuth 2.0 and its terminology.

Set up your project with Google

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 find the interface for creating OAuth2 cient ID credentials for the project. There, you will be asked to configure a "consent screen." The consent screen the interface used by 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. The consent screen does not have to be verified since it is not public. Simply supply an "Application name" for the consent screen and hit "Save." Finish the process by creating an "Other" application type. You can come back and set up additional consent screens later.

Finally, you will need to configure your project 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.

Generate the access token file

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. For now, qdd 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. If you have the `WebService::Google::Client` module installed, issue the `goauth` command from the command line. Otherwise, do `perl -Ilib bin/goauth` from the module's home directory.

The `goauth` utility will prompt you for the client_id and client_secret both which are available through the Google console. Once entered, the goauth utility will launch a basic webserver on your local machine for delivering displayin web pages you will use to authorize access to your data. To access the web pages, point your browser to 127.0.0.1:3001 and click on the "Click here to get Mojo tokens" link. You will next see a web page from Google. Follow the prompts to 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.

After you run some tests and verify everything is in working order, 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.

Use Google API documentation to help generate the API calls

See the "SYNOPSIS" above and the appropriate Google API documentation located at the URLs listed in the "SUPPORTED APIs" to you help you generate API calls to Google. Note that this module may not know how to construct all API calls using the syntax in the "SYNOPSIS." In such cases, you can use the lower level api_query method to generate API calls more directly. See this helpful post on Perlmonks.org for more information.

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

Go to the "Issues" section on the GitHub project to report bugs, make feature requests and ask questions.

For details on how to contribute, plese the README_4_CONTRIBUTORS.md on GitHub.

MODULE BACKGROUND AND HISTORY

Pavel Serikov began development of this module as a module named Moo::Google, a successor to his API::Google module. Moo::Google was inspired by the Google::API::Client module.

Development of the Moo::Google stagnated in January, 2018 and was forked the following October as `WebService::Google::Client`.

SEE ALSO

Moo::Google - pre-fork version of this module

Google APIs Explorer

Google Cloud Console - Use the console to set up your Google project

Using OAuth 2.0 to Access Google APIs

AUTHOR

Steve Dondley s@dondley.com

CONTRIBUTORS

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.

About

Perl library for working with all google services. Moose-based, uses Google API discovery. Fork of Moo::Google.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Perl 66.3%
  • Other 33.7%