Я пытаюсь получить thumbnailLink из файлов с общего диска, используя python и API Google Диска, однако информация о файле не включает thumbnailLink (хотя для большинства файлов поле hasThumbnail, которое я получаю как поле для файла имеет значение true)
Я много оглядывался, и ни одно из найденных мной решений не работает (хотя это мой первый проект python, а также мой первый google drive api project, поэтому я могу просто не знать, что делаю)
Что я пробовал: - установка области действия на 'https://www.googleapis.com/auth/drive' (было ..drive. metadata.readonly ранее) - с использованием подстановочного знака как такового: results = drive.files().list(pageSize=10, fields="*",blablabla...)
. Если я, например, попробую fields = "thumbnailLink", он не найдет никаких файлов. - после получения списка я попытался использовать идентификатор каждого файла из этого списка, чтобы сделать file = service.files().get(fileId=item_id, supportsAllDrives=True, fields="*").execute()
, но происходит то же самое, у меня много полей, включая поле hasThumbnail, для которого установлено значение true, но нет ссылки на миниатюру. - Я пробовал использовать консоль «Попробуйте этот API» на официальном сайте, где я действительно получил ссылку на миниатюру !! (с теми же параметрами, что и выше). Поэтому я не понимаю, почему этого не хватает по запросу из моего приложения.
Изменить (код): у меня есть один такой метод
SCOPES = ['https://www.googleapis.com/auth/drive']
def getDrive():
"""Shows basic usage of the Drive v3 API.
Prints the names and ids of the first 10 files the user has access to.
"""
creds = None
# The file token.pickle stores the user's access and refresh tokens, and is
# created automatically when the authorization flow completes for the first
# time.
if os.path.exists('token.pickle'):
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)
# If there are no (valid) credentials available, let the user log in.
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(
'credentials.json', SCOPES)
creds = flow.run_local_server(port=53209)
# Save the credentials for the next run
with open('token.pickle', 'wb') as token:
pickle.dump(creds, token)
service = build('drive', 'v3', credentials=creds)
return service
, затем я вызываю его отсюда и также получаю файлы:
def getFiles(request):
drive = getDrive()
# Call the Drive v3 API
results = drive.files().list(
pageSize=10, fields="*", driveId="blabla", includeItemsFromAllDrives=True, corpora="drive", supportsAllDrives=True).execute()
items = results.get('files', [])
getItems = []
for item in items:
item_id = item['id']
getItems.append(drive.files().get(fileId=item_id, supportsAllDrives=True, fields="*").execute())
if not items:
print('No files found.')
else:
print('Files:')
print(getItems)
for item in items:
# print(u'{0} ({1})'.format(item['name'], item['id']))
print(item)
return render(request, "index.html", {'files': getItems})
Кроме того, да, я использую учетную запись службы, я могу получить все файлы, которые мне нужны, только не thumbnailLink.
Я не думаю, что это делает имеет смысл вызвать list (), а затем также get (), но я читал, что проблема может быть решена с помощью метода get (), который в моем случае не сработал.