- β‘ ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ ΠΏΠΎΠΈΡΠΊ ΠΌΡΠ·ΡΠΊΠΈ
- π ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ²
- π οΈ ΠΡΠΎΡΡΠΎΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΠΌΠΈ Π΄Π²ΠΈΠΆΠΊΠ°ΠΌΠΈ
- π¦ ΠΠ΅Π³ΠΊΠ°Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΡ
- π ΠΡΡΡΡΠ°Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ΅ΡΠ΅Π· 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 ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΠ΅ΡΠ½Π΅.
ΠΡΡΠΈΠ±ΡΡΡ:
title (str): ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ½ΠΈ.url (str | None): Π‘ΡΡΠ»ΠΊΠ° Π½Π° ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ½ΠΈ. ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ None, Π΅ΡΠ»ΠΈ ΡΡΡΠ»ΠΊΠ° Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Π° (ΠΠ΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΉ Π°ΡΡΠΈΠ±ΡΡ).artist (str | None): ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ ΠΏΠ΅ΡΠ½ΠΈ. ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ None, Π΅ΡΠ»ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π΅ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Π° (ΠΠ΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΉ Π°ΡΡΠΈΠ±ΡΡ).
Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° MSOC ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π²ΠΈΠΆΠΊΠΈ ΠΏΠΎΠΈΡΠΊΠ°:
- mp3feel: ΠΠΎΠΈΡΠΊ Π½Π° ΡΠ°ΠΉΡΠ΅ mp3uks.ru
- zaycev_net: ΠΠΎΠΈΡΠΊ Π½Π° ΡΠ°ΠΉΡΠ΅ zaycev.net
- trekson: ΠΠΎΠΈΡΠΊ Π½Π° ΡΠ°ΠΉΡΠ΅ trekson.net
- hitmo: ΠΠΎΠΈΡΠΊ Π½Π° ΡΠ°ΠΉΡΠ΅ rus.hitmotop.com - ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°
- muzbomb: ΠΠΎΠΈΡΠΊ Π½Π° ΡΠ°ΠΉΡΠ΅ muzbomb.net - ΡΠΎΠ·Π΄Π°Π½ takilow
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½ΠΎΠ²ΡΠ΅ Π΄Π²ΠΈΠΆΠΊΠΈ ΠΏΠΎΠΈΡΠΊΠ°, ΡΠΎΠ·Π΄Π°Π²Π°Ρ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΈ Π·Π°Π³ΡΡΠΆΠ°Ρ ΠΈΡ
Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ load_search_engine() ΠΈ unload_search_engine().
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° MSOC ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ:
LoadedEngineNotFoundError: ΠΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π΄Π²ΠΈΠΆΠΎΠΊ ΠΏΠΎΠΈΡΠΊΠ° Π½Π΅ Π±ΡΠ» Π½Π°ΠΉΠ΄Π΅Π½ Π² Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΡ Π΄Π²ΠΈΠΆΠΊΠ°Ρ .
ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΡ Π΄Π²ΠΈΠΆΠΊΠΎΠ² Π½Π° Python Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄:
-
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ²ΡΠΉ Python-ΡΠ°ΠΉΠ» Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΎΠ³ΠΎ Π΄Π²ΠΈΠΆΠΊΠ°:
- ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠ»
my_search_engine.py.
- ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠ»
-
ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ
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)- ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΠ΅ Π²Π°Ρ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ ΠΊ ΡΠΈΡΡΠ΅ΠΌΠ΅:
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(), ΡΡΠΎΠ±Ρ ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΠΈΡΡΡΡ, ΡΡΠΎ Π΄Π²ΠΈΠΆΠΎΠΊ Π±ΡΠ» ΡΡΠΏΠ΅ΡΠ½ΠΎ Π·Π°Π³ΡΡΠΆΠ΅Π½
- Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ
searchΡΡΠ½ΠΊΡΠΈΠΈ, Π²Π°Ρ Π΄Π²ΠΈΠΆΠΎΠΊ Π±ΡΠ΄Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π³ΡΡΠΆΠ΅Π½ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠ΅ΡΠ΅Π½
ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΎΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ, ΡΠ°ΠΉΠ» ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π½Π΅ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΏΠ°ΠΏΠΊΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΌ 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)ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ΅Π½ ΠΊΠ°ΠΊΠΎΠΉ Π»ΠΈΠ±ΠΎ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΎΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉ unload_search_engine Π΄Π»Ρ Π΅Π³ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΈΠ· Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΡ
:
from msoc import unload_search_engine, engines
unload_search_engine("my_search_engine")
print(engines())ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ Π²Π½Π΅ΡΡΠΈ ΡΠ²ΠΎΠΉ Π²ΠΊΠ»Π°Π΄ Π² ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ MSOC, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅:
- π Π‘ΠΎΠΎΠ±ΡΠΈΡΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ ΠΈΠ»ΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ Π½ΠΎΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
- ποΈ Π Π°Π·ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π½ΠΎΠ²ΡΠ΅ Π΄Π²ΠΈΠΆΠΊΠΈ ΠΏΠΎΠΈΡΠΊΠ°
- π Π£Π»ΡΡΡΠΈΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ
- π§ ΠΡΠΏΡΠ°Π²ΠΈΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ