Skip to main content

Быстрый поисковик музыки

Project description

🎵 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 empty>

При запуске будет выведена информация о найденных треках: 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() принимает поисковый запрос в качестве аргумента и возвращает асинхронный генератор, который генерирует объекты Sound с информацией о найденных треках.

🎶 Класс Sound

Класс Sound содержит информацию о песне.

Атрибуты:

  • title (str): Название песни.
  • url (str | None): Ссылка на скачивание песни. Может быть None, если ссылка недоступна (Необязательный атрибут).
  • artist (str | None): Исполнитель песни. Может быть None, если информация об исполнителе недоступна (Необязательный атрибут).
  • meta (dict[str, Any]): Дополнительные метаданные трека.
  • _engine (str | None): Название движка, нашедшего трек (заполняется автоматически).

🔌 Реализованные движки поиска

В настоящее время библиотека MSOC поддерживает следующие движки поиска:

  • zaycev_net: Поиск на сайте zaycev.net
  • hitmo: Поиск на сайте rus.hitmotop.com - реализован на основе данного кода
  • muzbomb: Поиск на сайте muzbomb.net - создан takilow
  • trekson: Поиск на сайте trekson.net ⚠️ отключён — сайт обновлён, требуется обновление парсера

Движки загружаются автоматически при импорте пакета msoc.

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

🤝 Contribution

Если вы хотите внести свой вклад в развитие библиотеки MSOC, вы можете:

  • 🐞 Сообщить об ошибках или предложить новые функции
  • 🎛️ Разработать и добавить новые движки поиска
  • 📖 Улучшить документацию
  • 🔧 Исправить существующие проблемы

Open Issues Stars

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

msoc-0.2.1.tar.gz (13.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

msoc-0.2.1-py3-none-any.whl (16.6 kB view details)

Uploaded Python 3

File details

Details for the file msoc-0.2.1.tar.gz.

File metadata

  • Download URL: msoc-0.2.1.tar.gz
  • Upload date:
  • Size: 13.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for msoc-0.2.1.tar.gz
Algorithm Hash digest
SHA256 11505a68f19ec93bd145dafbf8f97af47f454d0b14de15805df460059930e4a4
MD5 f83f0266fc7dc8aff3a16da55300e365
BLAKE2b-256 1eb5980713a207b863521935f6bfc234c5f55459b785f5387694f50e00387870

See more details on using hashes here.

File details

Details for the file msoc-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: msoc-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 16.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for msoc-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 40157c97feddd531c3fe6101ac2ccf49ba628a1770b1e8e064321d275fd3dc5b
MD5 2d86e7d24eeec7eb9dbee93672abc156
BLAKE2b-256 704033ff5395f5d558e26df42b4ebd0029d3b98a07e97812c9c32128a5e2a8e1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page