From 1b1746db06097fd5d0789ed34266a67700b26f90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=A5=D1=80?= =?UTF-8?q?=D0=B0=D0=BC=D0=BE=D0=B2?= Date: Sun, 16 Jun 2024 16:04:34 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=82?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 ++- news-bot.py | 53 ++++++++++++++++++++++++++++------------------------- 2 files changed, 30 insertions(+), 26 deletions(-) diff --git a/.gitignore b/.gitignore index 56c5ae7..8f2a5cb 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ __pycache__ keys*.py vkdel.py tgdel.py -*.session \ No newline at end of file +*.session +*del-tests.py \ No newline at end of file diff --git a/news-bot.py b/news-bot.py index f181a3d..ee368aa 100755 --- a/news-bot.py +++ b/news-bot.py @@ -19,7 +19,7 @@ from telethon.errors import FloodWaitError import keys url_post = "https://linux-gaming.ru/posts.json" -url_news = "https://linux-gaming.ru/c/news/6.json" +url_news = f"https://linux-gaming.ru/c/news/6.json" url_vk_post = "https://api.vk.com/method/wall.post" url_vk_get = "https://api.vk.com/method/wall.get" url_changelog = "https://gitlab.eterfund.ru/Castro-Fidel/PortWINE/raw/master/data_from_portwine/changelog_ru" @@ -40,7 +40,7 @@ params_get = { } logger = logging.getLogger() -logger.setLevel(logging.INFO) +logger.setLevel(logging.DEBUG) handler = colorlog.StreamHandler() handler.setFormatter(colorlog.ColoredFormatter( @@ -73,6 +73,7 @@ def make_soup(resp_changelog): def html_to_text(html_content): logging.debug(f"Вызываем html_to_text") logging.debug(f"HTML на входе {html_content}") + h = html2text.HTML2Text() h.ignore_links = False # Сохранение ссылок h.ignore_images = True # Игнорирование изображений @@ -95,12 +96,6 @@ def html_to_text(html_content): # Удаление строк, содержащих '* * *' markdown_text = re.sub(r'^.*\* \* \*.*$', '', markdown_text, flags=re.MULTILINE) - # Фикс ненумерованных списков - markdown_text = re.sub(r'^.*\* ', '* ', markdown_text, flags=re.MULTILINE) - - # Убираем переносы строк, кроме строк, начинающихся с * - markdown_text = re.sub(r'^(?!\*).*?\n(?!\*)', lambda x: x.group(0).replace('\n', ' '), markdown_text, flags=re.MULTILINE) - # Преобразование всех ссылок с параметрами URL markdown_text = convert_links(markdown_text) @@ -134,6 +129,9 @@ def html_to_text(html_content): re.sub(r'^.*\* \* \*.*$', '', markdown_text) markdown_text = re.sub(r'История изменений:', r'\n', markdown_text) + # Удаление лишних отступов для строк, начинающихся с '*' + markdown_text = re.sub(r' \*', r'*', markdown_text) + logging.debug(f"Текст после обработки {markdown_text}") return markdown_text @@ -145,6 +143,7 @@ def convert_links(text): logging.debug(f"Возврат url_pattern {url_pattern}") return url_pattern + def decode_url_params(url): logging.debug(f"Входим в decode_url_params") parsed_url = urllib.parse.urlparse(url) @@ -164,6 +163,7 @@ def remove_empty_lines(text_data): logging.debug(f"Возврат non_empty_lines {non_empty_lines}") return non_empty_lines + def remove_markdown_links(markdown_text): logging.debug(f"Входим в remove_markdown_links") # Регулярное выражение для поиска Markdown-ссылок и замена их на только URL @@ -251,7 +251,7 @@ def news_content(post_id): return None -def response_get(url, heads_site): +def response_get(url, heads_site=None): try: if heads_site == params_get: return requests.get(url, params=params_get) @@ -321,25 +321,28 @@ def check_version(last_changelog, resp_changelog): return None numbers = [extract_number(title) for _, title in list_titles_and_ids if extract_number(title) is not None] - last_topics_script = max(numbers) - logging.info(f"Последняя новость на сайте о версии: {last_topics_script}") + if numbers: + last_topics_script = max(numbers) + logging.info(f"Последняя новость на сайте о версии: {last_topics_script}") - if last_topics_script < last_changelog: - list_new_ver = [] + if last_topics_script < last_changelog: + list_new_ver = [] - for script_ver in range(last_topics_script + 1, last_changelog + 1): - list_new_ver.append(script_ver) - logging.info(f"Найдена новая версия скрипта {script_ver}") - changelog_text, post_data, params = script_content(script_ver, resp_changelog) - if post_data: - logging.debug(f"Публикуем {post_data}") - site_post(url_post, heads_site, post_data) + for script_ver in range(last_topics_script + 1, last_changelog + 1): + list_new_ver.append(script_ver) + logging.info(f"Найдена новая версия скрипта {script_ver}") + changelog_text, post_data, params = script_content(script_ver, resp_changelog) + if post_data: + logging.debug(f"Публикуем {post_data}") + site_post(url_post, heads_site, post_data) - if not list_new_ver: - logging.warning(f"Не найдена новая версия скрипта") - sys.exit() + if not list_new_ver: + logging.warning(f"Не найдена новая версия скрипта") + sys.exit() + else: + logging.warning("Нет новых версий скриптов PortProton") else: - logging.warning("Нет новых версий скриптов PortProton") + logging.warning("На сайте нет новостей о скриптах") async def discord_post(post_text, client): @@ -399,7 +402,7 @@ def check_discord_public(): for topic_id, topic_title in reversed(list_for_public): text_data = news_content(topic_id) if text_data: - content = f"----------------------------------------------------------\n### {topic_title}\t\n" + text_data + "\n" + "@here" + content = f"----------------------------------------------------------\n### {topic_title}\t\n" + text_data + "\n" # Разбиваем содержимое на части по 4000 символов for i in range(0, len(content), 2000): await channel.send(content[i:i+2000])