Я не могу получить доступ к файлу с общим доступом, который находится на общем диске Google - PullRequest
0 голосов
/ 03 июля 2019

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

Процесс работает нормально, за исключением того, что один файл, который, как мне известно, доступен моей учетной записи службы, не отображается в списке вывода..

Файл не принадлежит мне, поэтому существует ограничение на то, что я могу показать и проверить. Единственное, что я заметил, это то, что файл проблемы "принадлежит общему диску", тогда как другие не,Кроме того, интерфейс «общего доступа» сильно отличается от того, к которому я привык, я думаю, снова из-за того, что он находится в общем дисковом пространстве.

Снимки экрана: интерфейс общего доступа к проблемным файлам имеет красный / темно-красный цвет в отличие отВы получите обычный синий / серый.

Общий файл диска: интерфейс общего файла problem file

Файл общего диска: общий интерфейс normal file

Когда я делюсь файлом с "нормальной" учетной записью Google, он появляется в интерфейсе диска в общей области, не проблема.

Я предполагаю, что есть какая-тоиерархия разрешений на диске, который блокирует мою служебную учетную запись, надеюсь, хотя есть более простое решение.

То, что я пробовал:

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

Я пробовал различные изменения строковых запросов, например «sharedWithMe», а также просматривал расположение appData и диск.

Если я поделюсьфайл с обычным пользователем Google. Я могу получить к нему доступ через раздел «Поделиться со мной» на диске Google, поэтому он определенно является «общим».

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

с указанием кода файлов для справки

scope = 'https://www.googleapis.com/auth/drive.readonly'
api_name = 'drive'
api_version = 'v3'

##### I have a separate service builder function that is working fine

results = self.service.files().list(
        pageSize=1000, fields="nextPageToken, files(id, name, shared, 
        mimeType)").execute()
self.files = results.get('files', [])
if not self.files:
        print('No files found.')
else:
        print('Files:')
        for file in self.files:
            print(u'{0} ({1})'.format(file['name'], file['id']))

Я ожидаю, что файл общего диска будет указан в выходных данных,но это не так.Другие файлы перечислены правильно.

1 Ответ

0 голосов
/ 03 июля 2019

Чтобы получить доступ к файлам на общем диске, необходимо указать идентификатор диска в методе files: list, используя параметр driveId=XXXXXXXXXXXXXXXXXX.

Сначала вы можете получить его, используя метод Drives: list, предоставленный API REST Google Drive , как показано здесь .

Вы можете получить список файлов на определенном общем диске со следующим кодом:

def getSharedDriveFiles(service):

    service = create_directory_service("Service_Account_Email")

    results = service.drives().list().execute()
    items = results.get('drives', [])

    driveIDs = []

    if not items:
        print('No files found')
    else:
        print('Drives:')
        for item in items:
            print(u'{0} ({1})'.format(item['name'], item['id']))
            driveIDs.append(item['id'])

    results = service.files().list(pageSize = 10, fields='nextPageToken, files(name, id)', driveId='SHARED_DRIVE_ID', corpora='drive', includeItemsFromAllDrives=True, supportsAllDrives=True).execute()

    items = results.get('files', [])
    if not items:
        print('No files found')
    else:
        print('Files:')
        for item in items:
            print(u'{0} ({1})'.format(item['name'], item['id']))

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

...