From 2a8326be06caac923d6545d47c2936226c40fc3b Mon Sep 17 00:00:00 2001 From: vvzvlad Date: Tue, 8 Apr 2025 18:38:13 +0300 Subject: [PATCH] Implement URL-based title generation --- post_parser.py | 7 +++++++ tests/test_post_parser.py | 25 ++++++++++++++++++++----- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/post_parser.py b/post_parser.py index fb57b5f..6fbe494 100644 --- a/post_parser.py +++ b/post_parser.py @@ -145,6 +145,13 @@ class PostParser: # If there was a YouTube link if re.search(r'(?:youtube\.com|youtu\.be)', text_stripped.lower()): return "🎥 YouTube Link" + + # Check if we have a web_page with title and text is basically just a URL + if message.web_page and message.web_page.title: + # Проверяем, что текст - это по сути только URL + url_match = re.match(r'^(https?://[^\s<>"\']+)$', text_stripped) + if url_match: + return f"🔗 {message.web_page.title}" # Otherwise, it's a normal web link return "🔗 Web link" diff --git a/tests/test_post_parser.py b/tests/test_post_parser.py index 761292f..1474453 100644 --- a/tests/test_post_parser.py +++ b/tests/test_post_parser.py @@ -133,11 +133,6 @@ class TestPostParserGenerateTitle(unittest.TestCase): message = self._create_mock_message(text="
https://link.com \n ") self.assertEqual(self.parser._generate_title(message), "🔗 Web link") - def test_generate_title_webpage_preview_only(self): - web_page_mock = MagicMock() - web_page_mock.title = "Web page title" - message = self._create_mock_message(web_page=web_page_mock, text=" ") # Text is whitespace only - self.assertEqual(self.parser._generate_title(message), "🔗 Web page title") def test_generate_title_webpage_preview_ignored_with_media(self): web_page_mock = MagicMock() @@ -169,5 +164,25 @@ class TestPostParserGenerateTitle(unittest.TestCase): message = self._create_mock_message(media=MessageMediaType.WEB_PAGE, text="Check this out") self.assertEqual(self.parser._generate_title(message), "Check this out") + def test_generate_title_webpage_with_url_text(self): + """Test case that reproduces real issue with VK video link.""" + # Создаем мок для web_page + web_page_mock = MagicMock() + web_page_mock.title = "Web page title" + + # Создаем сообщение с текстом URL и mock web_page + message = self._create_mock_message( + web_page=web_page_mock, + text="https://vkvideo.ru/video295754128_456239449" + ) + + self.assertEqual(self.parser._generate_title(message), "🔗 Web page title") + + def test_generate_title_webpage_without_url_text(self): + web_page_mock = MagicMock() + web_page_mock.title = "Web page title" + message = self._create_mock_message(web_page=web_page_mock) # Text is whitespace only + self.assertEqual(self.parser._generate_title(message), "🔗 Web page title") + if __name__ == '__main__': unittest.main() \ No newline at end of file