GoogleのDatastoreにPHPからアクセスしようとしたところ、あまり情報が無かったのでメモ
PHP client library (Beta)の取得
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::DATASTORE
とGoogle_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);