1

enter image description hereWie aa Google Tabellen-Kalkulationstabelle zur Verfügung stellen, um gspread

Ich bin durch die Dokumentation arbeiten können gspread (http://gspread.readthedocs.io/en/latest/oauth2.html) und haben den Einführungscodeblock Funktion erhalten:

import gspread 
gc = gspread.authorize(credentials) 

Allerdings, wenn ich das folgende Skript ausführen:

import gspread 
from oauth2client.service_account import ServiceAccountCredentials 

scope = ['https://spreadsheets.google.com/feeds'] 
credentials = ServiceAccountCredentials.from_json_keyfile_name('My Project-******97.json', scope) 
gc = gspread.authorize(credentials) 
wks = gc.open("rules_test_1.csv").sheet1 

ich:

gspread.exceptions.SpreadsheetNotFound 

Wie kann ich auf dieses Blatt zugreifen?

+0

Können Sie erklären, was Sie mit "Ich habe keine Blätter in Google Drive" bedeuten? Google Tabellen ist die Anwendung und Google Drive ist der Ort, an dem Google Tabellen die Tabellenblätter speichert. Wenn Sie die Schritte in dem von Ihnen geposteten Link befolgt haben, werden Sie mit einem Dienstkonto verbunden. Stellen Sie sicher, dass Sie verstehen, dass ein Dienstkonto nicht Ihr eigenes Konto ist. – pinoyyid

+0

Ich habe einige Änderungen an der Frage gemacht .. – user61629

Antwort

1

OK, Sie machen einen gemeinsamen Fehler. Wenn Sie in StackOverflow nach "Dienstkonto [google-drive-sdk]" suchen, werden Sie feststellen, dass viele Leute die gleiche Frage stellen.

Grundsätzlich ist ein Dienstkonto NICHT Ihr Google-Konto, weshalb Ihre Datei nicht gefunden wird. Die Autoren von gspread hätten das in ihrem Beispielcode erklären sollen. Sie haben zwei Möglichkeiten: -

  1. Teilen Sie Ihre Tabelle oder den Ordner, in dem sie sich befindet, mit dem Benutzer des Dienstkontos. Dies ist der einfachste Ansatz, da Sie nur die Freigabe von GDrive vornehmen müssen und der vorhandene Code dann funktioniert. Der Nachteil ist, dass es klobig sein kann, Dateien weiterzugeben. Mein Vorschlag wäre, einen dedizierten Ordner namens "shared" mit meinem Dienstkonto zu erstellen und alle Dateien unter diesem Ordner zu erstellen. Denken Sie daran, dass Dateien mehrere Eltern haben können, so dass Sie Ihre Ordnerstruktur beibehalten können. In der Antwort auf How do I search sub-folders and sub-sub-folders in Google Drive? finden Sie eine Übersicht über die Funktionsweise von Drive-Ordnern.

  2. Ersetzen Sie die Service Account-Authentifizierung durch Standard Account Auth. Dies erfordert einige kleinere Änderungen an Ihrem Code. Das Ergebnis ist, dass Ihre App direkt mit Ihrem Google Drive-Konto kommuniziert, ohne dass ein Dienstkonto als Proxy fungiert. Daher ist es eleganter, vorausgesetzt, die Auswirkungen auf die Sicherheit sind akzeptabel. Sie werden ein gespeichertes Refresh Token verwenden. Einige Informationen darüber, wie dies zu tun ist bei How do I authorise an app (web or installed) without user intervention? (canonical ?)

Weder Art und Weise richtig oder falsch ist. Es hängt von Ihren spezifischen Anforderungen ab.

+0

Vielen Dank, das hilft sehr. – user61629

+0

Ich habe eine Follow-up-Frage zur Klärung. Idealerweise würde ich gerne die zweite Methode verwenden, wurde aber dadurch verlangsamt, dass ich den Auth-Schritt oauth2 verstanden und versucht habe. Ich versuche eine App zu erstellen, die mit Google Tabellen interagieren kann. Ich denke, was http://stackoverflow.com/questions/19766912/how-do-i-authorise-an-app-web-or-installed-without-user-intervention-canonic bedeutet, dass wenn Sie durch die Schritte gehen und erhalten Sie einen langlebigen Token, kann Ihre App dann verwenden, um sich ohne menschliche Hilfe einzuloggen. Ist das richtig? – user61629

+0

yep du hast es. Alle Beispiele zeigen, wie auth für mehrere Benutzer mit ihren eigenen Konten codiert werden kann. In Ihrem Fall möchten Sie einen einzelnen Benutzer (Sie) gegen einen einzelnen Account (Ihren), so dass die Schritte, die Sie verknüpft haben, all das umgehen und Ihnen ein langlebiges Token hinterlassen, das Sie auf die gleiche Weise verwenden können Sie würden einmal einen eingebetteten Benutzernamen/Passwort verwendet haben. – pinoyyid

Verwandte Themen