1

Ich versuche Google's Gdata Python-API zu lernen und versuche, ersten Zugang zu einer Test-Tabelle in meinem Laufwerk zu bekommen. heres der Code, den ich als Test bin mit:Zugriff auf Google-Tabellenkalkulation nicht möglich

from oauth2client.service_account import ServiceAccountCredentials 
import gdata.spreadsheets.client 

# 認証に必要な情報 
client_email = "[email protected]" # 手順2で発行されたメールアドレス 
with open("C:\Users\User2\Downloads\My Project-e7c4abb055f3.p12") as f: private_key = f.read() # 手順2で発行された秘密鍵 

# 認証情報の作成 
scope = ["https://spreadsheets.google.com/feeds"] 
credentials = ServiceAccountCredentials(client_email, private_key, 
    scope=scope) 

# スプレッドシート用クライアントの準備 
client = gdata.spreadsheets.client.SpreadsheetsClient() 

# OAuth2.0での認証設定 
auth_token = gdata.gauth.OAuth2TokenFromCredentials(credentials) 
auth_token.authorize(client) 

# ---- これでライブラリを利用してスプレッドシートにアクセスできる ---- # 

# ワークシートの取得 
sheets = client.get_worksheets("1RRajoMlKP2plSnE12dt_BqVbk9TihCpDpumvhF-y7vM") # スプレッドシートIDを指定 
for sheet in sheets.entry: 
    print sheet.get_worksheet_id(), sheet.title 

Ich bin stützen sie weg von diesem Tutorial http://qiita.com/koyopro/items/d8d56f69f863f07e9378 (sorry es ist alles in Japanisch).

Die Methode, die dieser Typ vorschlägt, verwendet etwas namens p12 als Schlüssel (?), Um beim Erstellen von OAuth2-Anmeldeinformationen auf Dinge in Google Apps zuzugreifen. Dann teilen Sie Ihr Tabellenblatt an eine @Developer E-Mail-Adresse generiert.

ich diesen Code ausführen und es ist in Ordnung, bis er

trifft
sheets = client.get_worksheets("1RRajoMlKP2plSnE12dt_BqVbk9TihCpDpumvhF-y7vM") # スプレッドシートIDを指定 

Und das gibt mir die folgenden Fehler:

Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec 5 2015, 20:32:19) [MSC v.1500 32 bit (Intel)] on win32 
Type "copyright", "credits" or "license()" for more information. 
>>> 
========= RESTART: C:\Users\User2\Documents\googlePythonTest04_01.py ========= 

Traceback (most recent call last): 
    File "C:\Users\User2\Documents\googlePythonTest04_01.py", line 24, in <module> 
    sheets = client.get_worksheets("1RRajoMlKP2plSnE12dt_BqVbk9TihCpDpumvhF-y7vM") # スプレッドシートIDを指定 
    File "C:\Python27\lib\site-packages\gdata\spreadsheets\client.py", line 108, in get_worksheets 
    **kwargs) 
    File "C:\Python27\lib\site-packages\gdata\client.py", line 640, in get_feed 
    **kwargs) 
    File "C:\Python27\lib\site-packages\gdata\client.py", line 267, in request 
    uri=uri, auth_token=auth_token, http_request=http_request, **kwargs) 
    File "C:\Python27\lib\site-packages\atom\client.py", line 122, in request 
    return self.http_client.request(http_request) 
    File "C:\Python27\lib\site-packages\gdata\gauth.py", line 1332, in new_request 
    refresh_response = self._refresh(request_orig) 
    File "C:\Python27\lib\site-packages\gdata\gauth.py", line 1473, in _refresh 
    self.credentials._refresh(httplib2.Http().request) 
    File "C:\Python27\lib\site-packages\oauth2client-2.2.0-py2.7.egg\oauth2client\client.py", line 873, in _refresh 
    self._do_refresh_request(http_request) 
    File "C:\Python27\lib\site-packages\oauth2client-2.2.0-py2.7.egg\oauth2client\client.py", line 900, in _do_refresh_request 
    body = self._generate_refresh_request_body() 
    File "C:\Python27\lib\site-packages\oauth2client-2.2.0-py2.7.egg\oauth2client\client.py", line 1611, in _generate_refresh_request_body 
    assertion = self._generate_assertion() 
    File "C:\Python27\lib\site-packages\oauth2client-2.2.0-py2.7.egg\oauth2client\service_account.py", line 396, in _generate_assertion 
    key_id=self._private_key_id) 
    File "C:\Python27\lib\site-packages\oauth2client-2.2.0-py2.7.egg\oauth2client\crypt.py", line 97, in make_signed_jwt 
    signature = signer.sign(signing_input) 
AttributeError: 'str' object has no attribute 'sign' 
>>> 

Nach diesem Tutorial, das letzte sollte Druckbefehl zurückgeben

od6 <ns0:title xmlns:ns0="http://www.w3.org/2005/Atom">&#12471;&#12540;&#12488;1</ns0:title>0 

Aber es gibt mir diesen String/Zeichen Fehler.

Mache ich etwas falsch? Oder hat sich die API bei diesem Befehl get_worksheets geändert? Ich kenne eine Menge Dinge geändert haben könnte, da dieses Tutorial geschrieben wurde, da ich den „Import SignedJwtAssertionCredentials“ auf „Import ServiceAccountCredentials“ zu ändern, hatte offenbar weil SignedJwtAssertionCredentials nicht mehr existiert (nach diesem Thread: https://github.com/google/oauth2client/issues/401)

Ich weiß, ich könnte diese andere viel einfachere "gspread" API verwenden, aber mein Verständnis ist, dass Sie nicht wirklich eine Tabelle damit bearbeiten können, also gehe ich gerade mit gdata.

Vielen Dank im Voraus.

+1

Stopp, um die gdata API. Verwenden Sie Google Tabellen v4, Sie werden viel mehr Glück haben https://developers.google.com/sheets/ Ich werde bereit sein zu wetten v3 wird bald abgeschrieben werden, was bedeutet, in einem Jahr müssen Sie sowieso migrieren. – DaImTo

+0

Ich verstehe nicht, ich dachte, dass Google Tabellen v4 Teil von gdata ist? Wie benutze ich dann v4? – user3696118

+0

V3 ist gdata v4 ist ein Discovery-Service-API. – DaImTo

Antwort

1

Google hat v4 API für Tabellen mit einem Korb voller Optionen eingeführt. Da ich es schwer fand, die Google-Client-Bibliothek zu verwenden, schrieb ich eine Python-Bibliothek (pygsheets) für Google-Tabellenblätter auf Google Python-Client. Die Bibliothek befindet sich in der Entwicklungsphase. Wenn Sie eine fehlende Funktion finden, können Sie eine Pull-Anfrage senden oder einfach ein Problem erstellen. Wenn Sie eine stabilere Bibliothek benötigen und keine neue API-Prüfung benötigen, können Sie eine Tabelle mit gspread bearbeiten.

Die Benutzung ist so einfach wie

import pygsheets 

gc = pygsheets.authorize() 

# Open a worksheet from spreadsheet with one shot 
wks = gc.open('my new ssheet').sheet1 

wks.update_acell('B2', "it's down there somewhere, let me take another look.") 

# Fetch a cell range 
cell_list = wks.range('A1:B7') 
Verwandte Themen