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

Es ist gut dokumentiert .
Da der für den Zugriff auf Google Drive erforderliche Umfang jedoch sensibler ist als beispielsweise JMPs Google Sheet-Integration , die Integration mit Google Drive ist ab JMP 17 derzeit nicht Teil von JMP.
Allerdings bin ich kürzlich einem JMP-Benutzer begegnet JMP Discovery Dabei wurden Daten gesammelt und auf Google Drive gespeichert. Das Datenformat war csv Aus verschiedenen Gründen, hauptsächlich jedoch aufgrund der Einschränkungen von Google Sheet. Er sagte, sein Leben (und das seiner Kollegen) wäre einfacher, wenn er die CSV-Daten regelmäßig in JMP übertragen 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 der „einfachen Schaltfläche“.
Also machte ich mich daran, meine Notizen zur Google Console durchzugehen und zu erfahren, wie man eine Web-App registriert. Sie können problemlos ein Entwickler-Konto erwerben (wie ich es getan habe), aber Google begrenzt den Traffic, den es hat, wenn Sie es nicht nutzen Überprüfungsprozess .
Was ich wärmstens empfehlen kann, auch wenn es nur eine interne App ist.
Nach [Geben Sie Ihre Stundenanzahl mit der Google Console ein] verfügen Sie also über die notwendigen Teile, um sich mit JMP bei Google Drive anzumelden.
- Redirect_URL
- Kunden ID
- client_secret
Alles, was Sie bei der Registrierung Ihrer App bei Ihrer Auswahl verwendet haben OAuth2 Genehmigung.
Denken Sie daran: Da Sie Ihre App verwenden, sollten Sie sicherstellen, dass Sie die Google Drive-APIs aktiviert haben.

Der andere wichtige Teil ist Umfang . Der Bereich steuert die Berechtigungen, die ein Benutzer gewährt, wenn er eine Verbindung zur registrierten Web-App herstellt. Es ist vollständig abhängig von den Google APIs, die Sie verwenden möchten. Das beigefügte Skript verwendet beispielsweise Folgendes:
Openid und Profile sind „Standard“, wenn Authentifizierung und Autorisierung, während die übrigen Bereiche dazu verpflichtet sind Lesen und laden Sie Daten von Ihrem Google-Laufwerk herunter . Wenn Sie 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 im Autorisierungsheader 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 Redirect_URL , Kunden ID, client_secret usw. mit den Attributen, die Sie in Ihrer registrierten Web-App haben.
Im beigefügten Skript habe ich einen zusätzlichen Haushaltspunkt hinzugefügt. Ich wollte, dass die Benutzererfahrung darin besteht, einmal zu autorisieren und dann zu speichern Refresh_token lokal, sodass ich nicht erneut aufgefordert werde, mich bei Google anzumelden. Bei lokaler Speicherung ist dies der Fall nicht verschlüsselt, sodass Sie es an einem privaten Ort speichern möchten. Das beigefügte Skript verwendet
- $USER_APPDATA/GoogleDriveTokens.json
Dadurch wird das Refresh_token von der Festplatte geladen (falls verfügbar) und erhält eine Zugangstoken von Google mit dem Refresh_token, und dann sind Sie fertig authentifiziert und autorisiert . Als letztes speichert das Skript es wieder auf der Festplatte. Der Neues OAuth2() Das JSL-Objekt erhält jedes Mal weiterhin Token, wenn die aktuellen abgelaufen sind oauth2 << Get Auth Header() wird eingesetzt. 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 der Endpunkt

Wird verwendet, um die auf Google Drive gefundenen Dateien aufzulisten. Von Standard , nur 100 werden zurückgegeben, daher erhöhe ich sie 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 AUSRUHEN Anruf ist JSON , das in ein umgewandelt wird Assoziatives Array mit ParseJON . Wenn Sie Probleme beim Visualisieren der JSON-Datenstruktur haben (was ich manchmal tue), kopiere ich das JSON und füge es in das ein JSON-Editor-Erweiterung für Chrome.
Während das Skript die zurückgegebenen Dateien verarbeitet, behält es die Metadaten für bei
Der wichtige Teil der Metadaten ist der Datei-ID . Google verwendet beim späteren Dateizugriff auf Google Drive eine Datei-ID. In unserem Fall möchten wir die Dateien .csv und .csv.gz herunterladen und in JMP öffnen. Daher durchläuft das Skript die Datei-IDs aus dem vorherigen Schritt und lädt die Daten herunter.

Der Schlüssel zum Abrufen des Dateiinhalts ist:
- QueryString(["alt" => "media"])
Es weist Google Drive an, den Inhalt der Datei an JMP zurückzusenden. Das Skript prüft die Mime Typ der Datei aus den Dateimetadaten, könnte aber auch den mimeType aus der HTTP-Anfrage ü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 = Open(blob, text); //Vor dem Öffnen muss nicht im Dateisystem gespeichert werden
übernimmt das Öffnen der Daten, ohne dass ein Seitenwechsel zum System erforderlich ist
Hoffentlich reicht dieses Skript aus, um Ihnen einen Vorsprung bei der Integration in Google Drive zu verschaffen. Ich fand es interessant und schätze die Frage des Kunden.
Übrigens: Wenn Sie bei der Google Console nicht weiterkommen, können Sie die Frage hier stellen. Ich (oder jemand anderes) kann vielleicht helfen.