2010-08-09 20 views
5

Ho scritto un programma C# utilizzando l'API di Google Docs .NET per leggere un foglio di lavoro Google in un DataTable dato un nome utente, password, nome del foglio di calcolo e nome del foglio di lavoro. Tutto questo funziona bene, ma il modello di programmazione sembra ruotare intorno dare il servizio foglio di calcolo di una serie di credenziali e quindi paring giù il feed risultante per ottenere un determinato foglio di calcolo/foglio di lavoro, vale a direCome posso accedere a fogli di lavoro pubblici con l'API C# di Google Documenti?

Ora sono interessati per estendere la funzionalità del mio programma alla lettura da fogli di lavoro pubblici di Google. Cioè, dato l'URL di un foglio di calcolo pubblico di Google (ad esempio "https://spreadsheets.google.com/ccc?key=BUNCH_OF_LETTERS_HERE&hl=en"), voglio ottenere l'oggetto SpreadsheetEntry corrispondente a quel documento.

Il metodo che ho usato finora, ovviamente, non sembra estendersi a permettere questo, quindi mi chiedevo se qualcuno conosce il modo corretto per accedere a un documento pubblico di Google attraverso la loro API?

risposta

4

Si potrebbe semplicemente recuperare la pagina pubblica e quindi analizzare la sorgente HTML per le righe.

intestazioni di richiesta:

GET https://docs.google.com/spreadsheet/ccc?key=0Au1XehjMeFfYdEE2d0RDSk1FMEMtRjM0MmllUWdoTkE HTTP/1.1 
Host: docs.google.com 
Connection: keep-alive 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko)  Chrome/15.0.874.120 Safari/535.2 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: tr-TR,tr;q=0.8,en-US;q=0.6,en;q=0.4 
Accept-Charset: ISO-8859-9,utf-8;q=0.7,*;q=0.3 
Cookie: PREF=ID=68126eb9eb12adef:FF=0:TM=1331371284:LM=1331371284:S=Bkm9mYX8pYy9a4h9 

griglia foglio di calcolo - etichette di colonna:

<table class="waffle" cellspacing="0" cellpadding="0"> 

<thead><tr> 
<th class="row-header freezebar-top-left"></th> 
<th style="width:120px" class="column-headers-background">A</th> 
<th style="width:120px" class="column-headers-background">B</th> 
<th style="width:120px" class="column-headers-background">C</th> 
</tr></thead> 

<tbody> 

Prima fila come definiti dall'utente nomi delle colonne:

<tr style='height:16px;'> 
<th style="height: 16px;" class="row-headers-background"><div class="row-header-wrapper" style="height: 16px;">1</div></th> 

<td class="g-0-GjugEgs0" dir="auto-ltr">username</td> 
<td class="g-0-GjugEgs0" dir="auto-ltr">create</td> 
<td class="g-0-GjugEgs0" dir="auto-ltr">expire</td> 
</tr> 

Resto delle righe come dati utente: Numero riga:

<tr style='height:16px;'> 
<th style="height: 16px;" class="row-headers-background"><div class="row-header-wrapper" style="height: 16px;">2</div></th> 

celle di dati consecutive:

<td class="g-0-GjugEgs2">3600001</td> 
<td class="g-0-GjugEgs2">2012</td> 
<td class="g-0-GjugEgs2">2013</td> 
</tr> 

Si può usare Html Agility Pack o il proprio parser.

Un'altra opzione è scaricare il foglio di calcolo pubblico come file in formato CSV o di testo

file di richiesta di scaricare le intestazioni:

GET https://docs.google.com/spreadsheet/fm?id=tA6wDCJME0C-F342ieQghNA.PREF_08255578241116458508.3736592253424693644&fmcmd=23&gid=0 HTTP/1.1 
Host: docs.google.com 
Connection: keep-alive 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.120 Safari/535.2 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Referer: https://docs.google.com/spreadsheet/ccc?key=0Au1XehjMeFfYdEE2d0RDSk1FMEMtRjM0MmllUWdoTkE 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: tr-TR,tr;q=0.8,en-US;q=0.6,en;q=0.4 
Accept-Charset: ISO-8859-9,utf-8;q=0.7,*;q=0.3 
Cookie: PREF=ID=68126eb9eb12adef:FF=0:TM=1331371284:LM=1331371284:S=Bkm9mYX8pYy9a4h9; lbcs=0 

Avviso del id parametro. Bisogna estrarlo dalla sorgente HTML come di seguito:

... 
var mergedConfig = {"formToken":"Kg2uOS1UniIe0yFks5zcDZDsGQ=","formStatus":false,"id":"tA6wDCJME0C-F342ieQghNA.PREF_08255578241116458508.3736592253424693644", 
... 

ho usato Fiddler di catturare la comunicazione tra cui SSL messaggi cifrati.

Problemi correlati