web-dev-qa-db-ja.com

Google Cloud API-アプリケーションのデフォルト認証情報

Googleのドキュメント から変更された次のコードがあります。

        $GOOGLE_APPLICATION_CREDENTIALS = "./[path].json";
        $_ENV["GOOGLE_APPLICATION_CREDENTIALS"] = "./[path].json";
        $_SERVER["GOOGLE_APPLICATION_CREDENTIALS"] = "./[path].json";

        $projectId = "[my project's ID']";
        $client = new Google_Client();
        $client->useApplicationDefaultCredentials();
        $client->setScopes(['https://www.googleapis.com/auth/books']);
        $service = new Google_Service_Books($client);
        $results = $service->volumes->listVolumes('Henry David Thoreau');

しかし、実行するとエラーが返されます。

PHP Fatal error:  Uncaught exception 'DomainException' with message 'Could not load the default credentials. Browse to https://developers.google.com/accounts/docs/application-default-credentials for more information'

ファイルのパスの変更など、さまざまな構成を試しました。ご覧のとおり、すぐに思いつく3種類の変数(2つの環境、1つの環境ではない変数)も作成しました。

次にどこを見ればいいのかよくわかりません。環境変数を設定するさまざまな方法を調べる必要がありますか、それとも別の方法でパスを定義する必要がありますか?これを行う正しい方法は何ですか?エラーのその他の理由はありますか?

13
Laef

使用したメソッドを使用する代わりに、putenv()http://php.net/manual/en/function.putenv.php )を使用する必要があります( $_ENVまたは$_SERVER)。

https://github.com/google/google-api-php-client/blob/master/UPGRADING.md#google_auth_assertioncredentials-has-been-removed から取得

// OR use environment variables (recommended)

putenv('GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json');
$client->useApplicationDefaultCredentials();
29
jkns.co

上記の回答に同意しますが、ユーザーがnlp googleを使用してphpでエラーが発生した場合のみ説明します:

<?php 

error_reporting(E_ALL);
ini_set('display_errors', 1);

# Includes the autoloader for libraries installed with composer
require __DIR__ . '/vendor/autoload.php';

# Imports the Google Cloud client library
use Google\Cloud\Language\LanguageClient;
putenv('GOOGLE_APPLICATION_CREDENTIALS=/home/sgupta/www/practise/nlp/google/cred.json'); //your path to file of cred
//$client->useApplicationDefaultCredentials();
# Your Google Cloud Platform project ID
$projectId = 'nlp-project-nname'; //your project name

# Instantiates a client
$language = new LanguageClient([
    'projectId' => $projectId
]);

# The text to analyze
$text = 'Sachin Tendulkar';



# Detects the sentiment of the text
$annotation = $language->analyzeSentiment($text);
$sentiment = $annotation->sentiment();
echo "<pre>";
print_r($annotation); die;

echo 'Text: ' . $text . '
Sentiment: ' . $sentiment['score'] . ', ' . $sentiment['magnitude'];
?>
2
sunil

または、次のようにjsonファイルへのパスを定義できます

$client = new Google_Client();
$client->setAuthConfig('/path/to/credentials.json');
0
Christian

これでうまくいく

# Includes the autoloader for libraries installed with composer
require __DIR__ . '/vendor/autoload.php';

putenv('GOOGLE_APPLICATION_CREDENTIALS=../service-account.json');
$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->setScopes(['https://www.googleapis.com/auth/analytics.readonly']);
$client->refreshTokenWithAssertion();
$token = $client->getAccessToken();
$accessToken = $token['access_token'];
0
Parmar Balvant