The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

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

VERSION

version 0.01

SYNOPSIS

    use Moo::Google;

    my $gapi = Moo::Google->new(debug => 0); # my $gapi = Moo::Google->new(access_token => '');
    my $user = 'pavelsr@cpan.org'; # full gmail

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

    $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

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

SEE ALSO

API::Google - my old lib

Google::API::Client - source of inspiration

SUPPORTED APIs

  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/guides/client-access/
  adexchangeseller : v1,v1.1,v2.0 : https://developers.google.com/ad-exchange/seller-rest/
  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.3,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/
  androidenterprise : v1 : https://developers.google.com/android/work/play/emm-api
  androidpublisher : v1,v1.1,v2 : 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/
  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
  civicinfo : v2 : https://developers.google.com/civic-information
  classroom : v1 : https://developers.google.com/classroom
  cloudbilling : v1 : https://cloud.google.com/billing/
  cloudbuild : v1 : https://cloud.google.com/container-builder/docs/
  clouddebugger : v2 : http://cloud.google.com/debugger
  clouderrorreporting : v1beta1 : https://cloud.google.com/error-reporting/
  cloudfunctions : v1,v1beta2 : https://cloud.google.com/functions
  cloudkms : v1 : https://cloud.google.com/kms/
  cloudmonitoring : v2beta2 : https://cloud.google.com/monitoring/v2beta2/
  cloudresourcemanager : v1,v1beta1 : https://cloud.google.com/resource-manager
  cloudtrace : v1 : https://cloud.google.com/trace
  clouduseraccounts : alpha,beta,vm_alpha,vm_beta : https://cloud.google.com/compute/docs/access/user-accounts/api/latest/
  compute : alpha,beta,v1 : https://developers.google.com/compute/docs/reference/latest/
  Use of uninitialized value in join or string at lib/Moo/Google/Discovery.pm line 139.
  consumersurveys : v2 :
  container : v1 : 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 : v1alpha1,v1,v1beta1 : https://cloud.google.com/dataproc/
  datastore : v1,v1beta3 : https://cloud.google.com/datastore/
  deploymentmanager : alpha,v2beta,v2 : https://cloud.google.com/deployment-manager/,https://developers.google.com/deployment-manager/
  dfareporting : v2.6,v2.7 : https://developers.google.com/doubleclick-advertisers/
  discovery : v1 : https://developers.google.com/discovery/
  dlp : v2beta1 : https://cloud.google.com/dlp/docs/
  dns : v1,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/
  firebasedynamiclinks : v1 : https://firebase.google.com/docs/dynamic-links/
  firebaserules : v1 : https://firebase.google.com/docs/storage/security
  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,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/
  identitytoolkit : v3 : https://developers.google.com/identity-toolkit/v3/
  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,v1beta1 : https://cloud.google.com/ml/
  monitoring : v3 : https://cloud.google.com/monitoring/api/
  oauth2 : v1,v2 : https://developers.google.com/accounts/docs/OAuth2
  pagespeedonline : v1,v2 : https://developers.google.com/speed/docs/insights/v1/getting_started,https://developers.google.com/speed/docs/insights/v2/getting-started
  partners : v2 : https://developers.google.com/partners/
  people : v1 : https://developers.google.com/people/
  playmoviespartner : v1 : https://developers.google.com/playmoviespartner/
  plus : v1 : https://developers.google.com/+/api/
  plusDomains : v1 : https://developers.google.com/+/domains/
  prediction : v1.2,v1.3,v1.4,v1.5,v1.6 : https://developers.google.com/prediction/docs/developer-guide
  proximitybeacon : v1beta1 : https://developers.google.com/beacons/proximity/
  pubsub : v1beta1a,v1,v1beta2 : https://cloud.google.com/pubsub/docs
  qpxExpress : v1 : http://developers.google.com/qpx-express
  replicapool : v1beta1,v1beta2 : https://developers.google.com/compute/docs/replica-pool/,https://developers.google.com/compute/docs/instance-groups/manager/v1beta2
  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/
  resourceviews : v1beta1,v1beta2 : https://developers.google.com/compute/
  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/execution/rest/v1/scripts/run
  searchconsole : v1 : https://developers.google.com/webmaster-tools/search-console-api/
  servicecontrol : v1 : https://cloud.google.com/service-control/
  servicemanagement : v1 : https://cloud.google.com/service-management/
  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/eap/cloud-repositories/cloud-sourcerepo-api
  spanner : v1 : https://cloud.google.com/spanner/
  spectrum : v1explorer : http://developers.google.com/spectrum
  speech : v1beta1 : https://cloud.google.com/speech/
  sqladmin : v1beta3,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
  supportcases : v2 : https://sites.google.com/a/google.com/cases/
  Use of uninitialized value in join or string at lib/Moo/Google/Discovery.pm line 139.
  surveys : v2 :
  tagmanager : v1,v2 : https://developers.google.com/tag-manager/api/v1/,https://developers.google.com/tag-manager/api/v2/
  taskqueue : v1beta1,v1beta2 : https://developers.google.com/appengine/docs/python/taskqueue/rest
  tasks : v1 : https://developers.google.com/google-apps/tasks/firstapp
  toolresults : v1beta3firstparty,v1beta3 : https://firebase.google.com/docs/test-lab/
  tracing : v2 : https://cloud.google.com/trace
  translate : v2 : https://developers.google.com/translate/v2/using_rest
  urlshortener : v1 : https://developers.google.com/url-shortener/v1/getting_started
  vision : v1 : https://cloud.google.com/vision/
  webfonts : v1 : https://developers.google.com/fonts/docs/developer_api
  webmasters : v3 : https://developers.google.com/webmaster-tools/
  youtube : v3 : https://developers.google.com/youtube/v3
  youtubeAnalytics : v1,v1beta1 : http://developers.google.com/youtube/analytics/
  youtubereporting : v1 : https://developers.google.com/youtube/reporting/v1/reports/

AUTHOR

Pavel Serikov <pavelsr@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2017 by Pavel Serikov.

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