Advertisement
Solingen

search_rutube.py

Jan 17th, 2025
21
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.60 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3.  
  4. import sys
  5. import re
  6. import requests
  7. import webbrowser
  8. from bs4 import BeautifulSoup
  9.  
  10. def remove_banned_words(query, banned_words):
  11.     """
  12.    Если нужно удалить из строки какие-то запрещённые слова.
  13.    Можно вырезать, заменять и т.д.
  14.    """
  15.     for bw in banned_words:
  16.         # Регулярка для "слово" без учёта регистра
  17.         pattern = re.compile(re.escape(bw), re.IGNORECASE)
  18.         query = pattern.sub("", query)
  19.     # Убираем двойные пробелы после замен
  20.     query = re.sub(r"\s+", " ", query).strip()
  21.     return query
  22.  
  23. def main():
  24.     # Здесь можно задать список слов, которые нужно удалять:
  25.     banned_words = ["badword1", "плохое_слово", "запрещенка"]
  26.  
  27.     # Проверим, что мы получили хотя бы 1 аргумент
  28.     if len(sys.argv) < 2:
  29.         print("Не передан поисковый запрос! Ожидается, что скрипт получит аргумент.")
  30.         sys.exit(1)
  31.  
  32.     # Текст от награды
  33.     user_query = sys.argv[1]
  34.  
  35.     # Удалим из него "банворды"
  36.     cleaned_query = remove_banned_words(user_query, banned_words)
  37.  
  38.     # Приписываем «без банвордов»
  39.     # Если нужно добавить в конец запроса, то делаем так:
  40.     final_query = cleaned_query + " без банвордов"
  41.  
  42.     # Собираем URL для запроса к RuTube
  43.     # По состоянию на момент примера, поиск выглядит так:
  44.     # https://rutube.ru/search/?query=DESPACITO
  45.     # Подставляем наш запрос как URL-encoded
  46.     # (requests сам url-encode сделает при использовании params)
  47.     search_url = "https://rutube.ru/search/"
  48.  
  49.     # Параметры запроса
  50.     params = {
  51.         "query": final_query
  52.     }
  53.  
  54.     try:
  55.         r = requests.get(search_url, params=params, timeout=10)
  56.         r.raise_for_status()
  57.     except Exception as e:
  58.         print(f"Ошибка при запросе к RuTube: {e}")
  59.         sys.exit(1)
  60.  
  61.     # Парсим HTML
  62.     soup = BeautifulSoup(r.text, "html.parser")
  63.  
  64.     # Ищем первый блок с результатами.  
  65.     # На момент написания этого ответа структура такая:
  66.     # <a class="card__link" href="/video/...
  67.     # Но это может измениться со временем.
  68.    
  69.     first_link = soup.select_one("a.card__link")
  70.     if not first_link:
  71.         print("Не удалось найти ни одного результата по запросу!")
  72.         sys.exit(0)
  73.  
  74.     # Получаем относительную ссылку
  75.     relative_url = first_link.get("href", "")
  76.     if not relative_url.startswith("/"):
  77.         print("Структура страницы изменилась, относительная ссылка не найдена.")
  78.         sys.exit(0)
  79.  
  80.     # Формируем абсолютную ссылку на видео
  81.     # Обычно это rutube.ru + относительный путь
  82.     video_url = "https://rutube.ru" + relative_url
  83.  
  84.     # Открываем ссылку в браузере по умолчанию
  85.     print(f"Открываем видео: {video_url}")
  86.     webbrowser.open(video_url)
  87.  
  88. if __name__ == "__main__":
  89.     main()
  90.  
  91.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement