Ich möchte Google Docs und Google Tabellen lesen, die von Benutzern mit einem bestimmten Benutzer (myapp) geteilt werden, den ich für meine Anwendung erstellt habe. Ich habe den Google-Hybrid-Server-Slide-Flow (Offline-Zugriff) implementiert und nutze Google-Dienste im Auftrag dieses Nutzers, wenn er offline ist.Wie lese ich Inhalte eines geteilten Blattes mit Google Drive API (v3)? authError
Ich speichere das Aktualisierungstoken in meiner Datenbank und verwende es, um das Zugriffstoken zu aktualisieren. Mit dem Zugriffstoken kann ich die API abfragen. Zum Beispiel gibt der folgende Code korrekt die Dateien auf dem "myapp" drive:
// 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
}
... funktioniert gut!
Einige Dateien werden von anderen Benutzern für "myapp" freigegeben.
Nun möchte Ich mag Inhalt einer gemeinsamen Kalkulationstabelle erhalten:
$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";
Dieser Code gibt einen Fehler:
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
Irgendwelche Ideen?