Здравствуйте! Удалось реализовать доступ к содержимому диска через веб-морду OAuth2, однако каждый раз происходит запрос авторизации у пользователя, чего хотелось бы избежать. Есть 1 учётная запись, которая владеет всем необходимым на гугл диске, нужно читать содержимое конкретной директории при заходе пользователя по веб. Может у кого уже реализован такой механизм? Интересует всё, включая открытие доступа со стороны учётных записей google. Заранее большое спасибо за помощь!
Давно это я делал, поэтому могу вспомнить не всё. 1. Регистрируем СЕРВИСНЫЙ аккаунт https://console.developers.google.com/iam-admin/serviceaccounts. 2. Скачиваем ключ в формате json и размещаем его в любой папке на сервере. (про права доступа к ключу не стоит забывать) 3. Предоставляем права доступа приложению к различным сервисам гугла (исходя из потребностей: excel, word) 4. Если делать через пыху, то качаем библиотеку Google Api : https://github.com/googleapis/google-api-php-client/releases и заливаем её на хост. Отступление: можно композером, я лично делал руками. 5. Авторизация и получения экземпляра сервиса : Писал чисто для себя, поэтому если что, не помидорами не кидайтесь и правьте под свои нужды. Код (Text): // подключаем библиотеку require_once '../../Google_API/vendor/autoload.php'; use \Google_Client; use \Google_Service_Drive; use \Google_Service_Sheets; class GoogleServiceProvider { private const SECRET_PATH = 'путь к фаилу.json'; static public function drive() : Google_Service_Drive { $credentials_file = self::getSecretPath(); $client = new Google_Client(); $client->setAuthConfig($credentials_file); $client->addScope(Google_Service_Drive::DRIVE); $service = new Google_Service_Drive($client); return $service; } static public function sheets() : Google_Service_Sheets { $credentials_file = self::getSecretPath(); $client = new Google_Client(); $client->setAuthConfig($credentials_file); $client->addScope(Google_Service_Sheets::SPREADSHEETS_READONLY); $service = new Google_Service_Sheets($client); return $service; } static private function getSecretPath() { $path = self::SECRET_PATH; if(file_exists($path)) { return $path; } die('Secret file doesnt exists'); } } 6. Вытягиваем данные из таблицы: Код (Text): $spreadsheetId = 'XXXXXXXXX'; // ID гугл документа, можно взять из браузерной строки $service = GoogleServiceProvider::drive(); // подключаемся // отправляем запрос и получаем ответ $response = $service->files->export($spreadsheetId, 'text/csv', [ 'alt' => 'media' ]); // берём данные из ответа $content = $response->getBody()->getContents(); var_dump($content); 7. Радуемся результату