Проблемы с google drive python api - refre sh token, получение мета файла, обновление мета файла - PullRequest
0 голосов
/ 14 февраля 2020

У меня 3 проблемы с API-интерфейсом google drive.

  1. 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
    
  2. Я пытаюсь получить метаданные файла. Я использую 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
    
  3. И, наконец, я не могу понять, как сделать файл 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})
    

Спасибо за вашу помощь!

...