Хобрук: Ваш путь к мастерству в программировании

Доступ к GDrive из Google App Engine с помощью учетной записи службы делегирования домена

Я впервые использую Google App Engine, поэтому некоторые из моих терминов могут быть немного неточными, терпите меня.

У меня был PHP-код, работающий в веб-приложении за пределами GAE, который использовал библиотеку google-api-php-client для доступа к папкам gdrive и создания файлов. Это прекрасно работало.

Я пытаюсь перейти на GAE с проектом, который имеет делегирование домена, чтобы мое приложение могло получать доступ / создавать файлы в моей учетной записи gdrive. Например, предположим, что мой домен - kennywyland.com, а моя учетная запись Google, которую я использую, - [email protected].

Я создаю свой клиент Google таким образом, который я получил от https://developers.google.com/api-client-library/php/auth/service-accounts:

$client = new Google_Client();
$client->setAuth(new Google_Auth_AppIdentity($client));
$client->getAuth()->authenticateForScope('https://www.googleapis.com/auth/drive');

Затем я создаю сервис gdrive следующим образом:

$service = new Google_Service_Drive($client);

Я не получал никаких ошибок из-за этого, и я могу выполнять запросы без выдачи сообщений об ошибках, однако я получаю полностью пустые наборы результатов. У меня много файлов в моей учетной записи gdrive, поэтому я предполагаю, что я увижу их, когда опубликую следующий код в GAE и запустил его (функция retreiveAllFiles () взята из примера кода Google, найденного здесь: https://developers.google.com/drive/v2/reference/files/list#try-it):

$allfiles = retrieveAllFiles($service);

print_r($allfiles);

function retrieveAllFiles($service) {
    $result = array();
    $pageToken = NULL;

    do {
        try {
            $parameters = array();
            if ($pageToken) {
                $parameters['pageToken'] = $pageToken;
            }
            $files = $service->files->listFiles($parameters);

            $result = array_merge($result, $files->getItems());
            $pageToken = $files->getNextPageToken();
        } catch (Exception $e) {
            print "An error occurred: " . $e->getMessage();
            $pageToken = NULL;
        }
    } while ($pageToken);
    return $result;
}

Однако я получаю пустой набор результатов. Print_r () печатает пустой массив:

Array ( )

Что мне не хватает? Я чувствую, что мой проект / приложение может успешно получить доступ к серверу gdrive, но он просто не может видеть какие-либо файлы в моей учетной записи, связанные с этим рабочим доменом.


Ответы:


1

Решение включало одно основное изменение, которое потребовало еще одного изменения. Основное изменение заключалось в том, что я использовал google-api-php-client v1, но мне нужно было использовать кандидата на выпуск v2 (который странно расположен в https://github.com/google/google-api-php-client/tree/v1-master ветвь).

У них есть список изменений кода, необходимых для обновления с 1.0 до 2.0 (спасибо, очень удобные githubers!) https://github.com/google/google-api-php-client/blob/master/UPGRADING.md

В итоге я настроил своего клиента с помощью следующего кода, а затем он сразу же смог получить доступ к gdrive, как если бы он был в настоящее время вошел лично (при условии, что '[email protected]' в моем примере, который является частью моего специального домена с доменом общегражданская делегация).

require_once('vendor/autoload.php');

$client = new Google_Client();

$client->setAuthConfig('myapp-xxxxxxxx.json');
$user_to_impersonate = "[email protected]";
$client->setSubject($user_to_impersonate);

$client->addScope('https://www.googleapis.com/auth/drive');

$service = new Google_Service_Drive($client);

Файл myapp-xxxxxxx.json был создан в моей консоли разработчика для учетной записи службы моего приложения.

20.01.2016
Новые материалы

Создание успешной организации по науке о данных
"Рабочие часы" Создание успешной организации по науке о данных Как создать эффективную группу по анализу данных! Введение Это обзорная статья о том, как создать эффективную группу по..

Технологии и проблемы будущей работы
Изучение преимуществ и недостатков технологий в образовании В быстро меняющемся мире технологии являются решающим фактором в формировании будущего работы. Многие отрасли уже были..

Игорь Минар из Google приедет на #ReactiveConf2017
Мы рады сообщить еще одну замечательную новость: один из самых востребованных спикеров приезжает в Братиславу на ReactiveConf 2017 ! Возможно, нет двух других кланов разработчиков с более..

Я собираюсь научить вас Python шаг за шагом
Привет, уважаемый энтузиаст Python! 👋 Готовы погрузиться в мир Python? Сегодня я приготовил для вас кое-что интересное, что сделает ваше путешествие более приятным, чем шарик мороженого в..

Альтернатива шаблону исходящих сообщений для архитектуры микросервисов
Познакомьтесь с двухэтапным сообщением В этой статье предлагается альтернативный шаблон для папки Исходящие : двухэтапное сообщение. Он основан не на очереди сообщений, а на..

React on Rails
Основное приложение Reverb - это всеми любимый монолит Rails. Он отлично обслуживает наш API и уровень просмотра трафика. По мере роста мы добавляли больше интерактивных элементов..

Что такое гибкие методологии разработки программного обеспечения
Что представляют собой гибкие методологии разработки программного обеспечения в 2023 году Agile-методологии разработки программного обеспечения заключаются в следующем: И. Введение A...