93318
Google Cloud PHP Natural Language を使おうと思い、GitHubからcloneでコードを追加しました。

<https://github.com/googleapis/google-cloud-php-language>

事前に API Key の有効化と取得は行っています。

先程のGitHubにあるサンプルコードは次のようになっています。

```

    require 'vendor/autoload.php';
    
    use Google\Cloud\Language\LanguageClient;
    
    $language = new LanguageClient();
    
    // Analyze a sentence.
    $annotation = $language->annotateText('Greetings from Michigan!');
    
    // Check the sentiment.
    if ($annotation->sentiment() > 0) {
        echo "This is a positive message.\n";
    }
    
    // Detect entities.
    $entities = $annotation->entitiesByType('LOCATION');
    
    foreach ($entities as $entity) {
        echo $entity['name'] . "\n";
    }
    
    // Parse the syntax.
    $tokens = $annotation->tokensByTag('NOUN');
    
    foreach ($tokens as $token) {
        echo $token['text']['content'] . "\n";
    }
    
```

ここにはAPIキーを設定する部分がありません。  
実際、アクセスをしてもエラーが発生します。

```

    { "error": { "code": 403, "message": "The request is missing a valid API key.", "status": "PERMISSION_DENIED" } }
    
```

[API キーを使用して認証する](https://cloud.google.com/docs/authentication/api-keys?hl=ja)
を参照するとURLの最後に追加するように書かれています。  
`POST
https://language.googleapis.com/v1/documents:analyzeEntities?key=API_KEY`

しかしながら、上記のコードにAPI_KEYを設定する項目はありません。  
または、x-goog-api-key ヘッダーを使用してキーを渡すこともできるそうですが…

どのようにしてAPIキーを設定することができるのでしょうか？  
よろしくお願いします。
CC BY-SA 4.0
2023-01-13T00:05:58.423
93316
2023-01-13T02:21:19.323
2023-01-13T01:28:57.047
3060
7980
question
php google-cloud google-api
Google API KEY の設定方法が分からない
以下に同じような質問と回答がありました。

[Where do I put my api key in Google Cloud PHP Language Client? - Stack
Overflow](https://stackoverflow.com/questions/52776236/where-do-i-put-my-api-
key-in-google-cloud-php-language-client)

keyFilePath というのがわかれば試してみてはいかがでしょうか ?

```

    $language = new LanguageClient([
        'projectId' => 'my-project-id',
        'keyFilePath' => '/path/to/my/keyfile.json'
    ]);
    
```
CC BY-SA 4.0
2023-01-13T00:47:46.197
93317
2023-01-13T01:17:50.657
2023-01-13T01:17:50.657
3060
53097
93316
answer
参照している GitHub リポジトリの README
で、[Authentication](https://github.com/googleapis/google-cloud-php-
language#authentication) の段落には [Authentication
guide](https://github.com/googleapis/google-cloud-
php/blob/main/AUTHENTICATION.md) (認証ガイド) へのリンクが貼られています。

認証ガイドのページを開き、Environment Variables の段落を見ると、環境変数
`GOOGLE_APPLICATION_CREDENTIALS` を使えばよいと書かれています。

> ### Environment Variables
>
> The **Project ID** and **Credentials JSON** can be placed in environment
> variables instead of declaring them directly in code.
>
> (訳)  
>  プロジェクト ID と資格情報の JSON は、コードで直接宣言する代わりに環境変数に配置できます。

> Here are the environment variables that Google Cloud PHP checks for
> credentials:
>
>   1. `GOOGLE_APPLICATION_CREDENTIALS` \- Path to JSON file
>

より具体的な例は以下のドキュメントにも記載があります。

[環境変数を設定する - 認証のスタートガイド | Google
Cloud](https://cloud.google.com/docs/authentication/getting-
started?hl=ja#setting_the_environment_variable)

>
```

>     export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-
> account-file.json"
>  
```

もしくは、コード中にファイルへのパスを直接記載する例が認証ガイドにも載っています。  
ほぼ同じ内容ですが、[PHP で GCP を利用する際の認証設定 -
Qiita](https://qiita.com/shimon_haga/items/84dc1d13054a704958cf)
にも簡単な解説記事があったので合わせて参照してみてください。

> ### Client Authentication
```

>     require 'vendor/autoload.php';
>  
>     use Google\Cloud\Storage\StorageClient;
>  
>     // Authenticating with keyfile data.
>     $storage = new StorageClient([
>         'keyFile' => json_decode(file_get_contents('/path/to/keyfile.json'),
> true)
>     ]);
>  
>     // Authenticating with a keyfile path.
>     $storage = new StorageClient([
>         'keyFilePath' => '/path/to/keyfile.json'
>     ]);
>  
```
CC BY-SA 4.0
2023-01-13T02:21:19.323
93318
2023-01-13T02:21:19.323
3060
93316
answer