PHP
FusionTables

PHPからFusionTablesの「特定のユーザーがアクセスできます」テーブルにアクセスする方法

はじめに

PHPを使ってGoogle FusionTablesのテーブルで、共有の設定として「特定のユーザーがアクセスできます」を指定しているものにアクセスする方法です。

結構分かりにくかったので、ここに手順のメモを残します。

なお、やってないですけど、「公開」や「リンクを知っている人全員」はAPIキーだけで済むと思います。

ライブラリ

https://github.com/google/google-api-php-client/releases から google-api-php-client-X.X.X.zip を引っ張ってきて、unzipします。

https://github.com/google/google-api-php-client に出ているものだけでは不足しています。これはハマりました。

認証情報の作成・取得

  • Google Cloud Platformの「認証情報」を開きます。
  • 認証情報を作成します。
    • 「認証情報を作成」をクリックして、「サービスアカウントキー」を選択します。
    • 「サービスアカウント」欄で「新しいサービスアカウント」を選択します。
    • 「サービスアカウント名」を自分で考えて入力します。「役割」は無視します。「キーのタイプ」は「JSON」で良いです。
    • 作成時に生成されるJSONファイルは、大切に保管して下さい(紛失したら作り直します)。
    • 他のものは再ダウンロード可能なので同じだろうと思ってたところ、再ダウンロードできずに悩みました。

JSONファイルの保管先

JSONファイルには、秘密鍵を含んでいます。DocumentRoot配下の、その気になれば外部から閲覧可能なところに置くのは危険です。

PHPはDocumentRoot配下のファイルのみ読み込める、というわけではないので、少し離れたところにファイルを置きます。

FusionTablesの共有を出す

  • JSONファイルの"client_email"値が仮想的なユーザ名となります。FusionTablesの"share"で、この値を指定します。

PHPのプログラム例

<?php

require_once 'google-api-php-client-2.2.1/vendor/autoload.php';
putenv('GOOGLE_APPLICATION_CREDENTIALS=(JSONファイルへのパス)');

$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope('https://www.googleapis.com/auth/fusiontables');


$service = new Google_Service_Fusiontables($client);

$sql = 'SELECT * FROM (テーブルID)';
$res = $service->query->sql($sql);

$rows = $res->getRows();

var_dump($rows);
?>

おわりに

見ての通りメモをですます調に変換しているだけです。
ただ、google-api-php-clientのダウンロードと、サービスアカウントとは、ハマったので注意した方が良いかと思います。