Google Cloud Datastore APIをPHPから使ってみる(データ取得)

  • 11
    Like
  • 0
    Comment
More than 1 year has passed since last update.

GoogleのDatastoreにPHPからアクセスしようとしたところ、あまり情報が無かったのでメモ

PHP client library (Beta)の取得

GithubのGoogleアカウントから取得

OAuth

Google Developers Consoleからプロジェクトを選択し、

  • APIs & auth(APIと認証)- Credentials(認証情報)
  • Create new Client ID(新しいクライアントIDを作成)
  • Service account(サービスアカウント)を選択
  • JSON Key(JSONキー)

の順に選択すると、認証情報の入ったJSONファイルがダウンロードされる。
今回は、サーバ上で実行するプログラムのため、Service accountを選択。

JSONの中身はこのような形。

{
  "private_key_id": "******",
  "private_key": "***",
  "client_email": "***@developer.gserviceaccount.com",
  "client_id": "***.apps.googleusercontent.com",
  "type": "service_account"
}

認証

ダウンロードしたClient libraryの中のGoogleフォルダ内にautoload.phpがあるので、これを読み込むと、オートローディングが使用できるようになる。

認証は、ダウンロードしたjsonファイルのパスと、使用するサービスのスコープを指定して、Google_Client::loadServiceAccountJson()メソッドを呼ぶ。

サーバ上ではなく、通常のOAuth2認証などを使用する場合は、Google_Client::setAuthConfig()メソッドを呼んで認証する。

スコープは、Datastoreを使用するため、Google_Service_Datastore::DATASTOREGoogle_Service_Datastore::USERINFO_EMAILが必要。

require_once 'Google/autoload.php';

$client = new Google_Client();

$scopes = [
    Google_Service_Datastore::DATASTORE,
    Google_Service_Datastore::USERINFO_EMAIL,
];
$configFile = '***.json';
$credentials = $client->loadServiceAccountJson($configFile, $scopes);

$client->setAssertionCredentials($credentials);

Datastoreのオブジェクトを取得

$service = new Google_Service_Datastore($client);

データの取得

Datastoreオブジェクトが取得できれば、Kindを指定してRunQueryRequestのオブジェクトを作成、datasetIdを指定して、runQuery()メソッドを実行すればデータの取得ができる。

$kind = new Google_Service_Datastore_KindExpression();
$kind->setName('Kind名');

$query = new Google_Service_Datastore_Query();
$query->setKinds(array($kind));

$request = new Google_Service_Datastore_RunQueryRequest();
$request->setQuery($query);

$result = $service->datasets->runQuery('datasetId', $request);

フィルター

$propertyFilter = new Google_Service_Datastore_PropertyFilter();
$propertyReference = new Google_Service_Datastore_PropertyReference();
$propertyReference->setName("カラム名");

$propertyFilterValue = new Google_Service_Datastore_Value();
$propertyFilterValue->setStringValue("値");

$propertyFilter->setProperty($propertyReference);
$propertyFilter->setOperator('EQUAL');
$propertyFilter->setValue($propertyFilterValue);

$filter = new Google_Service_Datastore_Filter();
$filter->setPropertyFilter($propertyFilter);

$query->setFilter($filter);

ID/KeyNameから取得

Datastoreを使用する上で大事なID/KeyNameからの取得。
$path->setName()すると、KeyNameから取得可能。

$path = new Google_Service_Datastore_KeyPathElement();
$path->setKind('Kind名');
$path->setId('***');

$key = new Google_Service_Datastore_Key();
$key->setPath([$path]);

$request = new Google_Service_Datastore_LookupRequest();
$request->setKeys([$key]);

$result = $service->datasets->lookup('datasetId', $request);

GQL

GQLを使用したデータ取得も可能。

$service = new Google_Service_Datastore($client);

$query = "SELECT * FROM Kind名";
$gql = new Google_Service_Datastore_GqlQuery();
$gql->setQueryString($query);

$request = new Google_Service_Datastore_RunQueryRequest();
$request->setGqlQuery($gql);

$result = $service->datasets->runQuery('datasetId', $request);