0

私のアプリケーション用に作成した特定のユーザー(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 a 401 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

任意のアイデア?

答えて

0

共有シートは、Google APIで使用している「ユーザー」と共有されていますか?実際の文書を右クリックして「共有する」と言うと、あなたは知っています