2010-08-09 13 views
5

저는 Google 문서 .NET API를 사용하여 C# 프로그램을 작성하여 Google 워크 시트를 사용자 이름, 비밀번호, 스프레드 시트 이름 및 워크 시트 이름이있는 DataTable으로 읽었습니다. 이 모두가 잘 작동하지만 프로그래밍 모델은 특정 스프레드 시트/워크 시트를 얻을 수있는 결과 공급을 페어링 한 후 자격 증명 집합 스프레드 시트 서비스를 제공하고, 중심으로 돌고있는 것, 즉Google 문서 C# API를 사용하여 공개 스프레드 시트에 액세스하려면 어떻게해야합니까?

 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 스프레드 시트에서 읽을 수 있도록 확장합니다. 즉, 공개 Google 스프레드 시트의 URL (예 : "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 사용할 수 있습니다 또는 자신의 파서.

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 매개 변수 :

또 다른 옵션은 CSV에서 파일이나 텍스트 형식

파일 다운로드 요청 헤더로 대중 스프레드 시트를 다운로드합니다. 당신은 아래와 같은 HTML 소스에서 추출해야 :

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

내가 SSL 암호화 된 메시지를 포함하여 통신을 캡처하는 Fiddler을 사용했다.

관련 문제