У меня 3 проблемы с API-интерфейсом google drive.
- Acces-токен живет только через 30 минут, и я не могу его обновить sh. Я уже установил
access_type=offline
и написал эту функцию, но по какой-то причине она все еще не работает @staticmethod
def refresh_token():
credentials = google.oauth2.credentials.Credentials(session['google']['credentials'])
if credentials.expired:
credentials.refresh(google.auth.transport.requests.Request())
session['google'].update(credentials=pickle.dumps(credentials))
session.modified = True
Я пытаюсь получить метаданные файла. Я использую fields
arg для получения указанных c полей, но запрос возвращает только id
, kind
, name
и mimeType
. Я пытаюсь получить ссылку для скачивания. Это сработало, но теперь я не знаю, в чем проблема.
@main.route('/ggetlink/<itemid>')
def google_download(itemid):
meta = Drive.Google.get_meta(itemid, 'webContentLink')
return jsonify(href=meta['webContentLink'])
#### in Drive.Google
@staticmethod
def get_meta(file_id, fields):
Google.refresh_token()
drive_service = build('drive', 'v3', credentials=pickle.loads(session['google']['credentials']))
file_meta = drive_service.files().get(fileId=file_id, fields=fields).execute()
for key, value in file_meta.items():
app.logger.info(f'{key}: {value}')
return file_meta
И, наконец, я не могу понять, как сделать файл publi c, я пробовал это, но код не не работает, и я получаю код 403
.
@staticmethod
def update_file(file_id, data):
drive_service = build('drive','v3',credentials=pickle.loads(session['google']['credentials']))
response = drive_service.files().update(fileId=file_id, body=data).execute()
return response
@staticmethod
def public_file(file_id):
Google.update_file(file_id, {'shared': True})
Спасибо за вашу помощь!