私のアプリケーション用に作成した特定のユーザー(myapp)を持つユーザーが共有するGoogleドキュメントとGoogleスプレッドを読んでみたいと思います。私はオフライン時にこのユーザーの代わりにGoogleサービスを使用するGoogleのハイブリッドサーバーのスライドフロー(オフラインアクセス)を実装している。GoogleドライブAPI(v3)で共有シートのコンテンツを読むにはどうすればよいですか? authError
データベースにリフレッシュトークンを格納し、それを使用してアクセストークンを更新します。アクセストークンを使用するとAPIを照会できます。たとえば、次のコードは正しく「myappの」ドライブ上のファイルを返します。
// Get the API client
$client = new Google_Client();
$client->setClientId($this->clientId);
$client->setClientSecret($this->clientSecret);
$client->setAccessType('offline');
...
$client->addScope([
'https://spreadsheets.google.com/feeds',
'https://docs.google.com/feeds',
Google_Service_Drive::DRIVE
]);
// Construct the service object
$service = new Google_Service_Drive($client);
$params = array(
'pageSize' => 10,
'fields' => "nextPageToken, files(id, name)"
);
$results = $service->files->listFiles($params);
foreach ($results->getFiles() as $file) {
printf("%s (%s)\n", $file->getName()); // OK
}
...
が正常に動作します!
ファイルの一部は、他のユーザーによって「myapp」に共有されています。
は今、私が共有スプレッドシートの内容を取得したいと思います:
$fileId = "1GRTldB2....";
$result = $service->files->get($fileId, [
'fields' => 'name,md5Checksum,size,createdTime,modifiedTime,ownedByMe,properties,shared,sharedWithMeTime,webContentLink,webViewLink'
]);
$url = $result['webViewLink'];
//$url = 'https://www.googleapis.com/drive/v3/files/'.$fileId.'?alt=media';
$method = 'GET';
$headers = ["Authorization" => "Bearer $accessToken", "GData-Version" => "3.0"];
$httpClient = new GuzzleHttp\Client(['headers' => $headers]);
$resp = $httpClient->request($method, $url);
$body = $resp->getBody()->getContents();
$code = $resp->getStatusCode();
$reason = $resp->getReasonPhrase();
echo "$code : $reason\n\n";
echo "$body\n";
このコードは、エラーを与える:
Fatal error: Uncaught exception 'GuzzleHttp\Exception\ClientException' with message ' in C:\wamp\www\core\vendor\guzzlehttp\guzzle\src\Exception\RequestException.php on line 107 (!) GuzzleHttp\Exception\ClientException: Client error:
GET https://www.googleapis.com/drive/v3/files/1GRTldB2KDFGmFZgFST28-MaHKs7y7eqelbzDpdxuJBg?alt=media
resulted in a401 Unauthorized
response: { "error": { "errors": [ { "domain": "global", "reason": "authError", "message": "Invalid Credentials" (truncated...) in C:\wamp\www\core\vendor\guzzlehttp\guzzle\src\Exception\RequestException.php on line 107
authError/InvalidCredentials
任意のアイデア?