Ответы пользователя по тегу Google Drive
  • Как узнать id файла в папке google drive python?

    Chegevara_kyc
    @Chegevara_kyc Автор вопроса
    Оказалось всё очень просто
    Крч как-то так:
    Мне нужно найти file_ids
    (папка не моя)
    модуль Google я вынес в отдельный файл, тк так удобнее в моём проекте

    from Google import Create_Service
    from docx_manage import file_redact
    from google_auth_oauthlib.flow import Flow, InstalledAppFlow
    from googleapiclient.discovery import build
    from googleapiclient.http import MediaFileUpload, MediaIoBaseDownload
    from google.auth.transport.requests import Request
    #folder https://drive.google.com/drive/folders/1NNE2Up-wSW-m_0MIaRyzH-ee4VdLDcT3?usp=sharing
    file_ids = []
    CLIENT_SECRET_FILE = 'client_secrets.json'
    API_NAME = 'drive'
    API_VERSION = 'v3'
    SCOPES = ['https://www.googleapis.com/auth/drive']
    service = Create_Service(CLIENT_SECRET_FILE,API_NAME,API_VERSION, SCOPES)
    par = "'1NNE2Up-wSW-m_0MIaRyzH-ee4VdLDcT3'" #id папки
    Q = str( par +" in parents")
    page_token = None
    response = service.files().list(
    q=Q,                                          
    fields='nextPageToken, files(id, name, parents)',
    pageToken=page_token).execute()
    for file in response.get('files', []):
        # выведет все файла в папке
        print (file.get('name'), file.get('id'), file.get('parents'))
        file_ids.append(str(file.get('id')))
        print(file_ids)

    Код модуля Google.py

    import pickle
    import os
    from google_auth_oauthlib.flow import Flow, InstalledAppFlow
    from googleapiclient.discovery import build
    from googleapiclient.http import MediaFileUpload, MediaIoBaseDownload
    from google.auth.transport.requests import Request
    
    
    def Create_Service(client_secret_file, api_name, api_version, *scopes):
        print(client_secret_file, api_name, api_version, scopes, sep='-')
        CLIENT_SECRET_FILE = client_secret_file
        API_SERVICE_NAME = api_name
        API_VERSION = api_version
        SCOPES = [scope for scope in scopes[0]]
        print(SCOPES)
    
        cred = None
    
        pickle_file = f'token_{API_SERVICE_NAME}_{API_VERSION}.pickle'
        # print(pickle_file)
    
        if os.path.exists(pickle_file):
            with open(pickle_file, 'rb') as token:
                cred = pickle.load(token)
    
        if not cred or not cred.valid:
            if cred and cred.expired and cred.refresh_token:
                cred.refresh(Request())
            else:
                flow = InstalledAppFlow.from_client_secrets_file(CLIENT_SECRET_FILE, SCOPES)
                cred = flow.run_local_server()
    
            with open(pickle_file, 'wb') as token:
                pickle.dump(cred, token)
    
        try:
            service = build(API_SERVICE_NAME, API_VERSION, credentials=cred)
            print(API_SERVICE_NAME, 'service created successfully')
            return service
        except Exception as e:
            print('Unable to connect.')
            print(e)
            return None
    
    def convert_to_RFC_datetime(year=1900, month=1, day=1, hour=0, minute=0):
        dt = datetime.datetime(year, month, day, hour, minute, 0).isoformat() + 'Z'
        return dt

    Ответ написан
    Комментировать