人文学オープンデータ共同利用センター(CODH)は8月30日、古文書に書かれた「くずし字」をAIで解読するスマートフォン(iOS/Android)向け無料アプリ「みを」を公開した。元のくずし字と変換後の文字を比較でき、古文書に慣れてない人の理解を手助けするという。
AIの学習には、国文学研究資料館の日本古典籍くずし字データセットを基に、CODHが開発したくずし字認識モデル「KuroNet」(クロネット)と、機械学習の精度を競い合うプラットフォーム「Kaggle」(カグル)のくずし字認識コンペティションで1位になったtascj氏の認識モデルを活用している。くずし字は江戸時代のデータを基にしているため、違う時代の資料では精度が低下する可能性があるという。
⇧ 時代が異なれば、通じないこともありますと、それを人は、ジェネレーションギャップという、どうもボクです。
とはいえ、「手書き文字」の認識も難易度が高いと思うのに、「くずし字」の認識ですか、驚き桃の木山椒の木ですな。
いつも通り、冒頭から話が脱線しましたが、今回は、「Sheets API(Google Sheets API)」について調べてみました。
レッツトライ~。
Google Sheets(Google Spreadsheet)って?
Wikipediaさんに聞いてみた。
Google Sheets is a spreadsheet program included as part of the free, web-based Google Docs Editors suite offered by Google. The service also includes Google Docs, Google Slides, Google Drawings, Google Forms, Google Sites, and Google Keep. Google Sheets is available as a web application, mobile app for Android, iOS, Windows, BlackBerry, and as a desktop application on Google's Chrome OS. The app is compatible with Microsoft Excel file formats.
⇧ ってなっていて、Google検索した感じだと、
⇧ 「Google Sheets」が正式名称っぽいような気がしますな、いままで、ずっと「Google Spreadsheet」って認識だったけど、「Google Sheets」の「SpreadSheets」ってことなんですかね?
Sheets API(Google Sheets API)って?
「https://developers.google.com/」にアクセスして、
画面を下の方にスクロールしていって、「View all developer products」ってボタンをクリックすると、
「https://developers.google.com/products」にページ遷移するので、また画面を下の方にスクロールしていって、
アルファベット並んでるんで、「S」を選択して、
ページ遷移するので、画面の下の方にスクロールしていって、
「Sheets API」ってのがあるので選択。
で、説明文を見ると、「The Google Sheets API lets you read, write, and format Google Sheets data with your preferred programming language, including Java, JavaScript, and Python.」ってなっていて、「Sheets API」が正しいのか「Google Sheets API」が正しいのか、よく分かりませんと...
とりあえず、「Reference documentation」を選択してみると、
ページ遷移されて、 「To call this service, we recommend that you use the Google-provided client libraries. If your application needs to use your own libraries to call this service, use the following information when you make the API requests.」ってな説明があって、「client libraries」の使用を推奨って言っていて、
⇧「Client Libraries」がサイドバーのほうに表示されていて、 っていうか、プルダウンを開いてみたら、「Java」「.Net」「Python」は「Core library」と「API library」の2つありますな...
とりあえずは、
- Browser
- Go
- Java
- Core library
- API library
- .Net
- Core library
- API library
- Node.js
- PHP
- Python
- Core library
- API library
- Ruby
で使えるらしい。
「Browser」以外はサーバーサイド側で利用される言語だと思うけど、なんとなく有名どころの言語はカバーされてるっぽいですね。
将来的には、「Rust」とかでも利用できるようになるんかな?
JavaでSheets API(Google Sheets API)を利用してみる
世は大ビッグデータ時代、ってわけで、巷にはデータが溢れていますと。
そのような世相を鑑みるに、おそらく、昨今の用途としては、「Google Sheets(Google Spreadsheets)」に対して「集計したデータを書き込む」みたいな利用例が多いんかな?
どっちにしろ、問題になってくるのは、
みたいな感じで、「2.既存のGoogle Sheetsを編集する」のような、お客さんからファイルを連携されるパターンのほうが、「API(Application programing Interface)」の制約とかで泥沼にハマりそうに思えてしまいますな...
というわけで、
⇧ を参考に、Javaで「Sheets API(Google Sheets API)」を利用してみます。
というか、「Google Maps Platform(旧:Google Maps API)」もそうだったけど、
Prerequisites
To run this quickstart, you need the following prerequisites:
- Java 1.8 or greater.
- Gradle 2.3 or greater.
- A Google Cloud Platform project with the API enabled. To create a project and enable an API, refer to Create a project and enable the API.
- Authorization credentials for a desktop application. To learn how to create credentials for a desktop application, refer to Create credentials.
- A Google account.
⇧ もはや「GCP(Google Cloud Platform)」が必須みたいになっとるやん...
それとも、「Quickstart」のサンプルにだけ必要なんかがよく分からん...
ドキュメントが分かり辛えな...
ちなみに、手前味噌でありますが、「Google Cloud API」と「Google API」で「API(Application programing Interface)」の「認証(Authentication)」が異なるというのを、
⇧ 上記記事でまとめております。
ただ、Googleさんの公開してるドキュメントを読んでみても、「Google Cloud API」か「Google API」かどうかを判断する方法がハッキリしないんだけど、現状、「Google Cloud API」の全量は確認できるらしいので、「Google Cloud API」として認識されてないものは、すべて「Google API」って考えるしか無いっぽい。
このページでは、Google Cloud プロジェクトで有効になっている、または使用可能な API やサービスを一覧表示する方法について説明します。利用可能または有効になっている API やサービスの一覧には、Pub/Sub などの公開されている Google Cloud サービスと、Cloud Endpoints を使用して作成されたサービスのような、個人的に共有されている API やサービスの両方が含まれている可能性があります。公開 API と非公開 API サービスの相違について詳しくは、一般公開サービスと非公開サービスをご覧ください。
https://cloud.google.com/service-usage/docs/list-services#curl_1
⇧ ってなってるんで、「Google Cloud API」の全量は確認できるはず...
要するに、正確な情報を得たいなら「GCP(Google Cloud Platform)」を使え、ってことみたいね...、何か忖度を強制する雰囲気が嫌な感じだな~...
あと、注意しないといけないのが、「Sheets API(Google Sheets API)」には、無料利用の制限があるってことですかね。
Usage Limits
This version of the Google Sheets API has a limit of 500 requests per 100 seconds per project, and 100 requests per 100 seconds per user. Limits for reads and writes are tracked separately. There is no daily usage limit.
To view or change usage limits for your project, or to request an increase to your quota, do the following:
- If you don't already have a billing account for your project, then create one.
- Visit the Enabled APIs page of the API library in the API Console, and select an API from the list.
- To view and change quota-related settings, select Quotas. To view usage statistics, select Usage.
⇧ ドキュメントによると、「1つのプロジェクトで100秒間に500リクエストまで、且つ、1人のユーザーで100秒間に100リクエストまで」ってなっていて、それ以上の性能を求める場合は、有料対応してくれってことみたいね。
上記の範囲内であれば、
1日864回はAPIを叩けるってことかね。
何か、開発で試行錯誤してたら、上限を超えてしまいそうな気もしますな...
「Google Maps Platform(旧:Google Maps API)」で感じたけど、最初に「無料」にしておいて痴れっと「制限付きの無料」に切り替えていくのは印象宜しくないんだけど、「Sheets API(Google Sheets API)」はどうなんだろう?
早速ご回答いただきありがとうございます。請求アカウントの意図含め、納得いたしました。Google Cloud Platformの担当窓口へは以前問合せしていたのですが、扱っていないとの回答を受け、こちらに質問させていただいた次第です。正しくはG Suite管理者の問合せフォームへの問合せでしたのですね。大変助かりました。ありがとうございます。 – Takuya 20年7月15日 1:20
⇧ ってな感じで、なんか、情報が錯綜してる感が半端ない...
脱線しましたが、何はともあれ、「GCP(Google Cloud Platform)」を利用できる状況になったらば、「GCP(Google Cloud Platform)」の管理画面にログインします。
■GCP(Google Cloud Platform)でプロジェクト作成
「GCP(Google Cloud Platform)」の管理画面にログイン後、「新しいプロジェクト」を作成します。
「プロジェクト名 *」を入力し、「プロジェクト ID」を変えたい場合は、「編集」を押下。
「プロジェクト ID *」を適当に入力し、「作成」を押下。
プロジェクトが作成されたようです。
■利用するAPIを決める
作成したプロジェクトに切り替えておきます。
のアイコンをクリックして、「APIとサービス」 を選択。
「+APIサービスの有効化」 を押下。
検索欄に「Sheets API」と入力し、Enterキーを押下で。
検索結果で「Google Sheets API」が表示されたら、選択。
「有効にする」を押下。
「Google Sheets API」が有効化されたようです。
■GCP(Google Cloud Platform)で「Sheets API」を利用するための「認証情報(Credential)」の作成
というか、
https://cloud.google.com/docs/authentication/getting-started
⇧ ってな感じで、
で「認証(Authentication)」が異なるらしいんで、まずは、「Sheets API」がどっちの「API(Application programing Interface)」になるのかを確認する必要がありますと。
「GCP(Google Cloud Platform)」の管理画面で、「CLOUD SHELL」ってのを起動して、以下のコマンドを実施
gcloud services list --available
■一覧表示の結果
NAME TITLE abilitec-api.endpoints.liveramp-identity-public.cloud.goog AbiliTec API abusiveexperiencereport.googleapis.com Abusive Experience Report API acceleratedmobilepageurl.googleapis.com Accelerated Mobile Pages (AMP) URL API accessapproval.googleapis.com Access Approval API accesscontextmanager.googleapis.com Access Context Manager API actian-avalanche-hybrid-cloud-data-warehouse.endpoints.actian-public.cloud.goog Actian Avalanche Hybrid Cloud Data Warehouse actions.googleapis.com Actions API activtrak-public.endpoints.activtrak-public.cloud.goog ActivTrak adexchangebuyer-json.googleapis.com Ad Exchange Buyer API adexchangebuyer.googleapis.com Ad Exchange Buyer API II adexchangeseller.googleapis.com Ad Exchange Seller API adexperiencereport.googleapis.com Ad Experience Report API admin.googleapis.com Admin SDK API admob.googleapis.com AdMob API adsense.googleapis.com AdSense Management API adsensehost.googleapis.com AdSense Host API aiplatform.googleapis.com Vertex AI API aiui.googleapis.com AI UI API alertcenter.googleapis.com Google Workspace Alert Center API amwell-now.endpoints.amwell-marketplace-public.cloud.goog Amwell Now analytics.googleapis.com Google Analytics API analyticsadmin.googleapis.com Google Analytics Admin API analyticsdata.googleapis.com Google Analytics Data API analyticsreporting.googleapis.com Analytics Reporting API androidcheck.googleapis.com Android Device Verification androiddeviceprovisioning.googleapis.com Android Device Provisioning Partner API androidenterprise.googleapis.com Google Play EMM API androidmanagement.googleapis.com Android Management API androidovertheair.googleapis.com Android Over the Air API androidpublisher.googleapis.com Google Play Android Developer API anthos.googleapis.com Anthos API anthosaudit.googleapis.com Anthos Audit API anthosconfigmanagement.googleapis.com Anthos Config Management API anthosgke.googleapis.com Anthos GKE API anthosidentityservice.googleapis.com Anthos Identity Service apache-kafka-on-confluent-cloud.endpoints.confluent-isaas.cloud.goog Apache Kafka® on Confluent Cloud™ apigateway.googleapis.com API Gateway API apigee.googleapis.com Apigee API apigeeconnect.googleapis.com Apigee Connect API apikeys.googleapis.com API Keys API appdevelopmentexperience.googleapis.com App Development Experience API appengine.googleapis.com App Engine Admin API appengineflex.googleapis.com Google App Engine Flexible Environment appsmarket-component.googleapis.com Google Workspace Marketplace SDK appsmarket.googleapis.com Google Workspace Marketplace API arcorecloudanchor.googleapis.com ARCore Cloud Anchor API area120tables.googleapis.com Area120 Tables API artifactregistry.googleapis.com Artifact Registry API ascend-io-standard.endpoints.ascend-io-marketplace-public.cloud.goog Ascend.io Unified Data Engineering Platform asr.endpoints.knowlarity-public.cloud.goog Programmable Speech Analytics assuredworkloads.googleapis.com Assured Workloads API audit.googleapis.com Audit API automation-360-bot-agent.endpoints.automationanywhere-public.cloud.goog Automation 360 Bot Agent automation-360.endpoints.automationanywhere-public.cloud.goog Automation 360 automl.googleapis.com Cloud AutoML API autoscaling.googleapis.com Cloud Autoscaling API baremetalsolution.googleapis.com Bare Metal Solution API bettercloud1.endpoints.bettercloud-marketplace-public.cloud.goog BetterCloud bigquery.googleapis.com BigQuery API bigqueryconnection.googleapis.com BigQuery Connection API bigquerydatatransfer.googleapis.com BigQuery Data Transfer API bigqueryreservation.googleapis.com BigQuery Reservation API bigquerystorage.googleapis.com BigQuery Storage API bigtable.googleapis.com Cloud Bigtable API bigtableadmin.googleapis.com Cloud Bigtable Admin API bigtabletableadmin.googleapis.com Cloud Bigtable Table Admin API billingbudgets.googleapis.com Cloud Billing Budget API binaryauthorization.googleapis.com Binary Authorization API blogger.googleapis.com Blogger API v3 books.googleapis.com Books API bookstore.endpoints.endpoints-portal-demo.cloud.goog Bookstore gRPC API bp-accelerators-for-sap-byol.endpoints.msrcosmos-public.cloud.goog Blue Prism® Accelerators for use with SAP® ERP (BYOL) bp-accelerators-for-sap.endpoints.msrcosmos-public.cloud.goog Blue Prism® Accelerators for use with SAP® ERP caldav.googleapis.com CalDAV API calendar-json.googleapis.com Google Calendar API carddav.googleapis.com Google Contacts CardDAV API cdp-for-gcp.endpoints.gcp-cdp-marketplace-public.cloud.goog Cloudera Data Platform (CDP) charon-ssp-virtual-sparc.endpoints.stromasys-public.cloud.goog Charon SSP Virtual SPARC chat.googleapis.com Hangouts Chat API chromemanagement.googleapis.com Chrome Management API chromepolicy.googleapis.com Chrome Policy API chromeuxreport.googleapis.com Chrome UX Report API chromewebstore.googleapis.com Chrome Web Store API civicinfo.googleapis.com Google Civic Information API classroom.googleapis.com Google Classroom API cloud-managed-services.endpoints.opentext-public.cloud.goog Cloud Managed Services cloud.googleapis.com Service Metadata API cloudapis.googleapis.com Google Cloud APIs cloudasset.googleapis.com Cloud Asset API cloudbilling.googleapis.com Cloud Billing API cloudbuild.googleapis.com Cloud Build API cloudchannel.googleapis.com Cloud Channel API clouddataprep.trifacta.com Clouddataprep by Trifacta clouddebugger.googleapis.com Cloud Debugger API clouderrorreporting.googleapis.com Error Reporting API cloudfunctions.googleapis.com Cloud Functions API cloudidentity.googleapis.com Cloud Identity API cloudiot.googleapis.com Cloud IoT API cloudkms.googleapis.com Cloud Key Management Service (KMS) API cloudlatencytest.googleapis.com Cloud Network Performance Monitoring API cloudprivatecatalog.googleapis.com Cloud Private Catalog API cloudprofiler.googleapis.com Stackdriver Profiler API cloudresourcemanager.googleapis.com Cloud Resource Manager API cloudscheduler.googleapis.com Cloud Scheduler API cloudsearch.googleapis.com Cloud Search API cloudshell.googleapis.com Cloud Shell API cloudtasks.googleapis.com Cloud Tasks API cloudtrace.googleapis.com Cloud Trace API cloudvideosearch.googleapis.com Video Search API cloudvolumesgcp-api.netapp.com NetApp Cloud Volumes API cmca-elk-ubuntu.endpoints.classmethod-can-public.cloud.goog ELK collibra-for-gcp-collibra-marketplace-public.cloudpartnerservices.goog Collibra Data Intelligence Cloud Reporting Service commercetools-platform.endpoints.commercetools-public.cloud.goog Commercetools Platform commvaultcomplete-cvlt-marketplace-public.cloudpartnerservices.goog CommvaultComplete Reporting Service composer.googleapis.com Cloud Composer API compute.googleapis.com Compute Engine API conductor.endpoints.conductor-public.cloud.goog Conductor Cloud Rendering connectgateway.googleapis.com Connect Gateway API contactcenterinsights.googleapis.com Contact Center AI Insights API contacts.googleapis.com Contacts API container.googleapis.com Kubernetes Engine API containeranalysis.googleapis.com Container Analysis API containerfilesystem.googleapis.com Container File System API containerregistry.googleapis.com Container Registry API containerscanning.googleapis.com Container Scanning API containerthreatdetection.googleapis.com Container Threat Detection API copresence.googleapis.com Nearby Messages API cortex-xdr-paloaltonetworks-public.cloudpartnerservices.goog Palo Alto Networks, Inc. Cortex-XDR Reporting Service cortex-xpanse.endpoints.paloaltonetworks-public.cloud.goog Cortex Xpanse customsearch.googleapis.com Custom Search API cysiv-soc-as-a-service.endpoints.cysiv-public.cloud.goog Cysiv SOC-as-a-Service databricks.endpoints.databricks-prod-master.cloud.goog Databricks datacatalog.googleapis.com Google Cloud Data Catalog API datadog-private.endpoints.datadog-public.cloud.goog Datadog Private Plans datadog-public.endpoints.datadog-public.cloud.goog Datadog dataflow.googleapis.com Dataflow API datafusion.googleapis.com Cloud Data Fusion API datalabeling.googleapis.com Data Labeling API datamask.endpoints.softserve-public.cloud.goog DATAMASK datamigration.googleapis.com Database Migration API datapipelines.googleapis.com Data pipelines API dataproc.googleapis.com Cloud Dataproc API datastore.googleapis.com Cloud Datastore API datastream.googleapis.com Datastream API datastudio.googleapis.com Data Studio API datometry-hyper-q-for-bigquery.endpoints.datometry-public.cloud.goog Datometry Hyper-Q for BigQuery dell-dps-plus.endpoints.dellemc-ddve-public.cloud.goog dell-dps-plus deploymentmanager.googleapis.com Cloud Deployment Manager V2 API dfareporting.googleapis.com Campaign Manager 360 API dialogflow.googleapis.com Dialogflow API digitalassetlinks.googleapis.com Digital Asset Links API directions-backend.googleapis.com Directions API discovery.googleapis.com API Discovery Service displayvideo.googleapis.com Display & Video 360 API distance-matrix-backend.googleapis.com Distance Matrix API dlp.googleapis.com Cloud Data Loss Prevention (DLP) API dns.googleapis.com Cloud DNS API docs.googleapis.com Google Docs API documentai.googleapis.com Cloud Document AI API domains.googleapis.com Cloud Domains API domainsrdap.googleapis.com Domains RDAP API doubleclickbidmanager.googleapis.com DoubleClick Bid Manager API doubleclicksearch.googleapis.com Search Ads 360 API drive.googleapis.com Google Drive API driveactivity.googleapis.com Drive Activity API echo-api.endpoints.endpoints-portal-demo.cloud.goog Endpoints Example edgecache.googleapis.com Global Edge Cache Service elasticsearch-service.gcpmarketplace.elastic.co Elasticsearch Service on Elastic Cloud - Standard elevation-backend.googleapis.com Maps Elevation API embeddedassistant.googleapis.com Google Assistant API endpoints.googleapis.com Google Cloud Endpoints endpointsportal.googleapis.com Cloud Endpoints Portal engagement-cdp-marketing-automation.endpoints.bloomreach-public.cloud.goog Engagement (CDP, Marketing Automation) essentialcontacts.googleapis.com Essential Contacts API eventarc.googleapis.com Eventarc API factchecktools.googleapis.com Fact Check Tools API fcm.googleapis.com Firebase Cloud Messaging API fcmdata.googleapis.com Firebase Cloud Messaging Data API fcmregistrations.googleapis.com FCM Registration API file.googleapis.com Cloud Filestore API firebase.googleapis.com Firebase Management API firebaseappcheck.googleapis.com Firebase App Check API firebaseappdistribution.googleapis.com Firebase App Distribution API firebaseapptesters.googleapis.com Firebase App Testers API firebasedatabase.googleapis.com Firebase Realtime Database Management API firebasedynamiclinks.googleapis.com Firebase Dynamic Links API firebaseextensions.googleapis.com Firebase Extensions API firebasehosting.googleapis.com Firebase Hosting API firebaseinappmessaging.googleapis.com Firebase In-App Messaging API firebaseinstallations.googleapis.com Firebase Installations API firebaseml.googleapis.com Firebase ML API firebasepredictions.googleapis.com Firebase Predictions API firebaseremoteconfig.googleapis.com Firebase Remote Config API firebaserules.googleapis.com Firebase Rules API firebasestorage.googleapis.com Cloud Storage for Firebase API firestore.googleapis.com Cloud Firestore API firewallinsights.googleapis.com Firewall Insights API fitness.googleapis.com Fitness API fivetran-marketplace.gcpmarketplace.fivetran.com Fivetran Data Pipelines Reporting Service fusion.endpoints.lucidworks-public.cloud.goog Fusion games.googleapis.com Google Play Game Services gamesconfiguration.googleapis.com Google Play Game Services Publishing API gameservices.googleapis.com Game Services API gamesmanagement.googleapis.com Google Play Game Management gcp.redisenterprise.com Redis Enterprise gcpmarketplace.cloudmanager.netapp.com NetApp, Inc. Cloud Manager for Cloud Volumes ONTAP Reporting Service genomics.googleapis.com Genomics API geocoding-backend.googleapis.com Geocoding API geolocation.googleapis.com Geolocation API gitlab-for-gcp-gitlab-public.cloudpartnerservices.goog GitLab Reporting Service gkeconnect.googleapis.com GKE Connect API gkehub.googleapis.com GKE Hub API gmail.googleapis.com Gmail API gmailpostmastertools.googleapis.com Gmail Postmaster Tools API googleads.googleapis.com Google Ads API googlecloudmessaging.googleapis.com Cloud Messaging grafana-cloud-commit.endpoints.grafana-public.cloud.goog Grafana Cloud Commit gridspace-sift-for-gcp.endpoints.gridspace-marketplace-public.cloud.goog Gridspace Sift groupby-product-discovery-suite.endpoints.groupbyinc-marketplace-public.cloud.goog GroupBy Product Discovery Suite groupsmigration.googleapis.com Groups Migration API groupssettings.googleapis.com Groups Settings API gsuiteaddons.googleapis.com Google Workspace Add-ons API hashicorp-consul-gcp-hashicorp-marketplace-public.cloudpartnerservices.goog HashiCorp Consul Reporting Service hashicorp-for-gcp-hashicorp-marketplace-public.cloudpartnerservices.goog HashiCorp Terraform Enterprise Reporting Service hashicorp-vault-gcp-hashicorp-marketplace-public.cloudpartnerservices.goog HashiCorp Vault Reporting Service hcl-cotrust.endpoints.hcl-cotrust-public.cloud.goog HCL CoTrust healthcare.googleapis.com Cloud Healthcare API homegraph.googleapis.com HomeGraph API iam.googleapis.com Identity and Access Management (IAM) API iamcredentials.googleapis.com IAM Service Account Credentials API iap.googleapis.com Cloud Identity-Aware Proxy API ideahub.googleapis.com Idea Hub API identitytoolkit.googleapis.com Identity Toolkit API ids.googleapis.com Cloud IDS API iics-prod.gcpmarketplace.informaticacloud.com Informatica Intelligent Cloud Services Reporting Service indexing.googleapis.com Indexing API informatica-enterprise-data-catalog-license-subscription.endpoints.infamarketplace.cloud.goog Informatica Enterprise Data Catalog License Subscription insightfinder-unified-intelligence-engine-uie.endpoints.insightfinder-public.cloud.goog InsightFinder Unified Intelligence Engine (UIE) ionq.endpoints.ionq-public.cloud.goog IonQ Quantum Cloud jobs.googleapis.com Cloud Talent Solution API keep.googleapis.com Google Keep API kgsearch.googleapis.com Knowledge Graph Search API krmapihosting.googleapis.com KRM API Hosting API labelbox-product-gcp.endpoints.labelbox-tackle-public.cloud.goog Labelbox language.googleapis.com Cloud Natural Language API libraryagent.googleapis.com Library Agent API licensing.googleapis.com Enterprise License Manager API lifesciences.googleapis.com Cloud Life Sciences API localservices.googleapis.com Local Services API logging.googleapis.com Cloud Logging API lookout-security-platform.endpoints.lookout-public.cloud.goog Lookout Security Platform mailgun.endpoints.mailgun-public.cloud.goog Mailgun by Pathwire managedidentities.googleapis.com Managed Service for Microsoft Active Directory API manufacturers.googleapis.com Manufacturer Center API maps-android-backend.googleapis.com Maps SDK for Android maps-backend.googleapis.com Maps JavaScript API maps-embed-backend.googleapis.com Maps Embed API maps-ios-backend.googleapis.com Maps SDK for iOS matossphere.endpoints.cloudmatos-public.cloud.goog MatosSphere mediatranslation.googleapis.com Media Translation API memcache.googleapis.com Cloud Memorystore for Memcached API meshca.googleapis.com Anthos Service Mesh Certificate Authority API meshconfig.googleapis.com Mesh Configuration API meshtelemetry.googleapis.com Mesh Telemetry API metastore.googleapis.com Dataproc Metastore API migrate.googleapis.com Google Workspace Migrate API ml.googleapis.com AI Platform Training & Prediction API mlkit.googleapis.com ML Kit API mobilecrashreporting.googleapis.com Mobile Crash Reporting API monitoring.googleapis.com Cloud Monitoring API moviesanywhere.googleapis.com Play Movies Anywhere API multiclusteringress.googleapis.com Multi Cluster Ingress API multiclustermetering.googleapis.com Multi cluster metering API multiclusterservicediscovery.googleapis.com Multi-Cluster Service Discovery API mux-video.endpoints.mux-public.cloud.goog Mux Video mybusinessaccountmanagement.googleapis.com My Business Account Management API mybusinessbusinessinformation.googleapis.com My Business Business Information API mybusinesslodging.googleapis.com My Business Lodging API mybusinessnotifications.googleapis.com My Business Notifications API mybusinessplaceactions.googleapis.com My Business Place Actions API mybusinessverifications.googleapis.com My Business Verifications API nasuni-edge-appliance.endpoints.nasuni-public.cloud.goog Nasuni Edge Appliance nasuni-files-for-google-cloud-platform.endpoints.nasuni-public.cloud.goog Nasuni Files for Google Cloud Platform nasuni-for-gcp.endpoints.nasuni-public.cloud.goog Nasuni Cloud File Services nasuni-management-console.endpoints.nasuni-public.cloud.goog Nasuni Management Console neo4j-aura-gcp.endpoints.neo4j-aura-gcp.cloud.goog Neo4j Aura Enterprise Database-as-a-Service netscout-application-performance-management-for-gcp.endpoints.netscout-apm-public-228718.cloud.goog NETSCOUT Application Performance Management for GCP networkconnectivity.googleapis.com Network Connectivity API networkmanagement.googleapis.com Network Management API networksecurity.googleapis.com Network Security API networkservices.googleapis.com Network Services API networktopology.googleapis.com Network Topology API notebooks.googleapis.com Notebooks API o9-solutions.endpoints.o9solutions-public.cloud.goog o9 Solutions ondemandscanning.googleapis.com On-Demand Scanning API opsconfigmonitoring.googleapis.com Config Monitoring for Ops API orcasecurity-for-gcp.endpoints.orca-security-public.cloud.goog Orca Security orgpolicy.googleapis.com Organization Policy API osconfig.googleapis.com OS Config API oslogin.googleapis.com Cloud OS Login API pagespeedonline.googleapis.com PageSpeed Insights API panos-paloaltonetworks-public.cloudpartnerservices.goog Palo Alto Networks, Inc. panos Reporting Service pantheon-webops.endpoints.pantheon-market-public.cloud.goog Pantheon WebOps partners-json.googleapis.com Google Partners API payg-prod.gcpmarketplace.confluent.cloud Confluent Cloud Service Prod paymentsresellersubscription.googleapis.com Payments Reseller Subscription API pendo-io-gcp.endpoints.pendo-marketplace-public.cloud.goog Pendo.IO people.googleapis.com People API performanceparameters.googleapis.com Android Performance Parameters API permission.io-full-node.endpoints.permission-public.cloud.goog Permission.Io Full Node permission.io-mining-node.endpoints.permission-public.cloud.goog Permission.io Mining Node photoslibrary.googleapis.com Photos Library API picker.googleapis.com Google Picker API pilot-single-node.endpoints.clearbladegcp-public.cloud.goog Intelligent Assets places-backend.googleapis.com Places API plainsight-vision-ai.endpoints.plainsight-public.cloud.goog Plainsight playablelocations.googleapis.com Playable Locations API playcustomapp.googleapis.com Google Play Custom App Publishing API plus.googleapis.com Google+ API plusdomains.googleapis.com Google+ Domains API plushangouts.googleapis.com Google+ Hangouts API policyanalyzer.googleapis.com Policy Analyzer API policysimulator.googleapis.com Policy Simulator API policytroubleshooter.googleapis.com Policy Troubleshooter API poly.googleapis.com Poly API prisma-access-paloaltonetworks-public.cloudpartnerservices.goog Palo Alto Networks, Inc. Cortex-XDR Reporting Service prisma-cloud-compute-paloaltonetworks-public.cloudpartnerservices.goog Palo Alto Networks, Inc. Prisma Cloud Compute Reporting Service privateca.googleapis.com Certificate Authority API prod-tt-sasportal.googleapis.com SAS Portal API (Testing) prod.cloud.datastax.com DataStax Astra - Cassandra as a Service prod.n4gcp.neo4j.io Neo4j GCP Integration Service (Prod) programmablesearchelement.googleapis.com Programmable Search Element Paid API publicca.googleapis.com Public Certificate Authority API pubsub.googleapis.com Cloud Pub/Sub API pubsublite.googleapis.com Pub/Sub Lite API quantum-metric-quantum-metric-llc-public.cloudpartnerservices.goog Quantum Metric Reporting Service real-time-continuous-optimization.endpoints.granulate-public.cloud.goog Real Time Continuous Optimization realtime.googleapis.com Realtime API realtimebidding.googleapis.com Real-time Bidding API recaptchaenterprise.googleapis.com reCAPTCHA Enterprise API recommendationengine.googleapis.com Recommendations AI (Beta) recommender.googleapis.com Recommender API redis.googleapis.com Google Cloud Memorystore for Redis API remotebuildexecution.googleapis.com Remote Build Execution API replicapool.googleapis.com Compute Engine Instance Group Manager API replicapoolupdater.googleapis.com Compute Engine Instance Group Updater API reputation-for-gcp.endpoints.reputation-public.cloud.goog Reputation reseller.googleapis.com Google Workspace Reseller API resolve-studio-17.endpoints.blackmagicdesign-public.cloud.goog Resolve Studio 17 resourcesettings.googleapis.com Resource Settings API resourceviews.googleapis.com Compute Engine Instance Groups API retail.googleapis.com Retail API risc.googleapis.com RISC API roads.googleapis.com Roads API run.googleapis.com Cloud Run Admin API runtimeconfig.googleapis.com Cloud Runtime Configuration API safebrowsing-json.googleapis.com Safe Browsing API (Legacy) safebrowsing.googleapis.com Safe Browsing API sasportal.googleapis.com SAS Portal API schedmd-slurm-gcp.endpoints.schedmd-slurm-public.cloud.goog schedmd-slurm-gcp script.googleapis.com Apps Script API sd-wan-paloaltonetworks-public.cloudpartnerservices.goog Palo Alto Networks, Inc. sd-wan Reporting Service searchconsole.googleapis.com Google Search Console API secretmanager.googleapis.com Secret Manager API securedlandingzone.googleapis.com Secured Landing Zone API securetoken.googleapis.com Token Service API securitycenter.googleapis.com Security Command Center API seismicgcpmarketplace.endpoints.seismic-marketplace-id-public.cloud.goog Seismic Sales Enablement Platform semarchy-xdm-quick-start-vm.endpoints.semarchy-xdm-public.cloud.goog Semarchy xDM - Quick Start VM serviceconsumermanagement.googleapis.com Service Consumer Management API servicecontrol.googleapis.com Service Control API servicedirectory.googleapis.com Service Directory API servicemanagement.googleapis.com Service Management API servicenetworking.googleapis.com Service Networking API serviceusage.googleapis.com Service Usage API sheets.googleapis.com Google Sheets API shoppingcontent.googleapis.com Content API for Shopping simvm.endpoints.simvm-prod.cloud.goog SimVM siteverification.googleapis.com Site Verification API slides.googleapis.com Google Slides API slower-first-barrier-gcp.endpoints.slower-public.cloud.goog Slower: First Barrier smartdevicemanagement.googleapis.com Smart Device Management API smbstorefront.googleapis.com SMB Storefront API soundcommerce.endpoints.soundcommerce-partner-public.cloud.goog SoundCommerce sourcerepo.googleapis.com Cloud Source Repositories API spanner.googleapis.com Cloud Spanner API speech.googleapis.com Cloud Speech-to-Text API splunk-cloud-gcp-marketplace-lve-1.cloudpartnerservices.goog Splunk Cloud Reporting Service sql-component.googleapis.com Cloud SQL sqladmin.googleapis.com Cloud SQL Admin API stackdriver.googleapis.com Stackdriver API static-maps-backend.googleapis.com Maps Static API storage-api.googleapis.com Google Cloud Storage JSON API storage-component.googleapis.com Cloud Storage storage.googleapis.com Cloud Storage API storagetransfer.googleapis.com Storage Transfer API street-view-image-backend.googleapis.com Street View Static API streetviewpublish.googleapis.com Street View Publish API sts.googleapis.com Security Token Service API subscribewithgoogle.googleapis.com Subscribe with Google Publication API subscribewithgoogledeveloper.googleapis.com Subscribe with Google Developer API surveys.googleapis.com Google Surveys API sysdig-secure-devops-platform.endpoints.sysdig-public.cloud.goog Sysdig Secure DevOps Platform tagmanager.googleapis.com Tag Manager API tamr-gcp.endpoints.tamr-public.cloud.goog Tamr tapclicks.endpoints.tc-gcp-marketplace-public.cloud.goog TapClicks tasks.googleapis.com Tasks API ternary-for-gcp.endpoints.ternary-marketplace-public.cloud.goog Ternary testing.googleapis.com Cloud Testing API texttospeech.googleapis.com Cloud Text-to-Speech API thiago-vm-for-migration-partnerdemotest.cloudpartnerservices.goog Partner Demo Test thiago-vm-for-migration tigergraph-cloud-saas.endpoints.tigergraph-public.cloud.goog TigerGraph Cloud timezone-backend.googleapis.com Time Zone API toolresults.googleapis.com Cloud Tool Results API tpu.googleapis.com Cloud TPU API trafficdirector.googleapis.com Traffic Director API transcoder.googleapis.com Transcoder API translate.googleapis.com Cloud Translation API travelpartner.googleapis.com Travel Partner API unbxd-search-browse-and-recommendations.endpoints.unbxd-marketplace-public.cloud.goog Unbxd Search, Browse and Recommendations usercontext.googleapis.com Awareness API vault.googleapis.com G Suite Vault API vectortile.googleapis.com Semantic Tile API verifiedaccess.googleapis.com Chrome Verified Access API videointelligence.googleapis.com Cloud Video Intelligence API vision.googleapis.com Cloud Vision API vm-series-byol-ela-private-offer1-paloaltonetworks-public.cloudpartnerservices.goog Palo Alto Networks, Inc. VM-Series Next-Generation Firewall BYOL ELA Reporting Service vmmigration.googleapis.com VM Migration API vmwareengine.googleapis.com VMware Engine API vpcaccess.googleapis.com Serverless VPC Access API walletobjects.googleapis.com Google Pay Passes APIwebfonts.googleapis.com Web Fonts Developer API webrisk.googleapis.com Web Risk APIwebsecurityscanner.googleapis.com Web Security Scanner API workflowexecutions.googleapis.com Workflow Executions API workflows.googleapis.com Workflows API workspan-co-sell-partners.endpoints.workspan-public.cloud.goog WorkSpan Co-Sell with Partners xsoar-paloaltonetworks-public.cloudpartnerservices.goog Palo Alto Networks, Inc. xsoar Reporting Service youtube.googleapis.com YouTube Data API v3 youtubeanalytics.googleapis.com YouTube Analytics API youtubeoembed.googleapis.com YouTube oEmbed API youtubereporting.googleapis.com YouTube Reporting API yugabyte-cloud-gcp.endpoints.yugabyte-mp-public.cloud.goog Yugabyte Cloud
その結果、
sheets.googleapis.com Google Sheets API
⇧ 表示された結果の中に、「Sheets API(Google Sheets API)」が含まれていたので「Sheets API(Google Sheets API)」は、「Google Cloud API」ってことになるんかな?
で、「Sheets API(Google Sheets API)」は、「Google Spreadsheets」を操作するもので、「Google Spreadsheets」ってのは「Google Drive」で扱ってるデータだと思われるので、
In the context of authentication and authorization, data type refers to the entity that owns the data that your app is trying to access. There are three data types:
- Public domain data
- Data accessible by anyone, such as some Google maps data. This data is usually accessed using an API key.
- End-user data
- Data belonging to a specific end user or group, such as a specific user's Google Drive files. This data type is usually accessed using an OAuth 2 client ID or service account.
- Cloud data
- Data owned by a cloud project. This data type is usually accessed by a service account.
https://developers.google.com/workspace/guides/auth-overview?hl=ja
⇧ 「End-user data」に該当すると思われるので、
⇧ さらに「Google Cloud 環境外」から「Sheets API(Google Sheets API)」を呼び出すケースだと、
End-user data = 限定公開データ
という前提が正しいとした仮定が矛盾しない場合、
- OAuth 2.0 クライアント
の「認証情報(Credential)」を作成する感じになるんかな?
一応、「Quickstart」の手順で「認証情報(Credential)」については、
Credentials are used to obtain an access token from a Google authorization server. This token is used to call Google Workspace APIs. The type of credentials you use depends on the type of data your app accesses. All Google Workspace APIs access data owned by an end-user. You can use either an OAuth client ID or a service account with domain delegation of authority to access user data.
https://developers.google.com/workspace/guides/create-credentials
⇧ ってな感じで、「All Google Workspace APIs access data owned by an end-user」なので「OAuth client ID」または「service account」のどっちかを使えって言っておりますな。
ただ、
Google Cloud APIs では、ユーザー アカウントとサービス アカウントの認証の両方に、OAuth 2.0 プロトコルが使用されます。OAuth 2.0 を使用した認証プロセスにより、プリンシパルとアプリケーションの両方を識別します。
https://cloud.google.com/docs/authentication?hl=ja&_ga=2.200116134.-988189258.1629356381
⇧「サービスアカウント」の認証には「OAuth 2.0 プロトコル」が使われるらしい。
「OAuth 2.0」のドキュメントによると、
openid-foundation-japan.github.io
3.2.1. クライアント認証
クライアントは, トークンエンドポイントへのリクエスト時に自身を識別するために, client_id パラメーターを用いてもよい (MAY). トークンエンドポイントへのリクエスト時に authorization_code grant_type を指定する場合, 認証を行わないクライアントは, リクエストに client_id を含み, 異なる client_id に対して発行されたコードを不用意に受け入れてしまうことを防がなければならない (MUST). これはクライアントに対する認可コード置換攻撃への対策となる (保護リソースに対してのセキュリティ対策は提供していない).
https://openid-foundation-japan.github.io/rfc6749.ja.html#token-endpoint-auth
⇧ おそらく、「client_id パラメーター」ってのが、「Google Cloud API」の「認証情報(Credential)」の1つ「OAuth client ID」に該当するんじゃないかと。
脱線しましたが、今回は、「OAuth client ID」を試してみます。
「GCP(Google Cloud Platform)」の管理画面の を押下して、サイドバーのメニューが表示されたら、「APIとサービス」>「認証情報」を選択。
■「OAuth 同期画面」の設定
「同期画面を設定」を選択。
ラジオボタンは「外部」しか選択できないっぽい。「作成」を押下で。
とりあえず、「*」マークが付いてる項目は入力が必須っぽいけど、それ以外は入力しなくても問題はないらしい。「保存して次へ」を押下。
ここは特に何も追加してません。「保存して次へ」を押下。
ここも特に何も追加してません。「保存して次へ」を押下。
「OAuth 同意画面」の設定が完了します。(編集でいつでも内容を修正できるっぽいですね)
■「認証情報(Credential)」の作成
「GCP(Google Cloud Platform)」の管理画面のサイドバーで「APIとサービス」>「認証情報」を選択し、「+認証情報の作成」を押下。
「OAuth クライアントID」を選択で。
「アプリケーションの種類 *」で「ウェブ アプリケーション」を選択。
「承認済みのリダイレクトURI」に適当な「URI」を入力しといた方が良いらしい。
⇧ 上記サイト様を参考に、「http://localhost」を設定しときます。「保存」を押下。
(なんか、「Quickstart」のサンプルを試す場合、「リダイレクトURI」が決められてるらしいのかどうかは分からんのだけど、「http://localhost」だと動かなかった...後述で動いた「リダイレクトURI」記載してます)
「OK」を押下。
作成された「認証情報(Credential)」のファイルをローカル環境にダウンロードしておきます。
■JavaでGradleプロジェクトを作成
ここからは、ローカル環境での話。
Eclipseを起動して、「Gradleプロジェクト」を作成で。「ファイル(F)」>「新規(N)」で「Gradle プロジェクト」が表示されない場合は、「その他(O)...」から探しましょう。
「プロジェクト名」を入力して、「次へ(N)」を押下。
特に何も変更せず、「完了(F)」を押下。
「Gradle プロジェクト」が作成されました。
「GCP(Google Cloud Platform)」の管理画面の「APIとサービス」>「認証情報」のページからダウンロードしておいた「認証情報(Credential)」のファイルを、「src/main/resources」に配置します。
「認証情報(Credential)」ファイルの名前を変更しときます。
「credentials.json」にして「OK」を押下。
続いて、「build.gradle」を編集。
apply plugin: 'java' apply plugin: 'application' mainClassName = 'SheetsQuickstart.SheetsQuickstart' sourceCompatibility = 1.8 targetCompatibility = 1.8 version = '1.0' repositories { mavenCentral() } dependencies { compile 'com.google.api-client:google-api-client:1.30.4' compile 'com.google.oauth-client:google-oauth-client-jetty:1.30.6' compile 'com.google.apis:google-api-services-sheets:v4-rev581-1.25.0' // Use JUnit test framework testImplementation 'junit:junit:4.12' }
⇧ って感じで保存。Eclipseで「Gradle プロジェクト」を作成すると、「src/test/java」に「JUnit」を利用した単体テスト用のサンプルのクラスが作成されるので、「依存関係」として「JUnit」は残したままにしてます。
あと、「mainClassName」は、「パッケージ名」も含める必要があるので要注意ですかね。
そしたらば、 「build.gradle」で「mainClassName」に指定した名前で、Javaのクラスファイルを作成。
「名前(M):」に、「build.gradle」で「mainClassName」に指定した名前を入力して、「完了(F)」で。
で、「SheetsQuickstart.java」の内容は、以下のような感じ。
package SheetsQuickstart; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.security.GeneralSecurityException; import java.util.Collections; import java.util.List; import java.util.Arrays; import com.google.api.client.auth.oauth2.Credential; import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp; import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver; import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow; import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.javanet.NetHttpTransport; import com.google.api.client.json.JsonFactory; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.client.util.store.FileDataStoreFactory; import com.google.api.services.sheets.v4.Sheets; import com.google.api.services.sheets.v4.SheetsScopes; import com.google.api.services.sheets.v4.model.ValueRange; public class SheetsQuickstart { private static final String APPLICATION_NAME = "Google Sheets API Java Quickstart"; private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance(); private static final String TOKENS_DIRECTORY_PATH = "tokens"; /** * Global instance of the scopes required by this quickstart. * If modifying these scopes, delete your previously saved tokens/ folder. */ private static final List<String> SCOPES = Collections.singletonList(SheetsScopes.SPREADSHEETS); //private static final List<String> SCOPES = Arrays.asList(SheetsScopes.SPREADSHEETS,SheetsScopes.DRIVE); private static final String CREDENTIALS_FILE_PATH = "/credentials.json"; /** * Creates an authorized Credential object. * @param HTTP_TRANSPORT The network HTTP Transport. * @return An authorized Credential object. * @throws IOException If the credentials.json file cannot be found. */ private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException { // Load client secrets. InputStream in = SheetsQuickstart.class.getResourceAsStream(CREDENTIALS_FILE_PATH); if (in == null) { throw new FileNotFoundException("Resource not found: " + CREDENTIALS_FILE_PATH); } GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in)); // Build flow and trigger user authorization request. GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder( HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES) .setDataStoreFactory(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH))) .setAccessType("offline") .build(); LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build(); return new AuthorizationCodeInstalledApp(flow, receiver).authorize("user"); } /** * Prints the names and majors of students in a sample spreadsheet: * https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/edit */ public static void main(String[] args) throws IOException, GeneralSecurityException { // Build a new authorized API client service. final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); final String spreadsheetId = "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"; final String range = "Class Data!A2:E"; Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT)) .setApplicationName(APPLICATION_NAME) .build(); ValueRange response = service.spreadsheets().values() .get(spreadsheetId, range) .execute(); List<List<Object>> values = response.getValues(); if (values == null || values.isEmpty()) { System.out.println("No data found."); } else { System.out.println("Name, Major"); for (List row : values) { // Print columns A and E, which correspond to indices 0 and 4. System.out.printf("%s, %s\n", row.get(0), row.get(4)); } } } }
とりあえず、実行してみる。
「ファイアウォール」さん出てきたら、「アクセスを許可する(A)」を押下。
で、はい、エラー。
『「GCP(Google Cloud Platform)」で「リダイレクト URI」を登録してくれ』ってことらしいけど、「リダイレクト URI」として「http://localhost」って登録したんだけどな...
なるほど、もしかしてだけど~、Eclipseから実行するのが駄目なんかね?
じゃあ、コマンドプロンプトで実行で。
⇧ エラー出るやん...
stackoverflowで同様のエラー出てる方がおられましたな。
If anybody else comes across this - the way I fixed this up (after following Google Sheets quickstart https://developers.google.com/sheets/api/quickstart/java - and losing half a day) - was to not use the latest version of Gradle.
Using version 6.3 works (using NetBeans and the Tools > options > Java > Gradle > Use standard gradle version.
⇧ まさかの、最新のGradleを使ってくれるな、って仰っておられるんですが...
⇧ ドキュメントには、そんなこと一言も書いてないんだけど...
天下のGoogleさんが適当過ぎるってことなのか?
ちなみに、「GCP(Google Cloud Platform)」側の「APIとサービス」>「認証情報」で「OAuth 2.0 client ID」を編集して、「リダイレクト URI」を
http://localhost:8888/Callback/
ってのに変更して、再度「認証情報(Credential)」ファイルをダウンロードして「credentials.json」にリネームして「src/main/resources」に配置したら、「エラー 400: redirect_uri_mismatch」は解消されました。
で、「Gradle 6.3」とかで実施してみるも、
⇧ ブラウザで認証画面が開かれて、「Googleアカウント」を選択するも、今度は、「403 access_denied」とか別のエラーが出てきたんですよ...
Quickstartって一体...
解決法を探してたら、YouTubeの情報に辿り着く、時代はYouTubeか~
⇧ 神動画に救われました、感謝しかない、異国の地におられる麗しきお姉様たちにありがとう。
「GCP(Google Cloud Platform)」のサイドバーから「APIとサービス」>「OAUth 同意画面」 で、「公開ステータス」が「テスト」になってる場合は、「テストユーザー」を追加しないと駄目らしい。
⇧「公開ステータス」が「テスト中」の場合、テストユーザーのみアプリにアクセスできるとかいう制約を付けてるのが謎過ぎるんだが...
とりあえず、普段「Gmail」とかで利用している「Googleアカウント」を追加しました。
で、改めて試してみたところ、無事実行されたようです。
ちなみに、「Quickstart」で利用されてる「Google Sheets(Google Spreadsheets)」は、以下のようにGoogleの中の人が事前に用意してるものってことなんかな?
「Java Quickstart」にあるサンプルのソースコードのコメントで、
/** * Prints the names and majors of students in a sample spreadsheet: * https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/edit */
⇧ ってなっていて、リンクにアクセスすると、「Example Spreadsheet」が確認できます。
なので、既存の作成済みの「Google Sheets(Google Spreadsheets)」を利用してるパターンってことみたいね。
ドキュメントによると、
Spreadsheet
The primary object in Google Sheets that can contain multiple sheets, each with structured information contained in cells. Every spreadsheet is represented by a Spreadsheet resource and has a unique spreadsheetId
value, containing letters, numbers, hyphens, or underscores. You can find the spreadsheet ID in a Google Sheets URL:
https://docs.google.com/spreadsheets/d/spreadsheetId/edit#gid=0
Sheet
A page or tab within a spreadsheet. Each sheet is represented by a Sheet resource and has a unique title and numeric sheetId
value. You can find the sheet ID in a Google Sheets URL:
https://docs.google.com/spreadsheets/d/aBC-123_xYz/edit#gid=sheetId
⇧ 見た感じ、「SpreadSheet」が「Microsoft Excel」で言うところの「ブック」で、「Sheet」が「シート」みたいな感じなんかな?
まぁ、何が言いたいかというと、「Google Sheets(Google Spreadsheets)」を操作するには、「spreadsheetId」が必要になってくるってことなんですかね?
というわけで、「Quickstart」って言ってるのに、全然クイックスタートできるようなドキュメントになってなかったわけよ...
Googleさん、もうちょいドキュメント何とかならんかね...
今回はこのへんで。