2010-08-09 16 views
5

Napisałem program w języku C# za pomocą interfejsu API Dokumentów Google .NET, aby odczytać arkusz Google z tabeli DataTable, biorąc pod uwagę nazwę użytkownika, hasło, nazwę arkusza kalkulacyjnego i nazwę arkusza roboczego. To wszystko działa w porządku, ale model programowania wydaje się obracać wokół dając usługę arkusza kalkulacyjnego zbiór poświadczeń, a następnie otrzymaną paring w dół kanału, aby uzyskać konkretny arkusz kalkulacyjny/arkusz, czyliJak uzyskać dostęp do publicznych arkuszy kalkulacyjnych za pomocą interfejsu API Dokumentów Google C#?

Teraz jestem zainteresowany w rozszerzaniu funkcjonalności mojego programu do czytania z publicznych arkuszy kalkulacyjnych Google. To znaczy, biorąc pod uwagę adres URL publicznego arkusza kalkulacyjnego Google (np. "https://spreadsheets.google.com/ccc?key=BUNCH_OF_LETTERS_HERE&hl=en"), chcę uzyskać obiekt SpreadsheetEntry odpowiadający temu dokumentowi.

Metoda, z której korzystam do tej pory, najwyraźniej nie obejmuje tego, więc zastanawiałem się, czy ktoś wie, w jaki sposób można uzyskać dostęp do publicznego dokumentu Google za pośrednictwem interfejsu API?

Odpowiedz

4

Można po prostu pobrać stronę publiczną, a następnie przeanalizować źródło HTML wierszy.

Nagłówki żądań:

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 

Arkusz siatka - etykiety kolumny:

<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> 

Pierwszy rząd, jak zdefiniowano nazw użytkowników kolumna:

<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> 

reszty rzędach jako dane użytkownika: Numer wiersza:

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

komórki danych rzędu:

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

Można użyć Html Agility Pack lub własnego parsera.

Inną opcją jest pobranie arkusza publicznego jako plik w formacie CSV lub tekst

nagłówki żądania pobrania pliku:

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 

obwieszczeniu id parametrów. Trzeba wyodrębnić ją od źródła html jak poniżej:

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

użyłem Fiddler przechwycić komunikację w tym wiadomości zaszyfrowanych SSL.

Powiązane problemy