0

Я хотел бы прочитать Google Docs и Google Таблицы, которыми пользуются пользователи с определенным пользователем (myapp), созданным мной для моего приложения. Я реализовал поток слайдов гибридного сервера Google (автономный доступ), используя сервисы Google от имени этого пользователя, когда он находится в автономном режиме.Как читать содержимое общего листа с API-интерфейсом Google Диска (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».

Теперь я хотел бы получить содержание общего Spreadsheet:

$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? Вы знаете, когда вы щелкаете правой кнопкой мыши по фактическому документу и говорите «Share ...»

Смежные вопросы