В запросе Drive API нет файлов Google Диска.

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

def main(argv):

    storage = Storage('drive.dat')
    credentials = storage.get()

    if credentials is None or credentials.invalid:
        credentials = run(FLOW, storage)

    # Create an httplib2.Http object to handle our HTTP requests and authorize it
    # with our good Credentials.
    http = httplib2.Http()
    http = credentials.authorize(http)

    service = build("drive", "v2", http=http)
    retrieve_all_files(service)

Затем в retrieve_all_files я печатаю файлы:

param = {}
if page_token:
    param['pageToken'] = page_token
    files = service.files().list(**param).execute()
    print files

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

2 ответа

Пожалуйста, поправьте меня, если я ошибаюсь, но я верю, что вы используете https://www.googleapis.com/auth/drive.file область действия, которая возвращает только те файлы, которые были созданы или открыто открыты вашим приложением с помощью пользовательского интерфейса Google Диска или Picker API,

Чтобы получить все файлы, вам нужно использовать более широкую область: https://www.googleapis.com/auth/drive,

Чтобы узнать больше о различных областях применения, ознакомьтесь с документацией.

Во-первых, вам нужно перебрать page_token, чтобы получить все содержимое My Drive, а также любые подпапки. Есть еще несколько вещей, которые могут быть такими, как отсутствие запроса и т. Д. Попробуйте это:

def retrieve_all_files(service):
    """ RETURNS a list of files, where each file is a dictionary containing
        keys: [name, id, parents]
    """

    query = "trashed=false"

    page_token = None
    L = []

    while True:
        response = service.files().list(q=query,
                                             spaces='drive',
                                             fields='nextPageToken, files(id, name, parents)',
                                             pageToken=page_token).execute()
        for file in response.get('files', []):  # The second argument is the default
            L.append({"name":file.get('name'), "id":file.get('id'), "parents":file.get('parents')})

        page_token = response.get('nextPageToken', None)  # The second argument is the default

        if page_token is None:  # The base My Drive folder has None
            break

    return L
Другие вопросы по тегам