Я хочу загрузить файлы на Google Диск с помощью API, но мне нужно сделать это с помощью задания cron (автоматическое резервное копирование веб-файлов + sql на диск Google).
Это означает (я полагаю), что мне нужно пройти аутентификацию с использованием чего-то другого, кроме метода взаимодействия с пользователем.
Пример, который я использовал: https://developers.google.com/api-client-library/php/auth/web-app, чтобы заставить меня работать, и его работа с аутентификацией пользователя.
Я был бы признателен за несколько советов о том, как это сделать без взаимодействия с пользователем, чтобы он мог работать в cronjob.
Вот код PHP для аутентификации и загрузки файла (рабочий пример с ручной аутентификацией пользователя и загрузкой одного файла)
<?php
require_once 'google-api-php-client/vendor/autoload.php';
/* Config */
$servername = 'content here';
$redirect_uri = 'https://example.com/';
$client = new Google_Client();
$client->setAuthConfig('client_manual_authentiation.json');
$client->addScope(Google_Service_Drive::DRIVE);
if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
$client->setAccessToken($_SESSION['access_token']);
$drive = new Google_Service_Drive($client);
foreach($drive->files->listFiles(array("q" => "name = '{$servername}'"))->getFiles() as $key => $element){
if ($element->name == $servername){
//create todays folder on Google Drive
$today_folder_meta = new Google_Service_Drive_DriveFile(array(
'name' => 'myfile.txt',
'mimeType' => 'application/vnd.google-apps.folder',
'parents' => array($element['id'])
));
$today_folder = $drive->files->create($today_folder_meta, array(
'fields' => 'id'
));
}
}
}else{
if (!isset($_GET['code'])) {
$auth_url = $client->createAuthUrl();
header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));
} else {
$client->authenticate($_GET['code']);
$_SESSION['access_token'] = $client->getAccessToken();
header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}
}
?>






Для этого вы хотите создать учетную запись службы Google OAuth2. Затем вы можете загрузить набор учетных данных JSON, которые ваше приложение будет использовать для аутентификации без взаимодействия с пользователем.
Это описано в следующей статье:
Использование OAuth 2.0 для серверных приложений
После этого вы сможете загрузить следующие учетные данные для использования в своем приложении:
{
"type":"service_account",
"project_id":"your-project-id",
"private_key_id":"deadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
"private_key":"-----BEGIN PRIVATE KEY-----\nMIIEv...4XIk=\n-----END PRIVATE KEY-----\n",
"client_email":"[email protected]",
"client_id":"12345678901234567890",
"auth_uri":"https://accounts.google.com/o/oauth2/auth",
"token_uri":"https://accounts.google.com/o/oauth2/token",
"auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url":"https://www.googleapis.com/robot/v1/metadata/x509/foobar%40bazqux.iam.gserviceaccount.com"
}
Вот пример использования Google PHP:
Вы можете создать учетную запись службы в консоли Google API, как показано здесь:
Хорошо, сейчас я использую OAuth, поэтому попробую сервисный. Сейчас я запускаю файл json: $ client-> setAuthConfig ('client_secret.json'); так что я думаю, мне нужно заменить это служебным ключом?
Да, у вас должна быть возможность просто поменять местами файл. Обратите внимание, что JSON, который я включил выше, имеет следующее свойство: "type":"service_account". Пример кода учетной записи службы Google PHP, который я привел выше, включает следующее: $client->setAuthConfig($credentials_file); в строке 45. Я использовал служебные учетные записи для Google Drive, Sheets, Slides и Speech API.
Я попробую как можно скорее.
Должен ли я использовать учетную запись службы приложений или учетную запись службы вычислений?
Я не видел различий между учетными записями приложений и вычислительных служб. Вы можете указать, где вы это видите? Я создаю их здесь, используя «Google Cloud Platform - IAM & admin»: console.cloud.google.com/iam-admin/serviceaccounts. Документация Google для различных целей, похоже, ведет именно к этому месту, например cloud.google.com/compute/docs/access/…, cloud.google.com/iam/docs/service-accounts и т. д.
При замене веб-секретного ключа файла (OAuth 2.0) служебным ключом я получаю: Неустранимая ошибка: Uncaught InvalidArgumentException: отсутствует требуемый URI перенаправления. Код обновлен в основном тексте выше.
см. stackoverflow.com/questions/19766912/…