2011-09-26 15 views
7

Sto lavorando su Python e sto provando a recuperare i dati da un foglio di calcolo pubblico di Google (this one) ma ho faticato un po 'con the developer documentation.Recupera i dati dal foglio di calcolo pubblico di Google utilizzando la libreria gdata?

Vorrei evitare l'autenticazione del client se possibile, in quanto è un foglio di calcolo pubblico.

Ecco il mio codice corrente, con la libreria GData:

client = gdata.spreadsheet.service.SpreadsheetsService() 
key = '0Atncguwd4yTedEx3Nzd2aUZyNmVmZGRHY3Nmb3I2ZXc' 
worksheets_feed = client.GetWorksheetsFeed(key) 

questo non riesce sulla linea 3 con BadStatusLine.

Come posso leggere i dati dal foglio di calcolo?

+0

Richard non so se questo ti aiuterà, ma puoi esportare il foglio di calcolo come Excel e usare xlrd (http://pypi.python.org/pypi/xlrd) per leggere i dati. –

+2

Grazie! Mi piacerebbe usare gdata, ma la documentazione è diabolica, nessuno sembra sapere come usarlo ... – Richard

risposta

17

Desidero iniziare facendo eco al vostro sentimento secondo cui la Documentazione è davvero scarsa. Ma ecco cosa sono riuscito a capire finora.

pubblicata di pubblico

E 'molto importante che il vostro foglio di calcolo "essere pubblicato sul Web" in contrapposizione a solo di essere "Pubblica sul Web". Il primo si ottiene andando alla voce di menu "File -> Pubblica sul Web ...". Il secondo si ottiene facendo clic sul pulsante "Condividi" nell'angolo in alto a sinistra del foglio di calcolo.

Ho controllato e il foglio di lavoro con chiave = '0Atncguwd4yTedEx3Nzd2aUZyNmVmZGRHY3Nmb3I2ZXc' è solo "Pubblico sul Web". Ne ho fatto una copia con cui giocare per il mio codice di esempio. La mia copia ha una chiave = '0Aip8Kl9b7wdidFBzRGpEZkhoUlVPaEg2X0F2YWtwYkE' che vedrai più avanti nel mio codice di esempio.

Questa assurdità di "pubblico sul Web" e "pubblicata sul Web" è ovviamente un punto di confusione comune. In realtà è documentato in una casella rossa nelle sezioni "Visibilities and Projections" della documentazione API principale. Tuttavia, è davvero difficile leggere quel documento.

visibilità e proiezioni

Come lo stesso documento dice, ci sono proiezioni diverse da "pieno". E infatti (non documentato), "pieno" non sembra giocare bene con una visibilità di "pubblico" che è importante anche impostare quando si effettuano chiamate non autenticate.

È possibile ottenere una sorta di spigolo dallo pydocs che molti dei metodi sull'oggetto SpreadsheetsService possono utilizzare i parametri di "visibilità" e "proiezione". Conosco solo le visioni "pubbliche" e "private". Se impari da altri, mi piacerebbe sapere anche loro. Sembra che "pubblico" sia quello che dovresti usare quando fai chiamate non autenticate.

Come per le Proiezioni, è ancora più complicato. Conosco le proiezioni "complete", "base" e "valori". Sono stato fortunato e ho trovato la proiezione dei "valori" leggendo il codice sorgente nell'eccellente libreria javascript Tabletop. E, indovina un po ', questo è l'ingrediente segreto mancante per far funzionare le cose.

codice di lavoro

Ecco alcuni codice è possibile utilizzare per interrogare i fogli di lavoro dalla mia copia del foglio di calcolo.

#!/usr/bin/python 
from gdata.spreadsheet.service import SpreadsheetsService 

key = '0Aip8Kl9b7wdidFBzRGpEZkhoUlVPaEg2X0F2YWtwYkE' 

client = SpreadsheetsService() 
feed = client.GetWorksheetsFeed(key, visibility='public', projection='basic') 

for sheet in feed.entry: 
    print sheet.title.text 

Consigli ** ** lo trovo molto utile quando si lavora con le API di Python terribilmente documentate per utilizzare il metodo dir() in un interprete in esecuzione pitone per saperne di più circa il genere di informazioni che posso ottenere dal pitone oggetti. In questo caso, non aiuta troppo perché l'astrazione sopra l'XML e l'API basata su URL è piuttosto scarsa.

A proposito, sono sicuro che vorrai iniziare a gestire i dati effettivi nel foglio di calcolo, quindi procederò e aggiungerò un altro puntatore. I dati per ogni riga organizzata come dizionario possono essere trovati utilizzando GetListFeed (chiave, tasto_scheda, visibilità = 'pubblico', proiezione = 'valori'). Entry [0] .custom

Problemi correlati