В запросе 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