msoc 0.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- msoc-0.0.1/PKG-INFO +57 -0
- msoc-0.0.1/README.md +43 -0
- msoc-0.0.1/pyproject.toml +25 -0
- msoc-0.0.1/setup.cfg +4 -0
- msoc-0.0.1/src/msoc/__init__.py +1 -0
- msoc-0.0.1/src/msoc/engines/mp3uk.py +58 -0
- msoc-0.0.1/src/msoc/exceptions.py +8 -0
- msoc-0.0.1/src/msoc/msoc.py +65 -0
- msoc-0.0.1/src/msoc/sound.py +7 -0
- msoc-0.0.1/src/msoc.egg-info/PKG-INFO +57 -0
- msoc-0.0.1/src/msoc.egg-info/SOURCES.txt +12 -0
- msoc-0.0.1/src/msoc.egg-info/dependency_links.txt +1 -0
- msoc-0.0.1/src/msoc.egg-info/requires.txt +2 -0
- msoc-0.0.1/src/msoc.egg-info/top_level.txt +1 -0
msoc-0.0.1/PKG-INFO
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: msoc
|
|
3
|
+
Version: 0.0.1
|
|
4
|
+
Summary: Быстрый поисковик музыки
|
|
5
|
+
Author: Ktoto
|
|
6
|
+
Project-URL: Repository, https://codeberg.org/Ktoto/MSOC
|
|
7
|
+
Classifier: Programming Language :: Python :: 3
|
|
8
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
9
|
+
Classifier: Operating System :: OS Independent
|
|
10
|
+
Requires-Python: >=3.8
|
|
11
|
+
Description-Content-Type: text/markdown
|
|
12
|
+
Requires-Dist: bs4
|
|
13
|
+
Requires-Dist: aiohttp
|
|
14
|
+
|
|
15
|
+
# MSOC - Библиотека для быстрого и асинхронного поиска музыки
|
|
16
|
+
|
|
17
|
+
MSOC - это библиотека на Python для быстрого и асинхронного поиска музыки в Интернете. Она позволяет искать треки на различных музыкальных сайтах и возвращает информацию о найденных треках, включая их названия и ссылки на скачивание.
|
|
18
|
+
|
|
19
|
+
## Использование
|
|
20
|
+
|
|
21
|
+
Импортируйте модуль msoc и используйте функцию search() для поиска музыки:
|
|
22
|
+
|
|
23
|
+
```python
|
|
24
|
+
from msoc import search
|
|
25
|
+
|
|
26
|
+
async def main():
|
|
27
|
+
async for sound in search("my_query"):
|
|
28
|
+
print(f"Name: {sound.name}, URL: {sound.url}")
|
|
29
|
+
|
|
30
|
+
asyncio.run(main())
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Функция `search()` принимает поисковый запрос в качестве аргумента и возвращает асинхронный генератор, который генерирует объекты `Sound` с информацией о найденных треках.
|
|
34
|
+
|
|
35
|
+
## Реализованные движки поиска
|
|
36
|
+
|
|
37
|
+
В настоящее время библиотека MSOC поддерживает следующие движки поиска:
|
|
38
|
+
|
|
39
|
+
- mp3uk: Поиск на сайте [mp3uks.ru](https://mp3uks.ru)
|
|
40
|
+
|
|
41
|
+
Вы можете добавлять новые движки поиска, создавая модули и загружая их с помощью функций `load_search_engine()` и `unload_search_engine()`.
|
|
42
|
+
|
|
43
|
+
## Exceptions
|
|
44
|
+
|
|
45
|
+
Библиотека MSOC определяет следующие исключения:
|
|
46
|
+
|
|
47
|
+
- `LoadedEngineNotFoundError`: Выбрасывается, когда движок поиска не был найден в загруженных движках.
|
|
48
|
+
- `EnginePathNotFoundError`: Выбрасывается, когда не удается импортировать движок поиска по указанному пути.
|
|
49
|
+
|
|
50
|
+
## Contribution
|
|
51
|
+
|
|
52
|
+
Если вы хотите внести свой вклад в развитие библиотеки MSOC, вы можете:
|
|
53
|
+
|
|
54
|
+
- Сообщить об ошибках или предложить новые функции
|
|
55
|
+
- Разработать и добавить новые движки поиска
|
|
56
|
+
- Улучшить документацию
|
|
57
|
+
- Исправить существующие проблемы
|
msoc-0.0.1/README.md
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# MSOC - Библиотека для быстрого и асинхронного поиска музыки
|
|
2
|
+
|
|
3
|
+
MSOC - это библиотека на Python для быстрого и асинхронного поиска музыки в Интернете. Она позволяет искать треки на различных музыкальных сайтах и возвращает информацию о найденных треках, включая их названия и ссылки на скачивание.
|
|
4
|
+
|
|
5
|
+
## Использование
|
|
6
|
+
|
|
7
|
+
Импортируйте модуль msoc и используйте функцию search() для поиска музыки:
|
|
8
|
+
|
|
9
|
+
```python
|
|
10
|
+
from msoc import search
|
|
11
|
+
|
|
12
|
+
async def main():
|
|
13
|
+
async for sound in search("my_query"):
|
|
14
|
+
print(f"Name: {sound.name}, URL: {sound.url}")
|
|
15
|
+
|
|
16
|
+
asyncio.run(main())
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Функция `search()` принимает поисковый запрос в качестве аргумента и возвращает асинхронный генератор, который генерирует объекты `Sound` с информацией о найденных треках.
|
|
20
|
+
|
|
21
|
+
## Реализованные движки поиска
|
|
22
|
+
|
|
23
|
+
В настоящее время библиотека MSOC поддерживает следующие движки поиска:
|
|
24
|
+
|
|
25
|
+
- mp3uk: Поиск на сайте [mp3uks.ru](https://mp3uks.ru)
|
|
26
|
+
|
|
27
|
+
Вы можете добавлять новые движки поиска, создавая модули и загружая их с помощью функций `load_search_engine()` и `unload_search_engine()`.
|
|
28
|
+
|
|
29
|
+
## Exceptions
|
|
30
|
+
|
|
31
|
+
Библиотека MSOC определяет следующие исключения:
|
|
32
|
+
|
|
33
|
+
- `LoadedEngineNotFoundError`: Выбрасывается, когда движок поиска не был найден в загруженных движках.
|
|
34
|
+
- `EnginePathNotFoundError`: Выбрасывается, когда не удается импортировать движок поиска по указанному пути.
|
|
35
|
+
|
|
36
|
+
## Contribution
|
|
37
|
+
|
|
38
|
+
Если вы хотите внести свой вклад в развитие библиотеки MSOC, вы можете:
|
|
39
|
+
|
|
40
|
+
- Сообщить об ошибках или предложить новые функции
|
|
41
|
+
- Разработать и добавить новые движки поиска
|
|
42
|
+
- Улучшить документацию
|
|
43
|
+
- Исправить существующие проблемы
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "msoc"
|
|
7
|
+
version = "0.0.1"
|
|
8
|
+
authors = [
|
|
9
|
+
{ name="Ktoto" },
|
|
10
|
+
]
|
|
11
|
+
description = "Быстрый поисковик музыки"
|
|
12
|
+
readme = "README.md"
|
|
13
|
+
requires-python = ">=3.8"
|
|
14
|
+
classifiers = [
|
|
15
|
+
"Programming Language :: Python :: 3",
|
|
16
|
+
"License :: OSI Approved :: MIT License",
|
|
17
|
+
"Operating System :: OS Independent",
|
|
18
|
+
]
|
|
19
|
+
dependencies = [
|
|
20
|
+
"bs4",
|
|
21
|
+
"aiohttp"
|
|
22
|
+
]
|
|
23
|
+
|
|
24
|
+
[project.urls]
|
|
25
|
+
Repository = "https://codeberg.org/Ktoto/MSOC"
|
msoc-0.0.1/setup.cfg
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .msoc import *
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import aiohttp
|
|
2
|
+
|
|
3
|
+
from bs4 import BeautifulSoup
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
URL = "https://mp3uks.ru/index.php?do=search"
|
|
7
|
+
HEADERS = {
|
|
8
|
+
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:126.0) Gecko/20100101 Firefox/126.0',
|
|
9
|
+
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
|
|
10
|
+
'Accept-Language': 'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',
|
|
11
|
+
'Referer': 'https://mp3uks.ru/',
|
|
12
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
13
|
+
'Origin': 'https://mp3uks.ru',
|
|
14
|
+
'Connection': 'keep-alive',
|
|
15
|
+
'Upgrade-Insecure-Requests': '1',
|
|
16
|
+
'Sec-Fetch-Dest': 'document',
|
|
17
|
+
'Sec-Fetch-Mode': 'navigate',
|
|
18
|
+
'Sec-Fetch-Site': 'same-origin',
|
|
19
|
+
'Sec-Fetch-User': '?1',
|
|
20
|
+
'Priority': 'u=1',
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def get_name(track):
|
|
25
|
+
track_title = track.find("div", {"class": "track-title"})
|
|
26
|
+
try:
|
|
27
|
+
return track_title.find("span").text
|
|
28
|
+
except:
|
|
29
|
+
return track_title.text
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def get_url(track):
|
|
33
|
+
unclean_url = track.find("a", {"class": "track-dl"})["href"]
|
|
34
|
+
|
|
35
|
+
if "/dl.php?" in unclean_url:
|
|
36
|
+
url = "https://mp3uk.net" + unclean_url
|
|
37
|
+
else:
|
|
38
|
+
url = "https:" + unclean_url
|
|
39
|
+
|
|
40
|
+
return url
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
async def search(query):
|
|
45
|
+
print("Mp3uk engine")
|
|
46
|
+
data = f"do=search&subaction=search&search_start=0&full_search=0&result_from=1&story={query}"
|
|
47
|
+
async with aiohttp.ClientSession(headers=HEADERS) as session:
|
|
48
|
+
async with session.post(URL, data=data) as response:
|
|
49
|
+
print(response.status)
|
|
50
|
+
text = await response.text()
|
|
51
|
+
|
|
52
|
+
html = BeautifulSoup(text, "html.parser")
|
|
53
|
+
|
|
54
|
+
results = []
|
|
55
|
+
for track in html.find_all("div", {"class": "track-item"}):
|
|
56
|
+
results.append((get_name(track), get_url(track)))
|
|
57
|
+
|
|
58
|
+
return results
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
class LoadedEngineNotFoundError(KeyError):
|
|
2
|
+
def __init__(self, name):
|
|
3
|
+
super().__init__("Движок не был найден в загруженных: " + name)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class EnginePathNotFoundError(FileNotFoundError):
|
|
7
|
+
def __init__(self, path):
|
|
8
|
+
super().__init__("Не удалось импортировать движок: " + path)
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
from importlib import util
|
|
3
|
+
from os.path import dirname, join
|
|
4
|
+
|
|
5
|
+
from .exceptions import *
|
|
6
|
+
from .sound import Sound
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
__all__ = [
|
|
10
|
+
"search",
|
|
11
|
+
"engines",
|
|
12
|
+
"load_search_engine",
|
|
13
|
+
"unload_search_engine",
|
|
14
|
+
"Sound"
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
ENGINES = dict()
|
|
19
|
+
DEFAULT_ENGINES_MAP = {
|
|
20
|
+
"mp3uk": join(dirname(__file__), "engines", "mp3uk.py")
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def engines():
|
|
25
|
+
return ENGINES.copy()
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def load_search_engine(name, path_python_file: str):
|
|
29
|
+
spec = util.spec_from_file_location(name, path_python_file)
|
|
30
|
+
|
|
31
|
+
module = util.module_from_spec(spec)
|
|
32
|
+
|
|
33
|
+
try:
|
|
34
|
+
spec.loader.exec_module(module)
|
|
35
|
+
except:
|
|
36
|
+
raise EnginePathNotFoundError(path_python_file)
|
|
37
|
+
|
|
38
|
+
ENGINES[name] = module
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def unload_search_engine(name):
|
|
42
|
+
try:
|
|
43
|
+
del ENGINES[name]
|
|
44
|
+
except KeyError:
|
|
45
|
+
raise LoadedEngineNotFoundError(name)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def load_default_engines():
|
|
49
|
+
for name, python_file_path in DEFAULT_ENGINES_MAP.items():
|
|
50
|
+
load_search_engine(name, python_file_path)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
async def search(query):
|
|
54
|
+
tasks = []
|
|
55
|
+
|
|
56
|
+
for engine in ENGINES.values():
|
|
57
|
+
tasks.append(engine.search(query))
|
|
58
|
+
|
|
59
|
+
for sound_future in asyncio.as_completed(tasks):
|
|
60
|
+
sounds = await sound_future
|
|
61
|
+
for sound in sounds:
|
|
62
|
+
yield Sound(sound[0], sound[1])
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
load_default_engines()
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: msoc
|
|
3
|
+
Version: 0.0.1
|
|
4
|
+
Summary: Быстрый поисковик музыки
|
|
5
|
+
Author: Ktoto
|
|
6
|
+
Project-URL: Repository, https://codeberg.org/Ktoto/MSOC
|
|
7
|
+
Classifier: Programming Language :: Python :: 3
|
|
8
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
9
|
+
Classifier: Operating System :: OS Independent
|
|
10
|
+
Requires-Python: >=3.8
|
|
11
|
+
Description-Content-Type: text/markdown
|
|
12
|
+
Requires-Dist: bs4
|
|
13
|
+
Requires-Dist: aiohttp
|
|
14
|
+
|
|
15
|
+
# MSOC - Библиотека для быстрого и асинхронного поиска музыки
|
|
16
|
+
|
|
17
|
+
MSOC - это библиотека на Python для быстрого и асинхронного поиска музыки в Интернете. Она позволяет искать треки на различных музыкальных сайтах и возвращает информацию о найденных треках, включая их названия и ссылки на скачивание.
|
|
18
|
+
|
|
19
|
+
## Использование
|
|
20
|
+
|
|
21
|
+
Импортируйте модуль msoc и используйте функцию search() для поиска музыки:
|
|
22
|
+
|
|
23
|
+
```python
|
|
24
|
+
from msoc import search
|
|
25
|
+
|
|
26
|
+
async def main():
|
|
27
|
+
async for sound in search("my_query"):
|
|
28
|
+
print(f"Name: {sound.name}, URL: {sound.url}")
|
|
29
|
+
|
|
30
|
+
asyncio.run(main())
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Функция `search()` принимает поисковый запрос в качестве аргумента и возвращает асинхронный генератор, который генерирует объекты `Sound` с информацией о найденных треках.
|
|
34
|
+
|
|
35
|
+
## Реализованные движки поиска
|
|
36
|
+
|
|
37
|
+
В настоящее время библиотека MSOC поддерживает следующие движки поиска:
|
|
38
|
+
|
|
39
|
+
- mp3uk: Поиск на сайте [mp3uks.ru](https://mp3uks.ru)
|
|
40
|
+
|
|
41
|
+
Вы можете добавлять новые движки поиска, создавая модули и загружая их с помощью функций `load_search_engine()` и `unload_search_engine()`.
|
|
42
|
+
|
|
43
|
+
## Exceptions
|
|
44
|
+
|
|
45
|
+
Библиотека MSOC определяет следующие исключения:
|
|
46
|
+
|
|
47
|
+
- `LoadedEngineNotFoundError`: Выбрасывается, когда движок поиска не был найден в загруженных движках.
|
|
48
|
+
- `EnginePathNotFoundError`: Выбрасывается, когда не удается импортировать движок поиска по указанному пути.
|
|
49
|
+
|
|
50
|
+
## Contribution
|
|
51
|
+
|
|
52
|
+
Если вы хотите внести свой вклад в развитие библиотеки MSOC, вы можете:
|
|
53
|
+
|
|
54
|
+
- Сообщить об ошибках или предложить новые функции
|
|
55
|
+
- Разработать и добавить новые движки поиска
|
|
56
|
+
- Улучшить документацию
|
|
57
|
+
- Исправить существующие проблемы
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
README.md
|
|
2
|
+
pyproject.toml
|
|
3
|
+
src/msoc/__init__.py
|
|
4
|
+
src/msoc/exceptions.py
|
|
5
|
+
src/msoc/msoc.py
|
|
6
|
+
src/msoc/sound.py
|
|
7
|
+
src/msoc.egg-info/PKG-INFO
|
|
8
|
+
src/msoc.egg-info/SOURCES.txt
|
|
9
|
+
src/msoc.egg-info/dependency_links.txt
|
|
10
|
+
src/msoc.egg-info/requires.txt
|
|
11
|
+
src/msoc.egg-info/top_level.txt
|
|
12
|
+
src/msoc/engines/mp3uk.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
msoc
|