Es zeichnet eine Reihe von Schritten zum Speichern von Protokolldaten auf, z. B. Benutzeraktivitäten, die täglich gesammelt werden, oder Benutzerregistrierungsdaten (CSV) auf Google Drive in Form einer Google-Tabelle. Mit diesem Memo können Sie Folgendes tun.
Und so weiter gibt es nur ehrliche Verdienste. Das Ziel dieses Memos sind "Personen, die wissen möchten, wie die Arbeit in kürzester Zeit automatisiert werden kann" und "Personen, die versucht haben, die Google-API zu verwenden, aber nur von unfreundlicher englischer Literatur frustriert sind". Nach dem Lesen streben wir einen Zustand an, in dem solche Personen ** "irgendwie verstehen, wie man die Google-API verwendet" **.
_ ** * Im Folgenden wird die Diskussion unter der Annahme fortgesetzt, dass eine Umgebung erstellt wurde, die Ruby oder Python verwenden kann. ** _
OS
Zunächst müssen Sie sich registrieren, um die Google-API verwenden zu können. Bitte gemäß folgendem Ablauf ausführen.
.gitignore
und achten Sie darauf, den API-Schlüssel nicht einzuschließenRuby
$ gem install google-api-client
Python
$ pip install --upgrade google-api-python-client
Erstellen Sie das folgende Skript in einem beliebigen Verzeichnis. Beachten Sie außerdem, dass die von der Ruby-Version und der Python-Version unten ausgeführten Aufgaben nicht zu 100% identisch sind.
Ruby: uploader.rb
require 'google/apis/drive_v3'
require 'googleauth'
require 'googleauth/stores/file_token_store'
require 'fileutils'
credentials_dir = File.join(Dir.home, '.credentials')
CLIENT_SECRETS_PATH = File.join(credentials_dir, 'client_secret.json')
CREDENTIALS_PATH = File.join(credentials_dir, 'sampleApp.yaml')
OOB_URI = 'urn:ietf:wg:oauth:2.0:oob'
APPLICATION_NAME = 'sampleApp'
SCOPE = Google::Apis::DriveV3::AUTH_DRIVE
class DriveUploader
#Definieren Sie den Pfad zu dem Ordner, der die CSV-Datei enthält, die Sie hochladen möchten
FILE_DIR = 'out/'
#Definieren Sie die ID des Ordners in Google Drive, in dem Sie die Datei speichern möchten
#Details sind unten zusammengefasst
FOLDER_ID = '<Your Folder ID>'
MASTER_FILE_ID = '<Your Master FIle ID>'
MASTER_FOLDER_ID = '<Your Master Folder ID>'
def initialize
#API-Instanz generieren
@@drive = Google::Apis::DriveV3
@@service = @@drive::DriveService.new
@@service.client_options.application_name = APPLICATION_NAME
@@service.authorization = authorize
end
def authorize
FileUtils.mkdir_p(File.dirname(CREDENTIALS_PATH))
client_id = Google::Auth::ClientId.from_file(CLIENT_SECRETS_PATH)
token_store = Google::Auth::Stores::FileTokenStore.new(file: CREDENTIALS_PATH)
authorizer = Google::Auth::UserAuthorizer.new(client_id, SCOPE, token_store)
user_id = 'default'
credentials = authorizer.get_credentials(user_id)
if credentials.nil?
url = authorizer.get_authorization_url(base_url: OOB_URI)
puts "Open the following URL in the browser and enter the " +
"resulting code after authorization"
puts url
code = gets
credentials = authorizer.get_and_store_credentials_from_code(user_id: user_id, code: code, base_url: OOB_URI)
end
credentials
end
def upload_csvs
##
#Methode zum tatsächlichen Hochladen einer Datei
#Im angegebenen Ordner"~~.csv"Laden Sie alle genannten Dateien hoch
#Suchen Sie die hochzuladende Datei
file_path = File.join(FILE_DIR, '*.csv')
files = Dir.glob(file_path)
abort('No files to upload.') if files.empty?
#Wiederholen Sie die Upload-Aufgabe für alle zutreffenden Dateien
counter = 0
files.each.with_index(1) do |a_file, i|
#Benennen Sie die Datei"MMDD_FileName"In das Format konvertieren
file_name = Date.today.strftime('%m%d') + a_file.gsub(/out\/\d{4}-\d{2}-\d{2}/,'').gsub('.csv','')
puts "\nUploading[#{i}/#{files.count}]: #{file_name}"
#Definieren Sie, wo hochgeladen werden soll
file_metadata = @@drive::File.new(
name: file_name,
mime_type: 'application/vnd.google-apps.spreadsheet',
parents: [FOLDER_ID]
)
#Laden Sie die konvertierte Datei in den angegebenen Ordner auf Goodle Drive hoch
file = @@service.create_file(file_metadata, upload_source: a_file, content_type: 'text/csv', fields: 'id')
file_id = file.id
puts "Successfully uploaded as:\nhttps://docs.google.com/spreadsheets/d/#{file_id}\n"
counter += 1
end
#Ausgabeergebnis
puts "\n\nTotal: #{counter.to_s} Files Uploaded\n"
end
def copy_master
##
#Kopieren Sie die Masterdatei, z. B. tägliche Berichte, die Sie gleichzeitig mit dem Hochladen auf Google Drive kopieren möchten
#Die Masterdatei ist bereits zu Beginn als Konstante definiert
master_file_metadata = @@drive::File.new(
name: "#{Date.today.strftime('%m%d')}_Dashboard",
parents: [MASTER_FOLDER_ID]
)
master_file = @@service.copy_file(MASTER_FILE_ID, master_file_metadata)
puts "\nSuccessfully created as: #{master_file.name}\nhttps://docs.google.com/spreadsheets/d/#{master_file.id}"
end
end
#Dieses Skript vom Terminal[./uploader.rb]Beschreibung, die mit dem Befehl ausgeführt werden soll
if __FILE__ == $0
puts "Start uploading reports to Drive..."
DriveUploader.new.upload_csvs
puts "Copying master file in Drive..."
DriveUploader.new.copy_master
end
Python: uploader.py
import httplib2
import os
import sys
import time
import glob
from apiclient import discovery
import oauth2client
from oauth2client import client
from oauth2client import tools
from apiclient.http import MediaFileUpload
CREDENTIAL_DIR = os.path.join(os.path.expanduser('~'), '.credentials')
CLIENT_SECRET_FILE = os.path.join(CREDENTIAL_DIR, 'client_secret.json')
CREDENTIAL_PATH = os.path.join(CREDENTIAL_DIR, 'piwikReport.json')
APPLICATION_NAME = 'piwikReport'
SCOPES = 'https://www.googleapis.com/auth/drive'
#Definieren Sie den Pfad zu dem Ordner, in dem die CSV-Datei gespeichert ist, die Sie hochladen möchten
FILE_DIR = 'out/'
#Definieren Sie die ID des Ordners in Google Drive, in dem Sie die Datei speichern möchten
#Details sind unten zusammengefasst
FOLDER_ID = '<Your Folder ID>'
MASTER_FILE_ID = '<Your Master FIle ID>'
MASTER_FOLDER_ID = '<Your Master Folder ID>'
class DriveUploader(object):
def __init__(self):
"""
Authentifizieren Sie sich mit Anmeldeinformationen, die Sie bereits heruntergeladen und gespeichert haben
"""
self.credentials = self.get_credentials()
self.http = self.credentials.authorize(httplib2.Http())
self.service = discovery.build('drive', 'v3', http=self.http)
def get_credentials(self):
"""
Überprüfen Sie, ob die API-Authentifizierung bereits abgeschlossen wurde
"""
if not os.path.exists(CREDENTIAL_DIR):
os.makedirs(CREDENTIAL_DIR)
store = oauth2client.file.Storage(CREDENTIAL_PATH)
credentials = store.get()
if not credentials or credentials.invalid:
flags = tools.argparser.parse_args(args=[])
flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
flow.user_agent = APPLICATION_NAME
if flags:
credentials = tools.run_flow(flow, store, flags)
else:
# Python2.Beschreibung für Benutzer, die 6 verwenden
credentials = tools.run(flow, store)
print('Storing credentials to' + CREDENTIAL_PATH)
return credentials
def upload_csvs(self):
"""
Methode zum tatsächlichen Hochladen einer Datei
Im angegebenen Ordner"~~.csv"Laden Sie alle genannten Dateien hoch
"""
#Suchen Sie nach Dateien zum Hochladen
file_path = os.path.join(FILE_DIR, '*.csv')
files = glob.glob(file_path)
if not files:
print('No files to upload.')
sys.exit()
#Wiederholen Sie den Vorgang des Umbenennens und Hochladens aller zutreffenden Dateien
counter = 1
for a_file in files:
#Benennen Sie die Datei"MMDD_FileName"In das Format konvertieren
file_name = time.strftime('%m%d') + a_file.replace('out/','_').replace('.csv','')
print('>>>\nUploading[' + str(counter) + '/' + str(len(files)) + ']: ' + file_name)
#Bestätigen Sie das Upload-Ziel
file_metadata = {
'name' : file_name,
'mimeType' : 'application/vnd.google-apps.spreadsheet',
'parents' : [FOLDER_ID]
}
#Laden Sie CSV-Daten, die in das Tabellenkalkulationsformat konvertiert wurden, in den bereits definierten Google Drive-Ordner hoch
media = MediaFileUpload(a_file, mimetype='text/csv', resumable=True)
file = self.service.files().create(body=file_metadata, media_body=media, fields='id').execute()
file_id = file.get('id')
print('Successfully uploaded as:\nhttps://docs.google.com/spreadsheets/d/' + file_id)
counter += 1
#Ausgabeergebnis
print('--------------\nTotal: '+ str(counter - 1) + ' Files Uploaded')
def copy_master(self):
"""
Kopieren Sie die Masterdatei, z. B. tägliche Berichte, die Sie gleichzeitig mit dem Hochladen auf Google Drive kopieren möchten
Die Masterdatei ist bereits zu Beginn als Konstante definiert
"""
master_file_metadata = {
'name' : (time.strftime('%m%d') + '_PiwikReport'),
'parents' : [MASTER_FOLDER_ID]
}
master_file = self.service.files().copy(fileId=MASTER_FILE_ID, body=master_file_metadata, fields='id, name').execute()
print('Successfully created as: ' + master_file.get('name') + '\nhttps://docs.google.com/spreadsheets/d/' + master_file.get('id'))
#Dieses Skript vom Terminal[python3 uploader.py]Beschreibung, die mit dem Befehl ausgeführt werden soll
if __name__ == "__main__":
DriveUploader().copy_master()
Als nächstes werde ich die Konstanten im Code erklären.
CREDENTIAL_DIR
--Pfad zum lokalen Ordner, in dem die heruntergeladenen Anmeldeinformationen gespeichert sindCLIENT_SECRETS_PATH
CREDENTIALS_PATH
OOB_URI
APPLICATION_NAME
SCOPE
FILE_DIR
FOLDER_ID
--ID des Ordners, in den Sie CSV-Daten im Tabellenformat hochladen möchten
--ID ist eine Liste alphanumerischer Zeichen am Ende der URL des Ordners.MASTER_FILE_ID
MASTER_FOLDER_ID
--ID des Ordners, den Sie nach dem Kopieren der Masterdatei behalten möchten, z. B. Tagesbericht
--ID ist eine Liste alphanumerischer Zeichen am Ende der URL des Ordners.Stellen Sie sicher, dass Sie sich im selben Verzeichnis wie das obige Skript befinden, und führen Sie dann den folgenden Befehl aus.
Ruby
$ ruby uploader.rb
oder $. / uploader.rb
Python
$ python3 uploader.py
Beim ersten Mal wird möglicherweise ein Bildschirm wie "Möchten Sie sich authentifizieren?" Angezeigt, aber Sie können alle zulassen. Wenn Sie sich wirklich dafür interessieren, können Sie es später in den Einstellungen jederzeit ändern. Löschen Sie außerdem die lokale CSV-Datei, sobald der Upload abgeschlossen ist.
das ist alles. Dieses Memo war der schnellste Strategie-Artikel, der an diejenigen gesendet wurde, die sich für Arbeitsautomatisierung und Cloud-Konvertierung mithilfe der Google-API einsetzen. Erstens war ich gezwungen, dies zu tun, als ich ein Benutzerdatenanalyst in Übersee war, und ich hatte die Erfahrung, dies zu tun, während ich vor englischen und unfreundlichen Dokumenten ein Held wurde. Wenn Sie gut Englisch können, können Sie die unten aufgeführten Referenzseiten besuchen. Ich hoffe, dass viele der Menschen, die gezwungen sind, ineffiziente und unproduktive Arbeit in der Welt zu leisten, durch diesen Artikel glücklich sein werden.
Ruby
Python
Recommended Posts