"""Кодро навиштан, ки аз матни нонушта пайвандҳоро мебарорад ва онҳоро мувофиқи қоидаҳои муайяншуда ба тартиб меорад.
Листи пайвандҳо, ки баргардонида мешавад, набояд такрор дошта бошад.
Қоидаҳои тартиб додан чунинанд:
- Приоритет 1: Аввалан аввалин пайвандҳои ёфтшуда дар миқдори self.first_extracted_links
- Приоритет 2: Пас пайвандҳо ба дискҳои облак ва ҳуҷҷатҳо (Yandex Disk ва ғайра)
- Приоритет 3: Пас пайвандҳо ба файлҳо (бо васеъшавиҳо .exe, .pdf, .rar ва ғайра)
- Приоритет 4: Пайвандҳои боқимонда, ба тартиби аз дарозтарин ба кӯтоҳтарин
Ҳамзамон, бояд маҳдудияти шумораи пайвандҳоро ба назар гирифта ва менеджери контекстро амалӣ кард.
Масалан, дар [link] метавон иҷро кард.
Хулоса:
- Ба иҷро 30 дақиқа дода мешавад
- Функсияҳои apply, process, функсияҳо барои менеджери контекст нависед
- Ҳама тестҳо бояд гузаранд
- Тестҳоро наметавон тағир дод
- Импортҳо метавонанд истифода шаванд
- Пас аз навиштан, метавонед онро дар маҳал иҷро кунед ва дар ҳолати зарурӣ ислоҳ кунед
регекс барои ҷустуҷӯи пайвандҳо: (?:https?|ftp):\/\/(?:[a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.[a-zA-Z]{2,}(?::\d+)?(?:\/[^\s()]*)?"""
class LinkExtractor:
DEFAULT_CLOUDS = frozenset((
"drive.google.com",
"mediafire.com",
"yadi.sk",
"disk.yandex.ru",
"cloud.mail.ru",
"mega.nz"
))
# Инметавонед инро васеъ ё навишт
def __init__(self, max_links: int = 7, first_extracted_links: int = 2, clouds = None):
# Максимум шумораи пайвандҳо, ки бояд баргардонида шаванд
self.max_links = max_links
# Шумораи пайвандҳо, ки барои шарти аввал гирифта мешаванд
self.first_extracted_links = first_extracted_links
# Листи домейниҳое, ки ҳамчун облак ҳисоб мешаванд барои шарти дуввум
self.clouds = clouds or self.DEFAULT_CLOUDS
self._results = []
# Инметавонед инро нависед, ки қисми матнро илова мекунад барои таҳлил
def apply(self, text) -> "LinkExtractor":
...
return self