Я настроил небольшой скрипт для экспорта первой вкладки Google Sheet как csv через Google Drive API.Я могу выполнить скрипт один раз, и он работает.Во время этого выполнения мне предоставляется URL-адрес, который позволяет мне проходить аутентификацию в Интернете и дает мне код.Этот код хранится в файле token.yaml.Затем сценарий успешно экспортирует мой лист.
При повторном выполнении сценария появляется сообщение об ошибке
dailyLimitExceededUnreg: Daily Limit for Unauthenticated Use Exceeded.
Continued use requires signup. (Google::Apis::ClientError)
При удалении файла token.yaml, который был создан во время моего первого(успешная) попытка, я могу выполнить скрипт снова, в т.ч.аутентификация как описано выше.Когда я выполняю сценарий в другой раз, я возвращаюсь к ошибке.
require 'google/apis/drive_v3'
require 'googleauth'
require 'googleauth/stores/file_token_store'
require 'fileutils'
OOB_URI = 'urn:ietf:wg:oauth:2.0:oob'.freeze
APPLICATION_NAME = 'Maker'.freeze
CREDENTIALS_PATH = 'credentials.json'.freeze
FILE_ID = '<my-file-id>'
# The file token.yaml stores the user's access and refresh tokens, and is
# created automatically when the authorization flow completes for the first
# time.
#
# copied from https://developers.google.com/drive/api/v3/quickstart/ruby
TOKEN_PATH = 'token.yaml'.freeze
SCOPE = Google::Apis::DriveV3::AUTH_DRIVE
##
# Ensure valid credentials, either by restoring from the saved credentials
# files or initiating an OAuth2 authorization. If authorization is required,
# the user's default browser will be launched to approve the request.
#
# @return [Google::Auth::UserRefreshCredentials] OAuth2 credentials
#
# copied from https://developers.google.com/drive/api/v3/quickstart/ruby
def authorize
client_id = Google::Auth::ClientId.from_file CREDENTIALS_PATH
token_store = Google::Auth::Stores::FileTokenStore.new file: TOKEN_PATH
authorizer = Google::Auth::UserAuthorizer.new client_id, SCOPE, token_store
user_id = 'default'
credentials = authorizer.get_credentials user_id
create_credentials(authorizer, user_id) if credentials.nil?
end
def create_credentials(authorizer, user_id)
url = authorizer.get_authorization_url base_url: OOB_URI
puts 'Open the following URL in the browser and enter the ' \
"resulting code after authorization:\n" + url
code = STDIN.gets
authorizer.get_and_store_credentials_from_code user_id: user_id,
code: code,
base_url: OOB_URI
end
# copied from https://developers.google.com/drive/api/v3/about-auth
def download_csv
service = Google::Apis::DriveV3::DriveService.new
service.client_options.application_name = APPLICATION_NAME
service.authorization = authorize
service.export_file(FILE_ID, 'text/csv') #only downloading first sheet
end
puts download_csv