Der schwierigste Teil der Integration mit Google Drive erstellt eine Webanwendung mit dem Google-Konsole .

Es ist gut dokumentiert .
Da der für den Zugriff auf Google Drive erforderliche Bereich jedoch sensibler ist als beispielsweise Google Sheet-Integration von JMP , die Integration mit Google Drive ist ab JMP 17 derzeit nicht Teil von JMP.
Davon abgesehen bin ich kürzlich auf einen JMP-Benutzer gestoßen JMP-Erkennung das war das Sammeln von Daten und das Speichern auf Google Drive. Das Datenformat war csv aus verschiedenen Gründen, aber hauptsächlich aufgrund von Google Sheet-Einschränkungen. Er sagte, sein Leben (und das seiner Kollegen) wäre einfacher, wenn er die CSV-Daten regelmäßig in JMP eingeben könnte, damit sie analysiert werden könnten. Er wusste, dass er die CSV-Datei herunterladen und dann in JMP importieren konnte, aber er suchte wirklich nach „dem einfachen Knopf“.
Also ging ich los, um meine Notizen in der Google-Konsole durchzugehen und wie man eine Web-App registriert. Sie können leicht einen Entwickler bekommen (wie ich es getan habe), aber Google wird Sie auf den Verkehr beschränken, den es hat, es sei denn, Sie gehen durch ihre Überprüfungsprozess .
Was ich sehr empfehlen kann, auch wenn es nur eine interne App ist.
Nach [geben Sie Ihre Anzahl der Stunden mit der Google-Konsole ein] haben Sie also die erforderlichen Teile, um sich mit JMP bei Google Drive anzumelden.
- Umleitungs-URL
- Kunden ID
- client_secret
Alles, was Sie bei der Registrierung Ihrer App verwendet haben, als Sie ausgewählt haben OAuth2 Genehmigung.
Denken Sie daran, da Sie Ihre App verwenden, sollten Sie sicherstellen, dass Sie die Google Drive-APIs aktiviert haben.

Das andere wichtige Stück ist Umfang . Scope steuert die Berechtigungen, die ein Benutzer gewährt, wenn er sich mit der registrierten Web-App verbindet. es ist vollständig abhängig von den Google-APIs, die Sie verwenden möchten. Das angehängte Skript verwendet beispielsweise:
Openid und Profile sind "Standard", wenn Authentifizierung und Autorisierung, während die verbleibenden Bereiche erforderlich sind Daten von Ihrem Google-Laufwerk lesen und herunterladen . Wenn Sie immer noch lesen, dann ist die gute Nachricht, dass der JMP Scripting Index ein Beispiel für die Authentifizierung bei Google enthält.

Es ist der zweite Beispiel in dem Autorisierungs-Header abrufen Eintrag, mit dem ich begonnen habe, als ich das beigefügte Skript geschrieben habe. Im Skript sehen Sie eine Eins-zu-Eins-Entsprechung von Umleitungs-URL , Kunden ID, client_secret , usw. mit den Attributen, die Sie in Ihrer registrierten Web-App haben.
Im beigefügten Skript habe ich ein zusätzliches Haushaltselement hinzugefügt. Ich wollte die Benutzererfahrung sein, einmal autorisieren und dann speichern refresh_token lokal, sodass ich nicht aufgefordert werde, mich erneut bei Google anzumelden. Wenn es lokal gespeichert wird, ist es nicht verschlüsselt, sodass Sie es an einem privaten Ort speichern möchten. Das angehängte Skript verwendet
- $USER_APPDATA/GoogleDriveTokens.json
Was dies bewirkt, ist, dass das refresh_token von der Festplatte geladen wird (falls verfügbar) und eine erhält Zugangstoken von Google mit dem refresh_token, und dann bist du authentifiziert und autorisiert . Das letzte, was das Skript tut, ist, es wieder auf die Festplatte zu speichern. Das Neues OAuth2() Das JSL-Objekt erhält weiterhin Token, wenn die aktuellen jedes Mal abgelaufen sind oauth2 << Auth-Header abrufen() wird genutzt. In diesem Fall wird Get Auth Header jedes Mal aufgerufen, wenn eine Anfrage an Google Drive gestellt wird.
Der allgemeine Ablauf nach Authentifizierung und Autorisierung stattgefunden hat, ist, dass der Endpunkt

Wird verwendet, um die auf Google Drive gefundenen Dateien aufzuzählen. Durch Ursprünglich , nur 100 zurückgegeben werden, also erhöhe ich es im Skript auf 1000 (das Maximum).
Es ist erwähnenswert, dass JMP 17 dies hat
- Anfrage << Senden( "Download-Fortschritt anzeigen" );
Dadurch wird ein Fortschrittsbalken für lange HTTP-Anforderungsvorgänge angezeigt.
Die Rückkehr von der SICH AUSRUHEN Anruf ist JSON , die in eine umgewandelt wird Assoziatives Array mit ParseJON . Wenn Sie Probleme haben, die JSON-Datenstruktur zu visualisieren (was ich manchmal mache), kopiere ich die JSON in die JSON-Editor-Erweiterung für Chrom.
Während das Skript die zurückgegebenen Dateien verarbeitet, behält es die Metadaten für
Der wichtige Teil der Metadaten ist die fileid . Google verwendet beim späteren Dateizugriff auf Google Drive eine Datei-ID. In unserem Fall möchten wir die .csv- und .csv.gz-Dateien herunterladen und in JMP öffnen. Das Skript durchläuft also die file_ids aus dem vorherigen Schritt und lädt die Daten herunter.

Der Schlüssel zum Abrufen des Dateiinhalts lautet:
- QueryString(["alt" => "media"])
Es weist Google Drive an, den Inhalt der Datei an JMP zurückzusenden. Das Skript überprüft die Mime Typ der Datei aus den Dateimetadaten, könnte aber auch den mimeType aus der HTTP-Anforderung überprüfen.
In jedem Fall ist der mimeType:
muss dekomprimiert werden, um den csv-Inhalt zu erhalten, während der mimeType
ist der Inhalt einer csv-Datei selbst
Schließlich, sobald der Inhalt abgerufen (und bei Bedarf dekomprimiert) wurde
- dt = Öffnen (Klecks, Text); //Vor dem Öffnen muss nicht im Dateisystem gespeichert werden
übernimmt das Öffnen der Daten ohne Paging zum System
Hoffentlich reicht dieses Skript aus, um Ihnen einen Vorsprung bei der Integration in Google Drive zu verschaffen. Ich fand es faszinierend und ich weiß es zu schätzen, dass der Kunde die Frage gestellt hat.
BTW Wenn Sie in der Google Console hängen bleiben, können Sie die Frage hier stellen. Ich (oder jemand anderes) kann vielleicht helfen.