Python Google Drive API Загрузить личные файлы Google Login Screen - PullRequest
1 голос
/ 07 октября 2019

Я могу скачать публичные файлы без проблем. Будучи администратором, я составлю список тех, кто может загрузить приватный файл. (Функция Google Диска) Это мой код: https://stackoverflow.com/posts/39225272/revisions У меня есть файл oauth2client и google-drive-credentials.json в папке .credentials. В этом файле (google-drive-credentials) доступны «access_token» и «refresh_token». Когда я пытаюсь загрузить файлы PRIVATE, Google возвращает html-файл экрана входа в систему с запросом. Мне нужно передать это с автоматом. Это никогда не должно происходить.

Вот мой код:

 SCOPES = 'https://www.googleapis.com/auth/drive'
        CLIENT_SECRET_FILE = 'client_secret.json'
        APPLICATION_NAME = 'abc'
        authInst = auth.auth(SCOPES, CLIENT_SECRET_FILE, APPLICATION_NAME)
        credentials = authInst.getCredentials()
        URL = "https://docs.google.com/uc?export=download"            
        session = requests.Session()
        session2 = requests.Session()
        toplamyari = int(int(toplamboyut) / 2)


        if os.path.exists(yazp1):
            sizefile = os.path.getsize(yazp1)
            yazmaModu = 'ab'
            bytearalik = 'bytes=' + str(sizefile) + '-' + str(toplamyari)
        else:
            bytearalik = 'bytes=0' + '-' + str(toplamyari)

        if os.path.exists(yazp1[0:len(yazp1)-1]+"2"):
            dosyaboy=os.path.getsize(str(yazp1[0:len(yazp1)-1])+'2')
            self.temp2boyut=dosyaboy
            bytearalik2 = 'bytes=' + str(toplamyari + 1 + dosyaboy) + '-' + str(toplamboyut)
        else:
            bytearalik2 = 'bytes=' + str(toplamyari+1) + '-' + str(toplamboyut)
        arlik2=int(int(toplamboyut)-int(toplamyari))


        accessToken = credentials.access_token

        session.headers.update({'Range': bytearalik, 'Authorization':'Bearer " + accessToken})

        #session2.headers.update({'Range': bytearalik2}) #don't worry about that, that's for download faster(download 2 part at same time)



        response = session.get(URL, params={'id':link}, headers={'Authorization':'Bearer '+accessToken}, stream=True)

с этим кодом, как я уже сказал, я могу загружать файлы PUBLIC, но не могу скачивать доступ к данным частным файлам. Я думаю, что запрос не доступ, ИДК. И извините за английский. Спасибо за все.

1 Ответ

0 голосов
/ 09 октября 2019

ИСПРАВЛЕНО Изменен URL.

        accessToken = credentials.access_token
        #refreshTok=credentials.refresh_token
        tokenTotal = 'Bearer ' + str(accessToken)

        session.headers.update({'Range': bytearalik, 'Authorization':tokenTotal, 'token_type':'Bearer'})
        session2.headers.update(
            {'Range': bytearalik2,  'Authorization':tokenTotal ,'token_type': 'Bearer', 'accept': '*/*',
             'accept-encoding': 'gzip, deflate', 'user-agent': '(gzip)',
             'x-goog-api-client': 'gdcl/1.7.11 gl-python/3.7.3'})
        URL='https://www.googleapis.com/drive/v3/files/'+link+'?alt=media'

        download = self.DownladInfo()
        download.create(self.getOyunfromID(listedekiIndex), boyut, 0, listedekiIndex, sifre, hizlimiti)
        download.driveadi = dosyadi[0:dosyadi.rfind('.')]

        self.indirilecek_indexler.append(download)

        response = session.get(URL, stream=True)
        response2 = session2.get(URL, stream=True)
        if response.status_code != 206 or response2.status_code != 206:
            self.indirmeyebaslarkenhatalar.append(response.status_code)
            return
...