Использование PHP Cron и Google API для доступа - PullRequest
0 голосов
/ 18 сентября 2018

Мне нужно использовать CRON для обновления одного из моих листов Google по php.Но как правильно сделать это в 2018 году?Стоит ли выбирать в Google Cloud API вызов для веб-приложений или для платформы без пользовательского интерфейса (но затем доступ только для данных, сгенерированных приложением)?И следует ли создавать учетные данные в качестве учетной записи службы?Как насчет обновления токенов при использовании доступа к учетной записи службы?

Обычно это будет моя личная функциональность, только для меня.Моя задача должна быть реализована cron, но я совершенно не в этой теме, я никогда раньше не использовал Google API.Я прочитал много документов, но большинство из них о стандартном доступе oauth2 с приглашением пользователя (даже время от времени).Может быть, кто-то мог бы порекомендовать некоторые хорошие практики в этом случае?

PS.Я использую googleapis / google-api-php-client

1 Ответ

0 голосов
/ 18 сентября 2018

Первое, что вам нужно сделать, это решить, к каким данным вы будете получать доступ.

  • это ваша учетная запись или ваш лист, к которым у вас как у разработчика есть доступ.
  • это лист, принадлежащий другой учетной записи пользователя.

Если это первый вариант, вам следует воспользоваться служебной учетной записью.Клиентская библиотека google apis php обеспечит обновление доступа, и вам не нужно об этом беспокоиться.Просто возьмите адрес электронной почты учетной записи службы и поделитесь листом, к которому вы хотите получить доступ, с пользователем учетной записи службы.

Если это второй вариант, и вам нужен доступ к учетной записи пользователя.Тогда вам, вероятно, нужно будет использовать браузер.Пользователь должен будет аутентифицировать ваше приложение, как только вы сможете сохранить токен обновления, и тогда клиентская библиотека php поможет вам, получив новый токен доступа, когда это будет необходимо.Вам нужно будет посмотреть это решение, так как токены обновления должны быть долгоживущими и не иметь срока действия, однако, по моему опыту, они могут истекать время от времени, и вам нужно будет снова запросить авторизацию у пользователя.

require_once __DIR__ . '/vendor/autoload.php';
// Use the developers console and download your service account
// credentials in JSON format. Place the file in this directory or
// change the key file location if necessary.
putenv('GOOGLE_APPLICATION_CREDENTIALS='.__DIR__.'/service-account.json');
/**
 * Gets the Google client refreshing auth if needed.
 * Documentation: https://developers.google.com/identity/protocols/OAuth2ServiceAccount
 * Initializes a client object.
 * @return A google client object.
 */
function getGoogleClient() {
    return getServiceAccountClient();
}
/**
 * Builds the Google client object.
 * Documentation: https://developers.google.com/api-client-library/php/auth/service-accounts
 * Scopes will need to be changed depending upon the API's being accessed. 
 * array(Google_Service_Analytics::ANALYTICS_READONLY, Google_Service_Analytics::ANALYTICS)
 * List of Google Scopes: https://developers.google.com/identity/protocols/googlescopes
 * @return A google client object.
 */
function getServiceAccountClient() {
    try {   
        // Create and configure a new client object.        
        $client = new Google_Client();
        $client->useApplicationDefaultCredentials();
        $client->addScope([YOUR SCOPES HERE]);
        return $client;
    } catch (Exception $e) {
        print "An error occurred: " . $e->getMessage();
    }
}

кодскопировано с ServiceAccount.php

...