Как посмотреть путь из списка файлов "google drive api" - PullRequest
1 голос
/ 21 мая 2019

Я подписался https://developers.google.com/drive/api/v2/reference/files/list, успешно!Я получил все это.Но не мой «драйв».Я получил предупреждение «Вам нужно предоставить доступ здесь.Итак, что я должен сделать, чтобы исправить вышеуказанную ошибку?

Я создал новый проект, ключи служебной учетной записи и идентификаторы клиентов OAuth 2.0.но плохо, что он неправильно связывается с моей учетной записью "Google Drive"

Это весь мой код

<?php
    session_start ();

    require_once 'google-api-php-client/src/Google_Client.php';
    require_once 'google-api-php-client/src/contrib/Google_DriveService.php';
    require_once 'google-api-php-client/src/contrib/Google_Oauth2Service.php';
    require_once 'vendor/autoload.php';

    $DRIVE_SCOPE = 'https://www.googleapis.com/auth/drive';
    $SERVICE_ACCOUNT_EMAIL = 'xxx@phim-240702.iam.gserviceaccount.com';
    $SERVICE_ACCOUNT_PKCS12_FILE_PATH = 'phim-240702-a98343eb742a.p12';

    function buildService(){
      global $DRIVE_SCOPE, $SERVICE_ACCOUNT_EMAIL, $SERVICE_ACCOUNT_PKCS12_FILE_PATH;
      $key = file_get_contents($SERVICE_ACCOUNT_PKCS12_FILE_PATH);
      $auth = new Google_AssertionCredentials(
        $SERVICE_ACCOUNT_EMAIL,
        array($DRIVE_SCOPE),
        $key);

    $client = new Google_Client();

    $client->setApplicationName("googletest5");
    $client->setDeveloperKey("b2016fa55e916faf35337ccb1db830ecdb590cc3");
    $client->setUseObjects(true);
    $client->setAssertionCredentials($auth);
    return new Google_DriveService($client);
    }

    /**
     * Insert new file.
     *
     * @param Google_Service_Drive $service Drive API service instance.
     * @param string $title Title of the file to insert, including the extension.
     * @param string $description Description of the file to insert.
     * @param string $parentId Parent folder's ID.
     * @param string $mimeType MIME type of the file to insert.
     * @param string $filename Filename of the file to insert.
     * @return Google_Service_Drive_DriveFile The file that was inserted. NULL is
     *     returned if an API error occurred.
     */
    function insertFile($service, $title, $description, $parentId, $mimeType, $filename) {
      $file = new Google_DriveFile();
      $file->setTitle($title);
      $file->setDescription($description);
      $file->setMimeType($mimeType);

      // Set the parent folder.
      if ($parentId != null) {
        $parent = new Google_Service_Drive_ParentReference();
        $parent->setId($parentId);
        $file->setParents(array($parent));
      }

      try {
        $data = file_get_contents($filename);

        $createdFile = $service->files->insert($file, array(
          'data' => $data,
          'mimeType' => '$mimeType',
        ));

        return $createdFile;
      } catch (Exception $e) {
        print "An error occurred: " . $e->getMessage();
      }
    }

    /**
     * Retrieve a list of File resources.
     *
     * @param Google_Service_Drive $service Drive API service instance.
     * @return Array List of Google_Service_Drive_DriveFile resources.
     */
    function retrieveAllFiles($service) {
      $result = array();
      $pageToken = NULL;

      do {
        try {
      $parameters = array(
        'maxResults' => '100'
        );
          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;
    try {

      $root_id = null;
      $service = buildService();
       print_r(retrieveAllFiles($service));
      }catch (Exception $e) {
         print "An error occurred: " . $e->getMessage();
      }
    ?>

1 Ответ

0 голосов
/ 21 мая 2019

Что вам нужно помнить, так это то, что служебная учетная запись - это не вы. Сервисная учетная запись является фиктивным пользователем. У него есть собственная учетная запись Google Drive. при загрузке файлов в учетную запись диска служебных учетных записей они доступны только этой учетной записи, поскольку она является ее владельцем.

Поделиться диском

Если вы хотите, чтобы он имел доступ к файлам на вашей личной учетной записи диска, вам нужно предоставить ему доступ к ним, предоставив им доступ к адресу электронной почты учетных записей служб. Именно так предварительно утверждаются учетные записи.

Получение пути

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...