Help us understand the problem. What is going on with this article?

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

More than 5 years have 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);
idaaki
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away