2010-08-09 93 views
5

我已经使用Google Docs .NET API编写了一个C#程序,用于在给定用户名,密码,电子表格名称和工作表名称的情况下将Google工作表读取到DataTable中。这一切工作正常,但编程模式似乎围绕着给电子表格服务的一组凭据,然后削减下来得到的进料得到一个特定的电子表格/工作表,即如何使用Google Docs C#API访问公用电子表格?

现在我很感兴趣将我的程序的功能扩展为从公开的Google电子表格中读取。也就是说,考虑到Google公开电子表格的网址(例如“https://spreadsheets.google.com/ccc?key=BUNCH_OF_LETTERS_HERE&hl=en”),我想要获取与该文档相对应的SpreadsheetEntry对象。

到目前为止,我一直在使用的方法显然似乎没有扩展到允许这个,所以我想知道是否有人知道通过他们的API访问公共Google文档的正确方法?

回答

4

您可以简单地检索公共页面,然后解析行的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加密的邮件。

相关问题