5

Google Docs .NET APIを使用してC#プログラムを作成し、ユーザー名、パスワード、スプレッドシート名、ワークシート名を指定して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スプレッドシートから読み取ることに興味があります。つまり、公開されているGoogleスプレッドシートのURL( " https://spreadsheets.google.com/ccc?key=BUNCH_OF_LETTERS_HERE&hl=en "など)を指定して、そのドキュメントに対応するSpreadsheetEntryオブジェクトを取得します。

私がこれまで使用してきた方法は明らかにこれを可能にするように拡張されていないようです。そのため、APIを介して公開されているGoogleドキュメントにアクセスする適切な方法を誰かが知っているかどうか疑問に思いました。

4

3 に答える 3

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>

HtmlAgilityPackまたは独自のパーサーを使用できます。

もう1つのオプションは、公開スプレッドシートを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暗号化メッセージを含む通信をキャプチャしました。

于 2012-03-10T10:10:08.840 に答える
3

複数のタブがあるスプレッドシートを読み込もうとしていたのですが、これらの他の回答を実装したとき(つまり、ページに直接Webリクエストを送信したとき)に戻ってきたhtmlとjavascriptはほとんど読めませんでした。さらに掘り下げた後、OAuthのものを処理せずに、公開されているGoogleスプレッドシートの値を本当に取得したい場合は、最初にhttps://console.developers.google.com/apisにアクセスして作成する必要があることがわかりました。プロジェクト、ダッシュボードに移動し、資格情報に移動し、[資格情報の作成]をクリックして、新しいサービスアカウントキーを設定します(jsonを選択してjsonファイルを保存します。これを使用して公開スプレッドシートを取得できます)。

using Google.Apis.Auth.OAuth2;
using Google.Apis.Sheets.v4;
using Google.Apis.Sheets.v4.Data;
using Google.Apis.Services;

GoogleCredential credential;
string spreadSheetId = "k3k5j5nh4h43j5ktb4gf5h5l5"; //https://docs.google.com/spreadsheets/d/k3k5j5nh4h43j5ktb4gf5h5l5/
using(var stream = new FileStream('YOUR_JSON_FILE_PATH', FileMode.Open, FileAccess.Read)) 
{
    credential = GoogleCredential.FromStream(stream).CreateScoped(SheetsService.Scope.SpreadsheetsReadonly);

    var sheetsService = new SheetsService(new BaseClientService.Initializer() 
    {
        HttpClientInitializer = credential,
        ApplicationName = "You application name",
    });

    var range = "A:B";

    var request = sheetsService.Spreadsheets.Values.Get(spreadSheetId, range);

    ValueRange response = request.Execute();
}
于 2019-09-04T21:46:14.557 に答える
1

Google Docs List APIはそのために設定されていないようです(ahabの回答を参照)。

于 2010-08-30T14:30:04.543 に答える