JSONの(新しいスタイルの)Googleシートのコンテンツにアクセスするにはどうすればよいですか?私の目的はJavaScriptから値にアクセスすることなので、HTTP経由でJSONをダウンロードできるようにする必要があります。
例: このシート からJSONとしてデータをダウンロードするにはどうすればよいですか?
私はウェブ検索で答えを見つけようとしましたが、最終的に失敗しました:
Web上の多くのチュートリアルは、URLのkey=...
値を見つける手順から始まります。シートをエクスポートしたときに取得したURLはhttps://docs.google.com/spreadsheets/d/1mhv1lpzufTruZhzrY-ms0ciDVKYiFJLWCMpi4OOuqvI/pubhtml?gid=1822753188&single=true
であり、key=...
がありません。
"パブリックGoogleシートへのアクセス" への答えは、CSVバージョンを取得するために https://docs.google.com/spreadsheets/d/1mhv1lpzufTruZhzrY-ms0ciDVKYiFJLWCMpi4OOuqvI/export?format=csv&id=1mhv1lpzufTruZhzrY-ms0ciDVKYiFJLWCMpi4OOuqvI&gid=1822753188
を試す必要があることを示しているようですが、これはうまくいきません。データの代わりにサインインページが表示されます。
Google Apps Scriptを使用したアプローチを見つけましたが、これらはダウンロードリンクを提供するのではなく、ブラウザーで何らかのユーザーアクションを必要とするようです。
私は最終的に(のような)私の問題を解決しました。将来の参考のために、そして他の誰かが同じトラブルに遭遇した場合に備えて、ここで私が思いついた解決策:
ワークシートを一般公開するためには、ワークシートを一般公開する必要があります。これは、GoogleスプレッドシートのウェブインターフェースでメニューエントリFile > Publish to the web ... > link > publish
を使用して行われます。スプレッドシート全体を公開することも、個々のワークシートを公開することもできます。
プログラムでGoogleスプレッドシートのデータにアクセスするためのAPIは、 Google Sheets API web pages で説明されています。このAPIは、https://spreadsheets.google.com/feeds/.../
key/
worksheetId/...
という形式のURLを使用します。少し奇妙なことに、keyおよびworksheetIdの意味はAPIドキュメントで説明されていないようです。
私の実験では、Webインターフェイス経由でシートにアクセスするために使用されるURLの一部を取得することで、key値を見つけることができることを示しています( here も参照)。キーは、/d/
の後から次のスラッシュまでのすべてです。したがって、質問のスプレッドシートのキーは1mhv1lpzufTruZhzrY-ms0ciDVKYiFJLWCMpi4OOuqvI
です。 worksheetIdは、スプレッドシート内のワークシートの位置を示す整数のようです。質問の例では、表示されているシートが2番目のワークシートであることを知っている必要があります。この場合のworksheetIdは2
です。
APIはpublic
およびprivate
要求を定義しました。認証なしでエクスポートされたリソースにアクセスするには、public
リクエストを使用する必要があります。
スプレッドシートからデータを取得するためのAPI呼び出しについては、セクション "リストベースのフィードの取得" で説明しています(例の[プロトコル]タブをクリックします)。質問のスプレッドシートからデータを抽出するのに必要なURLは
このURLへのHTTP GET要求は、そのデータをXMLとして返します。 (データをJSONとして取得する方法を見つけていません。)
クロスサイトリクエストに対する通常の保護は、WebアプリでJavaScript XML RPC呼び出しを介してデータにアクセスすることを困難にします。この問題を回避する1つの方法は、nginxの proxy_pass directive を使用して、Webサーバーを介してAPI呼び出しをプロキシすることです(e.g。)。
上記の手順は、問題の問題に対する少なくとも部分的な解決策です。唯一の難点は、データがJSONではなくXMLとして返されることです。 APIドキュメントにはJSONが記載されていないため、この形式でデータを抽出することはもうできないでしょうか?
最新のAPI(v4)を使用する場合は、次を実行する必要があります。
次の形式のリクエストを使用します。
https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID/values/RANGE?key=API_KEY
その後、クリーンなJSON応答が返されます。
{
"range": "Sheet1!A1:D5",
"majorDimension": "ROWS",
"values": [
["Item", "Cost", "Stocked", "Ship Date"],
["Wheel", "$20.50", "4", "3/1/2016"],
["Door", "$15", "2", "3/15/2016"],
["Engine", "$100", "1", "30/20/2016"],
["Totals", "$135.5", "7", "3/20/2016"]
],
}
ページのコンテンツ全体を指定する場合、Sheet1
などの識別子は 完全に有効 であることに注意してください。
詳細については、 Basic Reading を参照してください。
V4 APIの時点で、 すべてのリクエストに付随する必要があります 識別子(APIキーなど)を伴う:
公開データのGoogle Sheets APIへのリクエストには、APIキーまたはアクセストークンなどの識別子を添付する必要があります。
リンクされたドキュメントの手順に従って、 資格情報ページ でAPIキーを作成します。
確認してください:
ユーザーにログインを強制せずに まだ公開データにアクセス できることに注意してください。
新しいSheets API v4では、可視性の明示的な宣言はありません。 API呼び出しは、スプレッドシートIDを使用して行われます。指定したスプレッドシートにアクセスする権限がアプリケーションにない場合、エラーが返されます。それ以外の場合、呼び出しは続行します。
シートをWebに公開する必要はないしないことに注意してください。あなたがする必要があるのは、リンクを持つ誰でもシートにアクセスできることを確認することだけです。
(つまり、Google Sheets APIで資格情報の作成をクリックすると、その他の非UI、ユーザーデータを選択し、「ユーザーデータにアクセスできません」と表示されますログインにユーザーの操作が必要なため、UIのないプラットフォームです。」このメッセージは無視しても問題ありません。これはパブリックデータであるため、APIキーだけが本当に必要です。)
要求に有効なAPIキーがありません。
呼び出しにkey=
パラメータを含めていません。
APIキーが無効です。有効なAPIキーを渡してください。 Google Developers Console
間違ったAPIキーを指定しました。キーを正しく入力したことを確認してください。まだキーをお持ちでない場合は、 Google開発者コンソール にアクセスして作成してください。
APIキーが見つかりません。有効なAPIキーを渡してください。
GoogleデベロッパーコンソールAPIキー
APIキーはおそらく正しいでしょうが、ほとんどの場合、Googleスプレッドシートの権限を追加していません。 GoogleデベロッパーコンソールAPIキーページに移動し、シートの権限を追加します。
呼び出し元に許可がありません
シートは一般公開されていません。
同じURLパラメータを使用してJSONを取得する方法は次のとおりです。
"https://spreadsheets.google.com/feeds/list/" + spreadsheetID + "/od6/public/values?alt=json";
XMLに至るまでのパスを使用して、@ jochenに答えてください"https://spreadsheets.google.com/feeds/list/" + spreadsheetID + "/od6/public/" + sheetID;
@jochenの答えが説明するように、このsheetID
はスプレッドシートのシートの順序に基づいています。