Коротко: Google Drive API дає змогу твоєму застосунку "подружитися" з Google Диском. Ти можеш завантажувати файли (не вручну, а реально через код), створювати папки, сортувати все це добро, отримувати інформацію про файли, шукати потрібне, видаляти та оновлювати вміст — як повноцінний адмін, але через API.
Навіщо це може знадобитись? Уяви реальний застосунок, де користувачі зберігають резюме, скани, фото — все це треба десь тримати. Або, скажімо, ти робиш автоматичну синхронізацію документів, бекап, або просто даєш користувачу можливість скачати потрібний файл прямо із твого сервісу.
І тут Drive API дуже доречний. Він дозволяє реалізувати все це гнучко й надійно.
Налаштування Google Drive API
Перш ніж кидатися в код — потрібно підготувати середовище для роботи.
Створення проєкту в Google Cloud Console
- Зайди в Google Cloud Console.
- Натисни кнопку «Створити проєкт».
- Вкажи назву проєкту (наприклад,
FastAPI_GoogleDrive_Demo). - Після створення перейдіть в "API і сервіси" → "Бібліотека" і увімкни Google Drive API.
Налаштування сервісного акаунта
- Перейдіть в "API і сервіси" → "Облікові дані".
- Натисни "Створити облікові дані" → "Сервісний акаунт".
- Дай назву, наприклад
drive-service-account, і обери роль «Редактор» (Editor). - Після створення сервісного акаунта завантаж JSON-файл з ключем.
- Цей JSON-файл знадобиться нам для аутентифікації в коді.
Права доступу
- У Google Drive (через браузер) створи тестову папку.
- Надай доступ сервісному акаунту (email з JSON-файлу) на рівні цієї папки.
Підключення Google Drive API в FastAPI
Для взаємодії з Google Drive API будемо використовувати бібліотеку google-api-python-client та кілька додаткових:
pip install google-api-python-client google-auth google-auth-httplib2 google-auth-oauthlib
Ці бібліотеки допоможуть налаштувати аутентифікацію і працювати з API.
У проєкті створюємо файл google_drive.py. Цей модуль відповідатиме за інтеграцію з Drive:
from google.oauth2 import service_account
from googleapiclient.discovery import build
# Завантаження JSON-файлу з ключем
CREDENTIALS_FILE = "path/to/your/credentials.json"
# Налаштовуємо права доступу для API
SCOPES = ['https://www.googleapis.com/auth/drive']
def build_drive_service():
# Створюємо об'єкт авторизації
credentials = service_account.Credentials.from_service_account_file(
CREDENTIALS_FILE, scopes=SCOPES
)
# Створюємо обгортку для взаємодії з API
service = build('drive', 'v3', credentials=credentials)
return service
Тепер у нас є функція build_drive_service(), яка повертає об'єкт для роботи з Google Drive API.
Завантаження файлів у Google Drive
Додамо функцію завантаження файлу в google_drive.py:
def upload_file(file_name, file_path, mime_type, parent_folder_id=None):
service = build_drive_service()
# Формуємо метадані файлу
file_metadata = {
'name': file_name,
}
if parent_folder_id:
file_metadata['parents'] = [parent_folder_id]
# Завантажуємо файл
media = MediaFileUpload(file_path, mimetype=mime_type)
uploaded_file = service.files().create(
body=file_metadata,
media_body=media,
fields='id, name'
).execute()
return uploaded_file
file_name— ім'я файлу, яке відображатиметься у Drive.file_path— шлях до файлу на твоєму диску.mime_type— тип файлу (наприклад,application/pdfдля PDF абоimage/jpegдля JPEG).parent_folder_id— ID папки, куди буде завантажено файл (опційно).
Додамо endpoint для завантаження файлів в main.py:
from fastapi import FastAPI, File, UploadFile
from google_drive import upload_file
app = FastAPI()
@app.post("/upload/")
async def upload_to_drive(file: UploadFile = File(...)):
# Зберігаємо тимчасовий файл
with open(file.filename, "wb") as temp_file:
temp_file.write(await file.read())
# Завантажуємо файл у Google Drive
uploaded_file = upload_file(
file_name=file.filename,
file_path=file.filename,
mime_type=file.content_type,
)
return {"file_id": uploaded_file.get("id"), "name": uploaded_file.get("name")}
Протестуємо:
- Запусти FastAPI-застосунок:
uvicorn main:app --reload - Через Swagger UI (http://127.0.0.1:8000/docs) завантаж файл.
- Перевір, чи з'явився файл у твоїй папці Google Drive.
Керування файлами та папками
Додамо функцію для створення папок у Google Drive:
def create_folder(folder_name, parent_folder_id=None):
service = build_drive_service()
folder_metadata = {
'name': folder_name,
'mimeType': 'application/vnd.google-apps.folder'
}
if parent_folder_id:
folder_metadata['parents'] = [parent_folder_id]
folder = service.files().create(
body=folder_metadata,
fields='id, name'
).execute()
return folder
Видалення файлу або папки:
def delete_file(file_id):
service = build_drive_service()
service.files().delete(fileId=file_id).execute()
Тепер у нас є можливість створювати папки і видаляти файли.
Приклад: завантаження файлів у конкретну папку
Припустимо, ми хочемо завантажувати всі файли в заздалегідь підготовлену папку. Для цього:
- Створи папку в Google Drive і скопіюй її ID.
- Використовуй
parent_folder_idз попередніх функцій.
Приклад endpoint'у FastAPI:
@app.post("/upload_to_folder/")
async def upload_file_to_folder(file: UploadFile = File(...), folder_id: str):
with open(file.filename, "wb") as temp_file:
temp_file.write(await file.read())
uploaded_file = upload_file(
file_name=file.filename,
file_path=file.filename,
mime_type=file.content_type,
parent_folder_id=folder_id
)
return {"file_id": uploaded_file.get("id"), "name": uploaded_file.get("name")}
Чек-лист того, що ми дізналися
- Інтегрували Google Drive API з FastAPI.
- Створили сервісний акаунт для аутентифікації.
- Розробили функції для завантаження файлів, створення папок і видалення файлів.
- Реалізували endpoint'и для завантаження файлів у FastAPI-застосунку.
Тепер твій застосунок може вільно взаємодіяти з хмарою, і ти можеш дозволити користувачам завантажувати та зберігати свої дані в Google Drive. Хто знає, можливо, це початок створення твого майбутнього файлового менеджера?
Для додаткової інформації і довідки звернися до офіційної документації Google Drive API.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ