Files

42 lines
1.7 KiB
Python

"""Пример расширения: файлы Google Drive по ссылке-«просмотру».
Образец для своих экстракторов. Здесь резолв чисто строковый (URL -> прямая
ссылка), без скрейпинга — поэтому тестируется офлайн.
https://drive.google.com/file/d/<ID>/view
-> https://drive.google.com/uc?export=download&id=<ID>
Оговорка: для больших файлов Drive отдаёт HTML-страницу с подтверждением
антивирусной проверки (нужны confirm-токен и cookie) — здесь не покрыто;
для небольших файлов прямая ссылка работает сразу.
"""
from __future__ import annotations
import re
from app.services.downloader import Resolved, SiteExtractor, register
_FILE_ID = re.compile(r"drive\.google\.com/file/d/([\w-]+)")
@register
class GoogleDriveExtractor(SiteExtractor):
"""Google Drive: ссылка-просмотр файла -> прямая загрузка."""
priority = 100
label = "Google Drive"
@classmethod
def matches(cls, url: str) -> bool:
return bool(_FILE_ID.search(url))
async def resolve(self, url: str) -> Resolved:
match = _FILE_ID.search(url)
if not match: # matches() уже проверил, но без него resolve честно падает
raise ValueError(f"Не ссылка на файл Google Drive: {url}")
file_id = match.group(1)
return Resolved(
download_url=f"https://drive.google.com/uc?export=download&id={file_id}"
)