-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Больше #13
Comments
После долгой эксплуатации скрипта есть схожие пожелания, но нынешняя кодовая база парсеров не очень удачно вышла и её необходимо переписать. Про CLI вообще без комментариев, там всё плохо и печально и проблемно расширять функционал. |
Я думал взять yt-dlp, создавать аниме экстракторы к yt-dlp и сделать cli интерфейс для yt-dlp. Но у yt-dlp нету механизма для выбора озвучки. |
Извиняюсь за долгий ответ, словил ковид и лечился от него 😰, щас мне лучше, теперь по ответам на моё на видение развития проекта: yt-dlp хороший инструмент, его реально использоваться для скачивания видео по прямым ссылкам на kodik/aniboom/sibnet etc. ссылках, но пока рано делать экстракторы под их решение, в планах перевести все запросы на httpx библиотеку, чтобы была поддержка http/2 протокола и asyncio, а также доработать решение выше, чтобы результаты поиска вхождений регулярных выражений было удобнее конвертировать в датаклассы для более удобной работы с полученными результатами. Оно пригодится, так как получение данных преимущественно идёт не через json api, на через парсинг html документа. Скриншот выше это не конечный результат программного интерфейса, будут доработки, как и с сама архитектура проекта будет переделана. Shikimori можно без токена использовать, если только надо получать информацию о контенте, сторонние решения скорее всего не буду использовать, а буду полагаться на автоматическую генерацию API на основе их официальной документации, если конечно не будет готового под httpx, чтобы и sync и async умел одновременно. Pull requests пока не буду принимать, пока не будет видна чёткая архитектура проекта, актуальное решение под получение подробных метаданных по типу картинок, описания, трейлеров и ТД не удобно и не годится |
Хорошо, я понял. Нужна архитектура.
|
Это решение изначально был скрипт на 300 строк под animego и был рассчитан на применение в *nix системах в терминале. В ходе расширения проекта допустил косяки в написании, не задумываясь особо на расширяемость, гибкость и удобную ремонтопригодность проекта. Например, я зашел в один из экстракторов и запутался в коде 😅 В планах примерно у меня будут следующие действия:
После масштабного рефакторинга (скорее всего переписывание хех) можно будет действовать. Из пунктов выше получение комментариев out of scope, этот проект про просмотр мультиков, а не создание альтернативного клиента под каждый источник (если конечно не докинут регулярных выражений). Случайный поиск я хотел добавить, но тогда регулярные выражения нестабильные были и в основном клиент крашился с ошибкой да и не везде он есть, - эта фича тоже под вопросом. |
В dev ветке переписал код с рабочей реализацией animego, это не конечный вариант, регулярные выражения не проверены временем и могут "давать осечку". Вкратце, следующие изменения:
https://github.com/vypivshiy/ani-cli-ru/tree/dev/anicli_api В приоритете:
После этого будет перенос остальных экстракторов, обновление CLI утилиты, добавление shikimori |
Это все хорошо, но писать регулярки это ад. Это их надо упрощать, почему нельзя весь html сериализовать или хотя бы делать срезы в нужных местах. |
Это да, время надо для написание надёжных регулярных выражений, но это универсальный способ всё получать, а в некоторых местах вообще неприменимо будет использовать такие решения по типу bs4. Сложность только можно частично снизить документацией с примерами как здесь и здесь при быстрой проверке с помощью этого онлайн инструмента regex101 Если я не прав, можешь написать идею с примером на bs4, его было бы использовать для упрощения для таких ситуаций, но он только эффективен в xml/html, большинство задач только регулярками решать |
Да, я согласен. Это было просто моё нытьё.
Я заметил что регулярки в |
Это обязательно надо делать, эта первая реализация like Proof of Concept, будут изменения Насчёт bs4: я не использовал продвинутые фичи этой библиотеки, посмотрел документацию и оказывается умеет принимать регулярные выражения, списки и функции с необходимым фильтрами. И провёл тесты, если докинуть транслятор ключей на латиницу, то вполне оправдано частично от регулярок отказаться для упрощения написания from bs4 import BeautifulSoup
import pathlib
def extract_meta(text: str):
soup = BeautifulSoup(text, "html.parser")
title = soup.find("div", attrs={"class": "anime-title"}).find_next("h1").get_text()
synonyms = [t.get_text(strip=True) for t in soup.find("div", attrs={"class": "synonyms"}).find_all("li")]
rating = soup.find("span", class_="rating-value").get_text(strip=True)
print(title, synonyms, rating)
meta_table = soup.find("dl", attrs={"class": "row"})
keys, values = [], []
for el in meta_table.find_all("dt"):
key = el.get_text(strip=True)
value = el.find_next("dd").get_text(strip=True)
keys.append(key)
values.append(value)
print(key, value)
rez = dict(zip(keys, values))
print(len(rez.keys()), rez)
print("----")
if __name__ == '__main__':
txt = pathlib.Path("test.html").read_text()
extract_meta(txt)
from anicli_api._http import BaseHTTPSync # equal httpx.get or requests.get with set headers
txt2 = BaseHTTPSync().session.get("https://animego.org/anime/eksperimenty-leyn-m1114").text
extract_meta(txt2)
txt3 = BaseHTTPSync().session.get("https://animego.org/anime/mastera-mecha-onlayn-309").text
extract_meta(txt3)
txt4 = BaseHTTPSync().session.get("https://animego.org/anime/vayolet-evergarden-film-m1778").text
extract_meta(txt4) output:
|
С архитектурой закончено, что осталось для релиза:
|
более менее рабочая версия есть с 75% покрытием тестами. после этого приступлю к переписыванию CLI интерфейса в этом репозитории, а пока можешь посмотреть наработки |
api обёртка пока более менее готова с какой то документацией и надежность есть хотя бы на уровне тестов, Его выбрал по следующим причинам:
|
Это круто! |
Накидал демку с архитектурой как у популярных популярных ботов и микро веб феймворков Предполагаю, что такое решение будет сбалансировано в плане простоты добавления, изменения функционала и кастомизации. И если кому-то будет не лень, то реально и встраивать те же диалоговые окна Пока не хватает middleware фильтров и прочие мелкие фиксы demo.mp4 |
Накидал более "реалистичную" демку CLI-prompt клиента. В будущем примерно так будет выглядеть структура проекта, но есть недостатки:
А так считаю удачной эту экспериментальную обёртку под prompt-toolkit, в будущем можно отделить эту логику в другой репозиторий, для удобного выполнения подобных задач. demo2.mp4 |
очередная сырая демка. Функционал как в самых первых коммитах: только animego и по одному видео загружать cli_demo.mp4 |
На основе prompt-toolkit сделан не только клон vim'a, но и клон tmux это значит что в теории можно сделать вкладки, и превратить это в консольный браузер где можно смотреть несколько аниме одновременно. |
output3.mp4Я увидел удобную фичу в anipy-cli, где после каждого просмотра эпизода пользователю предлагают сразу запустить следующий эпизод, а то постоянно писать номера серий не очень удобно. |
С заголовком mpv окна хорошая идея. А теперь что сделано:
Отдаленно напоминает по дизайну фреймворки под ботов. Тема создания терминальных приложений в наше время маргинальная, по удобным инструментам всё скудно, поэтому имеем такой костыльный велосипед
Пока еще сыро и присутствуют баги с недочетами, осталось их устранить и будет можно лить в мастер с pypi. И докину сюда доску с тасками как и что развивать в планах дальше, вроде на гитхабе так можно делать раз уж с архитектурной частью проекта более менее вопросы решены demo4.mp4 |
Хочу больше функций, а именно:
The text was updated successfully, but these errors were encountered: