Как я могу получить доступ к общедоступным электронным таблицам с помощью Google Docs C # API? - PullRequest
5 голосов
/ 09 августа 2010

Я написал программу на C # с использованием API Google Docs .NET для чтения рабочей таблицы Google в DataTable с указанием имени пользователя, пароля, имени электронной таблицы и имени рабочей таблицы.Все это прекрасно работает, но модель программирования вращается вокруг предоставления электронной службе набора учетных данных, а затем разбивает результирующий фид, чтобы получить конкретную электронную таблицу / таблицу, то есть

        SpreadsheetsService service = new SpreadsheetsService("Application-Name");
        service.setUserCredentials(userName, password);

        SpreadsheetQuery spreadsheetQuery = new SpreadsheetQuery();
        SpreadsheetFeed spreadsheetFeed = service.Query(spreadsheetQuery);

        SpreadsheetEntry spreadsheetEntry = (SpreadsheetEntry)(from entries in spreadsheetFeed.Entries
                                                               where entries.Title.Text == spreadsheetName
                                                               select entries).SingleOrDefault();

Теперь яЯ заинтересован в расширении функциональности моей программы для чтения из общедоступных электронных таблиц Google.То есть, учитывая URL общедоступной электронной таблицы Google (например, «https://spreadsheets.google.com/ccc?key=BUNCH_OF_LETTERS_HERE&hl=en"),», я хочу получить объект SpreadsheetEntry, соответствующий этому документу.

Метод, который я использовал до сих пор, очевидно, неПохоже, что это возможно, поэтому мне было интересно, знает ли кто-нибудь правильный способ доступа к общедоступному документу Google через их API?

Ответы [ 2 ]

4 голосов
/ 10 марта 2012

Вы можете просто получить общедоступную страницу и затем проанализировать источник HTML для строк.

Заголовки запроса:

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

Сетка электронной таблицы - метки столбцов:

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

Первая строка в качестве имен столбцов, определенных пользователем:

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

Остальные строки как пользовательские данные: Номер строки:

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

Ячейки данных строки:

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

Вы можете использовать Html Agility Pack или собственный анализатор.

Другим вариантом является загрузка общедоступной электронной таблицы в виде файла в формате CSV или текстовом формате

Заголовки запроса загрузки файла:

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

Обратите внимание на параметр id ,Вы должны извлечь его из html-источника, как показано ниже:

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

Я использовал Fiddler для захвата сообщений, включая зашифрованные сообщения SSL.

1 голос
/ 30 августа 2010

API Google Docs List , похоже, не настроено для этого (см. Ответ ahab).

...