Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

36 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🎡 MSOC - Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для быстрого ΠΈ асинхронного поиска ΠΌΡƒΠ·Ρ‹ΠΊΠΈ

Python License PyPI Downloads

✨ ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ

  • ⚑ Асинхронный поиск ΠΌΡƒΠ·Ρ‹ΠΊΠΈ
  • πŸ” ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… источников
  • πŸ› οΈ ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹ΠΌΠΈ Π΄Π²ΠΈΠΆΠΊΠ°ΠΌΠΈ
  • πŸ“¦ ЛСгкая интСграция Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹
  • πŸš€ Быстрая установка Ρ‡Π΅Ρ€Π΅Π· pip
  • πŸ–₯️ TUI (Terminal User Interface) с поиском, ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ скачиваниСм

πŸ“¦ Установка

Для установки Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ pip:

pip install msoc

Π’Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠ· исходников:

git clone https://github.com/paranoik1/msoc.git

cd MSOC

pip install .

πŸš€ ИспользованиС

πŸ–₯️ TUI (Textual User Interface)

ЗапуститС TUI для ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ поиска, ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π½ΠΈΡ ΠΈ скачивания ΠΌΡƒΠ·Ρ‹ΠΊΠΈ:

msoc --tui
# or
python -m msoc --tui

alt text

TUI позволяСт:

  • Π˜ΡΠΊΠ°Ρ‚ΡŒ Ρ‚Ρ€Π΅ΠΊΠΈ ΠΏΠΎ запросу
  • ΠŸΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π΅ΠΊΠΈ Ρ‡Π΅Ρ€Π΅Π· ffmpeg (Π°Π²Ρ‚ΠΎΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ PulseAudio/PipeWire)
  • Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π΅ΠΊΠΈ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ
  • Π’ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ‚Ρ€Π΅ΠΊΠΎΠ²

Π’Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅: для Ρ€Π°Π±ΠΎΡ‚Ρ‹ TUI Π½ΡƒΠΆΠ΅Π½ ffmpeg Π² систСмС. ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ использовался ffmpeg version n8.1.2.

ЭкспСримСнты с ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ

Π’ процСссС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ я экспСримСнтировал с Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ количСство сСтСвых запросов ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹Π²Π°Π½ΠΈΠΈ. Для тСстов использовал wondershaper β€” ΠΏΠΎΠ΄ LinuΡ… ΠΎΠ½ позволяСт искусствСнно Ρ€Π΅Π·Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ½ΡƒΡŽ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ интСрфСйса, Ρ‡Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΡΠΈΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ слабый ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚.

БСйчас воспроизвСдСниС выглядит Ρ‚Π°ΠΊ:

  1. ffmpeg скачиваСт Ρ‚Ρ€Π΅ΠΊ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ (-c:a copy β€” Π±Π΅Π· пСрСкодирования, просто сохраняСт ΠΏΠΎΡ‚ΠΎΠΊ ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ).
    • Для получСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ± Π°ΡƒΠ΄ΠΈΠΎ Ρ„Π°ΠΉΠ»Π΅ Ρ€Π°Π½ΡŒΡˆΠ΅ использовался ffprobe ΠΏΠΎ url Π°ΡƒΠ΄ΠΈΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ присутствовала нСприятная Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ°. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±Ρ‹Π» Π·Π°ΠΌΠ΅Π½Π΅Π½ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ΠΌ stderr ffmpeg процСсса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ скачиваСт Ρ„Π°ΠΉΠ». Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ удаСтся ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ
  2. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ffmpeg Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΡƒΠΆΠ΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΡƒΠ΅Ρ‚ Π² PCM ΠΈ отправляСт Π² sounddevice.

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈ воспроизвСдСниС Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ…, поэтому Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π° β€” ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΡΠ»ΡƒΡˆΠ°Ρ‚ΡŒ, Π½Π΅ доТидаясь ΠΏΠΎΠ»Π½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ скачиваниС

Когда ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚ Download, Π»ΠΎΠ³ΠΈΠΊΠ° такая:

  • Если Ρ‚Ρ€Π΅ΠΊ ΡƒΠΆΠ΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ (докачался Π²ΠΎ врСмя ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π½ΠΈΡ) β€” просто ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ ΠΎΡ‚Ρ‚ΡƒΠ΄Π° Π² Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ. Никаких Π½ΠΎΠ²Ρ‹Ρ… запросов Π² ΡΠ΅Ρ‚ΡŒ.
  • Если Ρ‚Ρ€Π΅ΠΊ прямо сСйчас ΠΈΠ³Ρ€Π°Π΅Ρ‚, Π½ΠΎ Π΅Ρ‰Ρ‘ Π½Π΅ докачался β€” ΠΆΠ΄Ρ‘ΠΌ, ΠΏΠΎΠΊΠ° Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ ffmpeg Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚, ΠΈ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²ΠΈΠ΄ΠΈΡ‚ ... Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅.
  • Если Ρ‚Ρ€Π΅ΠΊ Π½Π΅ ΠΈΠ³Ρ€Π°Π» ΠΈ Π½Π΅ загруТался β€” ffmpeg скачиваСт Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ (-c:a copy), сохраняя Π² Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ.

πŸ’» Π’ консолС

usage: msoc [-h] [--tui] [--mode {fast,full}] [query]

Быстрый асинхронный поиск ΠΌΡƒΠ·Ρ‹ΠΊΠΈ

positional arguments:
  query               ΠŸΠΎΠΈΡΠΊΠΎΠ²Ρ‹ΠΉ запрос

options:
  -h, --help          show this help message and exit
  --tui               Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ графичСский интСрфСйс (TUI)
  --mode {fast,full}  Π Π΅ΠΆΠΈΠΌ поиска: fast (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅
                      страницы) ΠΈΠ»ΠΈ full (всС страницы)

ΠŸΡ€ΠΈ запускС Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½Π° информация ΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… Ρ‚Ρ€Π΅ΠΊΠ°Ρ…: Name, Artist, URL, Engine (Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π΄Π²ΠΈΠΆΠΊΠ°) ΠΈ Meta (Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅).

⌨️ Π’ ΠΊΠΎΠ΄Π΅

Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ msoc ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ search() для поиска ΠΌΡƒΠ·Ρ‹ΠΊΠΈ:

from msoc import search
import asyncio


async def main():
    query = input("Запрос: ")

    async for sound in search(query):
        print(f"Name: {sound.title}\nArtist: {sound.artist}\nURL: {sound.url}")
        print("================================================")


asyncio.run(main())

Ѐункция search() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ поисковый запрос ΠΈ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ mode (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ SearchMode.Fast):

  • SearchMode.Fast β€” ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ выполняСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ запрос (ΠΎΠ΄Π½Π° страница Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ²).
  • SearchMode.Full β€” Π΄Π²ΠΈΠΆΠΎΠΊ пытаСтся ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ всС страницы Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ search_full. Если Π΄Π²ΠΈΠΆΠΎΠΊ Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ search_full, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ search с ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ.
from msoc import search, SearchMode

async for sound in search("query", mode=SearchMode.Full):
    ...

🎢 Класс Sound

Класс Sound содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ пСснС.

ПолС Вип ОписаниС
title str НазваниС пСсни
url str Бсылка Π½Π° скачиваниС
artist str | None Π˜ΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ)
meta dict[str, Any] Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ {})
_engine str | None Π”Π²ΠΈΠΆΠΎΠΊ-источник, заполняСтся автоматичСски

πŸ”Œ Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Π²ΠΈΠΆΠΊΠΈ поиска

Π’ настоящСС врСмя Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° MSOC ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²ΠΈΠΆΠΊΠΈ поиска:

Π”Π²ΠΈΠΆΠΊΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ автоматичСски ΠΏΡ€ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π° msoc.

❌ Exceptions

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° MSOC опрСдСляСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ:

  • LoadedEngineNotFoundError: ВыбрасываСтся, ΠΊΠΎΠ³Π΄Π° Π΄Π²ΠΈΠΆΠΎΠΊ поиска Π½Π΅ Π±Ρ‹Π» Π½Π°ΠΉΠ΄Π΅Π½ Π² Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… Π΄Π²ΠΈΠΆΠΊΠ°Ρ….

πŸ› οΈ Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ своих поисковых Π΄Π²ΠΈΠΆΠΊΠΎΠ²

Для создания собствСнных поисковых Π΄Π²ΠΈΠΆΠΊΠΎΠ² Π½Π° Python Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄:

  1. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ Python-Ρ„Π°ΠΉΠ» для вашСго поискового Π΄Π²ΠΈΠΆΠΊΠ°:

    • НапримСр, создайтС Ρ„Π°ΠΉΠ» my_search_engine.py.
  2. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ search(query), которая Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ поисковый Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ:

    • Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ Π»ΠΎΠ³ΠΈΠΊΡƒ поиска, взаимодСйствуя с API ΠΈΠ»ΠΈ Π²Π΅Π±-страницами источников, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.
    • ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ aiohttp, beautifulsoup4 ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅, для выполнСния HTTP-запросов ΠΈ парсинга HTML-страниц.

Для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Ρ€Π΅ΠΆΠΈΠΌΠ° Mode.Full Π΄Π²ΠΈΠΆΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ search_full(query) с Ρ‚ΠΎΠΉ ΠΆΠ΅ сигнатурой, Ρ‡Ρ‚ΠΎ ΠΈ search. Она Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎ всСм страницам Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ². Если search_full Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°, Mode.Full просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ search (ΠΎΠ΄Π½Π° страница).

Ѐункция search Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Π²ΠΈΠΆΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Sound.
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ search(query) Π² my_search_engine.py:

import aiohttp
from bs4 import BeautifulSoup

from msoc.sound import Sound


async def search(query: str):
    async with aiohttp.ClientSession() as session:
        async with session.get(f"https://example.com/search?q={query}") as response:
            html = await response.text()

    soup = BeautifulSoup(html, "html.parser")

    for item in soup.find_all("div", class_="search-result"):
        name = item.find("h3").get_text(strip=True)
        artist = item.find("span", class_="artist").get_text(strip=True)
        url = item.find("a").get("href")
        yield Sound(name, url, artist)
  1. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ваш поисковый Π΄Π²ΠΈΠΆΠΎΠΊ ΠΊ систСмС:
from msoc import register_engine, get_engines

import my_search_engine


register_engine("my_search_engine", my_search_engine)
print(get_engines())
  • Π—Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ my_search_engine Π½Π° Π½Π°Π·Π²Π°Π½ΠΈΠ΅ вашСго python Ρ„Π°ΠΉΠ»Π°.
  • Π”Π°Π»Π΅Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ get_engines(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π΄Π²ΠΈΠΆΠΎΠΊ Π±Ρ‹Π» ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½
  1. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈ запускС основной search Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ваш Π΄Π²ΠΈΠΆΠΎΠΊ Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ ΠΈ использован для поиска пСсСн

ℹ️ P.S 1

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ поисковой Π΄Π²ΠΈΠΆΠΎΠΊ, Ρ„Π°ΠΉΠ» ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ находится Π½Π΅ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΠ°ΠΏΠΊΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ встроСнным python ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ importlib

from msoc import register_engine
from importlib import util

spec = util.spec_from_file_location("my_search_engine", "/path/to/python/file/my_search_engine.py")
module = util.module_from_spec(spec)

spec.loader.exec_module(module)


register_engine("my_search_engine", module)

ℹ️ P.S 2

Если Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ΅Π½ ΠΊΠ°ΠΊΠΎΠΉ Π»ΠΈΠ±ΠΎ поисковой Π΄Π²ΠΈΠΆΠΎΠΊ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ unload_search_engine для Π΅Π³ΠΎ удалСния ΠΈΠ· Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ…:

from msoc import unload_search_engine, engines

unload_search_engine("my_search_engine")
print(engines())

ℹ️ P.S 3 β€” ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° доступности сСрвиса

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° доступности Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π»Π΅ΠΆΠΈΡ‚ Π½Π° самом Π΄Π²ΠΈΠΆΠΊΠ΅. Если сайт нСдоступСн, Π΄Π²ΠΈΠΆΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ сам ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² search() (Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ пустого Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΈ Ρ‚.Π΄.). msoc Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ запроса для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ β€” лишний сСтСвой Π²Ρ‹Π·ΠΎΠ² Ρ‚ΠΎΠ»ΡŒΠΊΠΎ замСдляСт поиск. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ URL Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ Π΄Π²ΠΈΠΆΠΊΠ° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°ΠΊ константа Π²Π½ΡƒΡ‚Ρ€ΠΈ самого Π΄Π²ΠΈΠΆΠΊΠ°.

🀝 Contribution

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ внСсти свой Π²ΠΊΠ»Π°Π΄ Π² Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ MSOC, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅:

  • 🐞 Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
  • πŸŽ›οΈ Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Π΄Π²ΠΈΠΆΠΊΠΈ поиска
  • πŸ“– Π£Π»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ
  • πŸ”§ Π˜ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹

Open Issues Stars

About

πŸ” Быстрый ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹ΠΉ поисковик ΠΌΡƒΠ·Ρ‹ΠΊΠΈ

Topics

Resources

Stars

Watchers

Forks

Used by

Contributors

Languages