Доброго времени суток. есть такая задача: нужно конвертировать документ Google (Docs,Sheets, Slides) в Office формат и закинуть на гугл диск обратно. Столкнулся с проблемой, что при получении содержимого файла через exportLinks для файлов, которые не расшарены я получаю верстку страницы авторизации вместо содержимого файла, а для остальных все ок. file export в данном случае не помощник, т.к есть файлы больше 10МБ. Хотел бы узнать, как можно получить содержимое файла, а не верстку страницы авторизации.
Код Google Controller:
public function getExportUrl($file)
{
$exportURL = '';
switch ($file->getMimeType()) {
case self::FILE_TYPE_SPREADSHEET:
$exportURL = "https://docs.google.com/spreadsheets/d/".$file['id']."/export?format=xlsx";
break;
case self::FILE_TYPE_DOCUMENT:
$exportURL = "https://docs.google.com/document/d/".$file['id']."/export?format=docx";
break;
case self::FILE_TYPE_PRESENTATION:
$exportURL = "https://docs.google.com/presentation/d/".$file['id']."/export/pptx";
break;
default:
$exportURL = '';
break;
}
return $exportURL;
}
public function getExportMymeType($file)
{
$exportFormat = '';
switch ($file->getMimeType()) {
case self::FILE_TYPE_SPREADSHEET:
$exportFormat = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
break;
case self::FILE_TYPE_DOCUMENT:
$exportFormat = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
break;
case self::FILE_TYPE_PRESENTATION:
$exportFormat = 'application/vnd.openxmlformats-officedocument.presentationml.presentation';
break;
default:
$exportFormat = '';
break;
}
return $exportFormat;
}
public function convertGoogleDoc($file, $exportFolderId)
{
try {
$exporting_file = new \Google_Service_Drive_DriveFile();
$exporting_file->setName($file['name']);
$exporting_file->setParents([$exportFolderId]);
$exporting_file->setProperties(
["modifiedTimeOfOriginalFile" => date('Y-m-d H:i:s', strtotime($file['modifiedTime']))]
);
$content = null;
$exporting_file->setMimeType($this->getExportMymeType($file));
$content = file_get_contents($this->getExportUrl($file));
$exported_file = $this->drive->files->create($exporting_file, array(
'data' => $content,
'uploadType' => 'multipart',
'fields' => 'id, name, modifiedTime, iconLink, webViewLink, parents, fileExtension, mimeType, size, webContentLink, properties',
));
return $exported_file;
} catch (Exception $e) {
print "An error occurred: " . $e->getMessage();
}
}
Код Google.php
class Google
{
public function client()
{
$client = new \Google_Client();
$client->setClientId(env('GOOGLE_CLIENT_ID'));
$client->setClientSecret(env('GOOGLE_CLIENT_SECRET'));
$client->setRedirectUri('postmessage');
$client->setScopes(array("https://www.googleapis.com/auth/drive"));
$client->setApprovalPrompt(env('GOOGLE_APPROVAL_PROMPT'));
$client->setAccessType(env('GOOGLE_ACCESS_TYPE'));
return $client;
}
public function drive($client)
{
$drive = new \Google_Service_Drive($client);
return $drive;
}
}
Что получаю: