Подключайтесь к Google Drive API без взаимодействия с пользователем с помощью PHP

Я хочу загрузить файлы на 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));
        }
    }

?>

см. stackoverflow.com/questions/19766912/…

pinoyyid 01.07.2018 23:44
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
1
2 829
1

Ответы 1

Для этого вы хотите создать учетную запись службы 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'); так что я думаю, мне нужно заменить это служебным ключом?

sdfgg45 31.05.2018 12:09

Да, у вас должна быть возможность просто поменять местами файл. Обратите внимание, что JSON, который я включил выше, имеет следующее свойство: "type":"service_account". Пример кода учетной записи службы Google PHP, который я привел выше, включает следующее: $client->setAuthConfig($credentials_file); в строке 45. Я использовал служебные учетные записи для Google Drive, Sheets, Slides и Speech API.

Grokify 31.05.2018 12:13

Я попробую как можно скорее.

sdfgg45 31.05.2018 12:15

Должен ли я использовать учетную запись службы приложений или учетную запись службы вычислений?

sdfgg45 31.05.2018 15:19

Я не видел различий между учетными записями приложений и вычислительных служб. Вы можете указать, где вы это видите? Я создаю их здесь, используя «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 и т. д.

Grokify 31.05.2018 19:00

При замене веб-секретного ключа файла (OAuth 2.0) служебным ключом я получаю: Неустранимая ошибка: Uncaught InvalidArgumentException: отсутствует требуемый URI перенаправления. Код обновлен в основном тексте выше.

sdfgg45 06.06.2018 12:30

Другие вопросы по теме