Skip to content

paranoik1/msoc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

15 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

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

Python License PyPI Downloads

MSOC Banner

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

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

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

MSOC - это Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π° Python для быстрого ΠΈ асинхронного поиска ΠΌΡƒΠ·Ρ‹ΠΊΠΈ Π² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅. Она позволяСт ΠΈΡΠΊΠ°Ρ‚ΡŒ Ρ‚Ρ€Π΅ΠΊΠΈ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΡƒΠ·Ρ‹ΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… сайтах ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… Ρ‚Ρ€Π΅ΠΊΠ°Ρ…, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΈΡ… названия ΠΈ ссылки Π½Π° скачиваниС.

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

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

pip install msoc

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

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

cd MSOC

pip install .

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

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

МоТно ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ скриптом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» установлСн послС установки самой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ:

msoc <query or empty>
# or
python -m msoc <query or empy>

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

Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ 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() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ поисковый запрос Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ асинхронный Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Sound с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… Ρ‚Ρ€Π΅ΠΊΠ°Ρ….

🎢 Класс Sound

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

Атрибуты:

  • title (str): НазваниС пСсни.
  • url (str | None): Бсылка Π½Π° скачиваниС пСсни. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ None, Ссли ссылка нСдоступна (ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚).
  • artist (str | None): Π˜ΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ пСсни. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ None, Ссли информация ΠΎΠ± исполнитСлС нСдоступна (ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚).

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

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

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Π΄Π²ΠΈΠΆΠΊΠΈ поиска, создавая ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ загруТая ΠΈΡ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ load_search_engine() ΠΈ unload_search_engine().

❌ Exceptions

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

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

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

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

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

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

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

Ѐункция 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 load_search_engine, engines

import my_search_engine


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

ℹ️ P.S 1

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

from msoc import load_search_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)


load_search_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())

🀝 Contribution

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

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

Open Issues Stars

About

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

Topics

Resources

Stars

Watchers

Forks

Contributors

Languages