Ich habe versucht, die Google-API mit Ruby und Python zu erreichen. Machen Sie die Datenbank zu einer Tabelle und verwalten Sie sie mit Google Drive

Einführung

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. ** _

Entwicklungsumgebung

Verwendete Sprache

OS

Vorbereitungen

Zunächst müssen Sie sich registrieren, um die Google-API verwenden zu können. Bitte gemäß folgendem Ablauf ausführen.

  1. Gehen Sie zu ** Google Developer Console ** https://console.developers.google.com/start/api?id=drive
  2. Wählen Sie ** "Projekt erstellen" ** und fahren Sie fort, bis ** Dashboard ** angezeigt wird
  3. Wählen Sie nach dem Erstellen des Projekts ** "Anmeldeinformationen erstellen" ** auf der Registerkarte ** Anmeldeinformationen ** und ** "OAuth-Client-ID" ** aus.
  4. Wählen Sie ** "Andere" ** aus den Optionen, geben Sie einen geeigneten Namen für den Namen ein und klicken Sie im nächsten Bildschirm auf "OK".
  5. Laden Sie die Anmeldeinformationen als JSON herunter und speichern Sie sie als "client_secret.json" unter "~ / .credential /"
  6. Wenn Sie Git verwenden, bearbeiten Sie .gitignore und achten Sie darauf, den API-Schlüssel nicht einzuschließen

Bibliotheksinstallation

Ruby $ gem install google-api-client

Python $ pip install --upgrade google-api-python-client

Ein Skript erstellen

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.

Skript ausführen

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.

Zusammenfassung

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.



Referenzlinkliste:

Recommended Posts

Ich habe versucht, die Google-API mit Ruby und Python zu erreichen. Machen Sie die Datenbank zu einer Tabelle und verwalten Sie sie mit Google Drive
Ich habe versucht, die API mit dem Python-Client von echonest zu erreichen
Ich habe versucht, die Mastodon-API mit Ruby (Faraday) / Python (Pycurl) / PHP (Curl) zu erreichen.
Ich habe einen Musik-Bot mit discord.py und der Google Drive-API erstellt (getestet mit Docker → bereitgestellt für Heroku).
Ich habe versucht, die Qiita-API von Anfang an zu aktivieren
Ich habe "License OCR" mit der Google Vision API ausprobiert
Ich habe versucht, die Google Cloud Vision-API zu verwenden
Ich habe "Receipt OCR" mit der Google Vision API ausprobiert
Ich habe versucht, die Datenbank (sqlite3) mit kivy zu verwenden
Ich habe versucht, eine einfache Bilderkennungs-API mit Fast API und Tensorflow zu erstellen
Ich habe versucht, das Update von "Werde ein Romanautor" mit "IFTTT" und "Werde ein Romanautor API" zu benachrichtigen.
Erstellen Sie eine Tweet-Heatmap mit der Google Maps-API
Bildverarbeitung mit Python (ich habe versucht, es in 0 und 1 Mosaikkunst zu binarisieren)
Hochladen auf ein freigegebenes Laufwerk mit Google Drive API V3
Ich habe versucht, zum Zeitpunkt der Bereitstellung mit Fabric und ChatWork Api automatisch in ChatWork zu posten
Ich habe einen Server mit Python-Socket und SSL erstellt und versucht, über den Browser darauf zuzugreifen
Ich habe auch versucht, die Funktionsmonade und die Zustandsmonade mit dem Generator in Python nachzuahmen
Versuchen Sie, mit Python schnell und einfach auf die Twitter-API zuzugreifen
Ein Hinweis zum Aufrufen der Facebook-API mit dem Python SDK
Ich habe versucht, die Python-Bibliothek von Ruby mit PyCall zu verwenden
Ich habe versucht, mich mit Spring Boot + Spring Security REST API anzumelden
Ich habe versucht, Raspeye und conect + mit der Web-API zu verbinden
Ich habe versucht, Follow Management mit Twitter API und Python (einfach)
Ich habe versucht, die Windows 10-Festplatte durch eine kleinere SSD zu ersetzen
Ich habe versucht, den DRF-API-Anforderungsverlauf mit django-request zu speichern
Ich habe die Google Cloud Vision-API zum ersten Mal ausprobiert
Die Geschichte des Erstellens einer Datenbank mithilfe der Google Analytics-API
Ich habe die Geschwindigkeit von Hash mit Topaz, Ruby und Python verglichen
Ein Memorandum beim automatischen Erwerb mit Selen
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Ich habe versucht, Bulls and Cows mit einem Shell-Programm zu erstellen
Ich habe einen Chat-Chat-Bot mit Tensor2Tensor erstellt und diesmal hat es funktioniert
Ich habe versucht, die Docomo-Spracherkennungs-API und die Google Speech-API in Java zu verwenden
Ich habe die Naro-Roman-API 2 ausprobiert
Ich habe GhostScript mit Python ausgeführt, das PDF in Seiten aufgeteilt und es in ein JPEG-Bild konvertiert.
Ich habe die neuartige API von Naruro ausprobiert
Ich habe versucht, die checkio-API zu verwenden
Ich versuchte, Trauer und Freude über das Problem der stabilen Ehe auszudrücken.
Ich habe versucht, "Sakurai-san" LINE BOT mit API Gateway + Lambda zu erstellen
Ich habe Umgebungsvariablen in Docker festgelegt und in Python angezeigt.
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Ich habe den Akkord des Songs mit word2vec vektorisiert und mit t-SNE visualisiert
Konvertieren Sie eine Tabelle in CSV und laden Sie sie mit Cloud-Funktionen in den Cloud-Speicher hoch
Ich habe versucht, den Winkel von Sin und Cos mit Chainer zu lernen
Ich habe versucht, die Filminformationen der TMDb-API mit Python abzurufen
Ich habe versucht, den Google-Kalender mit CSV-Terminen mithilfe von Python und Google API zu aktualisieren
Ich habe versucht, die Netzwerkbandbreite und -verzögerung mit dem Befehl tc zu steuern
Darstellung von Containern in einem verschachtelten Rahmen (schematisch) in Jupyter und was ich bei der Erstellung untersucht habe
Ich habe versucht, mit Python viele Bilder wie das Favicon des Google-Kalenders zu generieren und in Vues Projekt zu integrieren
Als ich in IPython versuchte, den Wert zu sehen, war es ein Generator, also kam ich auf ihn, als ich frustriert war.
Ich habe ein System erstellt, das automatisch entscheidet, ob es morgen mit Python ausgeführt wird, und es zu Google Kalender hinzufügt.
Ich wollte die Anzahl der Zeilen in mehreren Dateien wissen und versuchte, sie mit einem Befehl abzurufen
Ich habe DSX Desktop installiert und ausprobiert
Ich habe eine funktionale Sprache mit Python ausprobiert
Ich habe versucht, die COTOHA-API zu berühren
Ich habe versucht, mit Pillow mit dem Bild zu spielen