LoginSignup
10
8

More than 5 years have passed since last update.

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

Posted at

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);
10
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8