pars-hitmotop 0.1.0__tar.gz → 1.0.0__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.
@@ -0,0 +1,116 @@
1
+ Metadata-Version: 2.4
2
+ Name: pars_hitmotop
3
+ Version: 1.0.0
4
+ Home-page: https://github.com/JoyHubN/pars_hitmos
5
+ Download-URL: https://github.com/JoyHubN/pars_hitmos/arhive/v1.0.0.zip
6
+ Author: Joy_079
7
+ Author-email: Prufu@yandex.ru
8
+ Classifier: Programming Language :: Python
9
+ Classifier: Programming Language :: Python :: 3.8
10
+ Classifier: Programming Language :: Python :: 3.9
11
+ Classifier: Programming Language :: Python :: 3.10
12
+ Classifier: Programming Language :: Python :: 3.11
13
+ Classifier: Programming Language :: Python :: Implementation :: PyPy
14
+ Description-Content-Type: text/markdown
15
+ Requires-Dist: beautifulsoup4==4.13.4
16
+ Requires-Dist: fake-useragent==2.2.0
17
+ Requires-Dist: requests==2.32.4
18
+ Requires-Dist: tenacity==9.1.2
19
+ Dynamic: author
20
+ Dynamic: author-email
21
+ Dynamic: classifier
22
+ Dynamic: description
23
+ Dynamic: description-content-type
24
+ Dynamic: download-url
25
+ Dynamic: home-page
26
+ Dynamic: requires-dist
27
+
28
+ # Оглавление
29
+ 0. [Оглавление](https://github.com/PY079/pars_hitmotop#оглавление)
30
+ 1. [Что именно парсит?](https://github.com/PY079/pars_hitmotop/blob/main/README.md#что-именно-парсит)
31
+ 2. [Как использовать модуль entered_tracks](https://github.com/PY079/pars_hitmotop/blob/main/README.md#как-использовать-модуль-entered_tracks)
32
+ 3. [Как использовать модуль rating_tracks_count](https://github.com/PY079/pars_hitmotop/blob/main/README.md#как-использовать-модуль-rating_tracks_count)
33
+ 4. [Как использовать модуль rating_tracks_page](https://github.com/PY079/pars_hitmotop/blob/main/README.md#как-использовать-модуль-rating_tracks_page)
34
+ 5. [Что можно достать при запросе?](https://github.com/PY079/pars_hitmotop/blob/main/README.md#что-можно-достать-при-запросе)
35
+ ____
36
+ Этот проект парсит [музыкальный сайт](https://hitmos.me/)
37
+ ____
38
+ # Что именно парсит?
39
+ 1. [Рейтинговые треки](https://hitmos.me/songs/top-rated) от 1 до 48;
40
+ 2. Тоже [рейтинговые треки](https://hitmos.me/songs/top-rated) но можно выбрать количество страниц, с которых будет произведен парсинг;
41
+ 3. Треки введенные пользователем. Парсит от 1 трека до конечной страницы (на одной странице 48 треков)
42
+ ____
43
+ ## Как использовать модуль *entered_tracks*
44
+ ```
45
+ from parse_hitmos.entered_tracks import EnteredTrack
46
+ result = EnteredTrack('linkin park',10)
47
+ ```
48
+ 1 аргументом (music_name) передается название песни или автора. 2 Аргументом (count) передается количество треков
49
+ ____
50
+ ## Как использовать модуль *rating_tracks_count*
51
+ ```
52
+ from parse_hitmos.rating_tracks_count import RatingCount
53
+ result = RatingCount(10)
54
+ ```
55
+ 1 аргументом (count) передается количество песен
56
+ ____
57
+ ## Как использовать модуль *rating_tracks_page*
58
+ ```
59
+ from parse_hitmos.rating_tracks_page import RatingPage
60
+ result = RatingPage(10)
61
+ ```
62
+ 1 аргументом (count) передается количество страниц (max 11)
63
+ ____
64
+ # Что можно достать при запросе?
65
+ Все возвращается в виде list
66
+ | Метод | Описание |
67
+ |----------------|:---------|
68
+ | result.get_author | Получить автора трека|
69
+ |result.get_title| Получить название трека|
70
+ |result.get_url_down|Получить ссылку на скачивание трека|
71
+ |result.direct_download_link|Получить прямую ссылку на скачивание трека|
72
+ |result.get_duration|Получить продолжительность трека|
73
+ |result.get_picture_url|Получить ссылку на обложку трека|
74
+ |result.get_url_track|Получить ссылку трек|
75
+ |result.get_all|Получить все данные в виде словаря|
76
+ |result.get_author_title|Получить лист в виде автор — название|
77
+
78
+ ____
79
+ # Сколько времени понадобиться для получения всех нужных данных с сайта
80
+ ## Рейтинговые треки (по страницам)
81
+
82
+ | Время | Прямые ссылки | Кол-во треков |
83
+ |:---------|:---------|:---------|
84
+ | 5с — 6с | `False` | 11 страниц (~528) |
85
+ | 5 — 6с | `False` | 10 страниц (~480) |
86
+ | 4 — 6с | `False` | 9 страниц (~432) |
87
+ | 4 — 6с | `False` | 8 страниц (~384) |
88
+ | 4 — 5с | `False` | 7 страниц (~336) |
89
+ | 3 — 4с | `False` | 6 страниц (~288) |
90
+ | 3 — 4с | `False` | 5 страниц (~240) |
91
+ | 2 — 4с | `False` | 4 страниц (~192) |
92
+ | 2 — 3с | `False` | 3 страниц (~144) |
93
+ | 1 — 2с | `False` | 2 страниц (~96) |
94
+ | 1с — 2c | `False` | 1 страниц (~48) |
95
+ | 126с — 223с (~2.1м — ~4м) | `True` | 11 страниц (~528) |
96
+ | 116с — 139с (~2м) | `True` | 10 страниц (~480) |
97
+ | 106с — 131с (~1.6м — 2м) | `True` | 9 страниц (~432) |
98
+ | 97с — 185с (~1.6м — 2м) | `True` | 8 страниц (~384) |
99
+ | 76с — 94с (~1.2м — ~1.5c) | `True` | 7 страниц (~336) |
100
+ | 66с — 74с (~1м — ~1.23) | `True` | 6 страниц (~288) |
101
+ | 54с — 61с | `True` | 5 страниц (~240) |
102
+ | 43с — 49с | `True` | 4 страниц (~192) |
103
+ | 32с — 49с | `True` | 3 страниц (~144) |
104
+ | 25с — 27с | `True` | 2 страниц (~96) |
105
+ | 14с — 20с | `True` | 1 страниц (~48) |
106
+
107
+
108
+ ## Рейтинговые треки и введенные треки (по трекам)
109
+ | Время | Прямые ссылки | Кол-во треков |
110
+ |:---------|:---------|:---------|
111
+ | 1с — ~3с | `False` | 48 |
112
+ | 1с — 2с | `False` | 1 |
113
+ | 23с — 28с | `True` | 48 |
114
+ | 3с — 4с | `True` | 1 |
115
+
116
+ ____
@@ -1,17 +1,10 @@
1
- # pars-hitmontop теперь называется pars-hitmos
2
-
3
- Этот пакет был переименован. Вместо этого используйте `pip install pars-hitmos`.
4
-
5
- Новый пакет: https://pypi.org/project/pars-hitmos/
6
-
7
-
8
1
  # Оглавление
9
- 0. [Оглавление](https://github.com/JoyHubN/pars_hitmos#оглавление)
10
- 1. [Что именно парсит?](https://github.com/JoyHubN/pars_hitmos/blob/main/README.md#что-именно-парсит)
11
- 2. [Как использовать модуль entered_tracks](https://github.com/JoyHubN/pars_hitmos/blob/main/README.md#как-использовать-модуль-entered_tracks)
12
- 3. [Как использовать модуль rating_tracks_count](https://github.com/JoyHubN/pars_hitmos/blob/main/README.md#как-использовать-модуль-rating_tracks_count)
13
- 4. [Как использовать модуль rating_tracks_page](https://github.com/JoyHubN/pars_hitmos/blob/main/README.md#как-использовать-модуль-rating_tracks_page)
14
- 5. [Что можно достать при запросе?](https://github.com/JoyHubN/pars_hitmos/blob/main/README.md#что-можно-достать-при-запросе)
2
+ 0. [Оглавление](https://github.com/PY079/pars_hitmotop#оглавление)
3
+ 1. [Что именно парсит?](https://github.com/PY079/pars_hitmotop/blob/main/README.md#что-именно-парсит)
4
+ 2. [Как использовать модуль entered_tracks](https://github.com/PY079/pars_hitmotop/blob/main/README.md#как-использовать-модуль-entered_tracks)
5
+ 3. [Как использовать модуль rating_tracks_count](https://github.com/PY079/pars_hitmotop/blob/main/README.md#как-использовать-модуль-rating_tracks_count)
6
+ 4. [Как использовать модуль rating_tracks_page](https://github.com/PY079/pars_hitmotop/blob/main/README.md#как-использовать-модуль-rating_tracks_page)
7
+ 5. [Что можно достать при запросе?](https://github.com/PY079/pars_hitmotop/blob/main/README.md#что-можно-достать-при-запросе)
15
8
  ____
16
9
  Этот проект парсит [музыкальный сайт](https://hitmos.me/)
17
10
  ____
@@ -22,22 +15,22 @@ ____
22
15
  ____
23
16
  ## Как использовать модуль *entered_tracks*
24
17
  ```
25
- from pars_hitmos.entered_tracks import EnteredTrack
26
- result=EnteredTrack('linkin park',10)
18
+ from parse_hitmos.entered_tracks import EnteredTrack
19
+ result = EnteredTrack('linkin park',10)
27
20
  ```
28
21
  1 аргументом (music_name) передается название песни или автора. 2 Аргументом (count) передается количество треков
29
22
  ____
30
23
  ## Как использовать модуль *rating_tracks_count*
31
24
  ```
32
- from pars_hitmos.rating_tracks_count import RatingCount
33
- result=RatingCount(10)
25
+ from parse_hitmos.rating_tracks_count import RatingCount
26
+ result = RatingCount(10)
34
27
  ```
35
28
  1 аргументом (count) передается количество песен
36
29
  ____
37
30
  ## Как использовать модуль *rating_tracks_page*
38
31
  ```
39
- from pars_hitmos.rating_tracks_page import RatingPage
40
- result=RatingPage(10)
32
+ from parse_hitmos.rating_tracks_page import RatingPage
33
+ result = RatingPage(10)
41
34
  ```
42
35
  1 аргументом (count) передается количество страниц (max 11)
43
36
  ____
@@ -53,6 +46,44 @@ ____
53
46
  |result.get_picture_url|Получить ссылку на обложку трека|
54
47
  |result.get_url_track|Получить ссылку трек|
55
48
  |result.get_all|Получить все данные в виде словаря|
56
- |result.get_author_title|Получить лист в виде автор - название|
49
+ |result.get_author_title|Получить лист в виде автор название|
50
+
51
+ ____
52
+ # Сколько времени понадобиться для получения всех нужных данных с сайта
53
+ ## Рейтинговые треки (по страницам)
54
+
55
+ | Время | Прямые ссылки | Кол-во треков |
56
+ |:---------|:---------|:---------|
57
+ | 5с — 6с | `False` | 11 страниц (~528) |
58
+ | 5 — 6с | `False` | 10 страниц (~480) |
59
+ | 4 — 6с | `False` | 9 страниц (~432) |
60
+ | 4 — 6с | `False` | 8 страниц (~384) |
61
+ | 4 — 5с | `False` | 7 страниц (~336) |
62
+ | 3 — 4с | `False` | 6 страниц (~288) |
63
+ | 3 — 4с | `False` | 5 страниц (~240) |
64
+ | 2 — 4с | `False` | 4 страниц (~192) |
65
+ | 2 — 3с | `False` | 3 страниц (~144) |
66
+ | 1 — 2с | `False` | 2 страниц (~96) |
67
+ | 1с — 2c | `False` | 1 страниц (~48) |
68
+ | 126с — 223с (~2.1м — ~4м) | `True` | 11 страниц (~528) |
69
+ | 116с — 139с (~2м) | `True` | 10 страниц (~480) |
70
+ | 106с — 131с (~1.6м — 2м) | `True` | 9 страниц (~432) |
71
+ | 97с — 185с (~1.6м — 2м) | `True` | 8 страниц (~384) |
72
+ | 76с — 94с (~1.2м — ~1.5c) | `True` | 7 страниц (~336) |
73
+ | 66с — 74с (~1м — ~1.23) | `True` | 6 страниц (~288) |
74
+ | 54с — 61с | `True` | 5 страниц (~240) |
75
+ | 43с — 49с | `True` | 4 страниц (~192) |
76
+ | 32с — 49с | `True` | 3 страниц (~144) |
77
+ | 25с — 27с | `True` | 2 страниц (~96) |
78
+ | 14с — 20с | `True` | 1 страниц (~48) |
79
+
80
+
81
+ ## Рейтинговые треки и введенные треки (по трекам)
82
+ | Время | Прямые ссылки | Кол-во треков |
83
+ |:---------|:---------|:---------|
84
+ | 1с — ~3с | `False` | 48 |
85
+ | 1с — 2с | `False` | 1 |
86
+ | 23с — 28с | `True` | 48 |
87
+ | 3с — 4с | `True` | 1 |
57
88
 
58
89
  ____
@@ -0,0 +1,116 @@
1
+ Metadata-Version: 2.4
2
+ Name: pars_hitmotop
3
+ Version: 1.0.0
4
+ Home-page: https://github.com/JoyHubN/pars_hitmos
5
+ Download-URL: https://github.com/JoyHubN/pars_hitmos/arhive/v1.0.0.zip
6
+ Author: Joy_079
7
+ Author-email: Prufu@yandex.ru
8
+ Classifier: Programming Language :: Python
9
+ Classifier: Programming Language :: Python :: 3.8
10
+ Classifier: Programming Language :: Python :: 3.9
11
+ Classifier: Programming Language :: Python :: 3.10
12
+ Classifier: Programming Language :: Python :: 3.11
13
+ Classifier: Programming Language :: Python :: Implementation :: PyPy
14
+ Description-Content-Type: text/markdown
15
+ Requires-Dist: beautifulsoup4==4.13.4
16
+ Requires-Dist: fake-useragent==2.2.0
17
+ Requires-Dist: requests==2.32.4
18
+ Requires-Dist: tenacity==9.1.2
19
+ Dynamic: author
20
+ Dynamic: author-email
21
+ Dynamic: classifier
22
+ Dynamic: description
23
+ Dynamic: description-content-type
24
+ Dynamic: download-url
25
+ Dynamic: home-page
26
+ Dynamic: requires-dist
27
+
28
+ # Оглавление
29
+ 0. [Оглавление](https://github.com/PY079/pars_hitmotop#оглавление)
30
+ 1. [Что именно парсит?](https://github.com/PY079/pars_hitmotop/blob/main/README.md#что-именно-парсит)
31
+ 2. [Как использовать модуль entered_tracks](https://github.com/PY079/pars_hitmotop/blob/main/README.md#как-использовать-модуль-entered_tracks)
32
+ 3. [Как использовать модуль rating_tracks_count](https://github.com/PY079/pars_hitmotop/blob/main/README.md#как-использовать-модуль-rating_tracks_count)
33
+ 4. [Как использовать модуль rating_tracks_page](https://github.com/PY079/pars_hitmotop/blob/main/README.md#как-использовать-модуль-rating_tracks_page)
34
+ 5. [Что можно достать при запросе?](https://github.com/PY079/pars_hitmotop/blob/main/README.md#что-можно-достать-при-запросе)
35
+ ____
36
+ Этот проект парсит [музыкальный сайт](https://hitmos.me/)
37
+ ____
38
+ # Что именно парсит?
39
+ 1. [Рейтинговые треки](https://hitmos.me/songs/top-rated) от 1 до 48;
40
+ 2. Тоже [рейтинговые треки](https://hitmos.me/songs/top-rated) но можно выбрать количество страниц, с которых будет произведен парсинг;
41
+ 3. Треки введенные пользователем. Парсит от 1 трека до конечной страницы (на одной странице 48 треков)
42
+ ____
43
+ ## Как использовать модуль *entered_tracks*
44
+ ```
45
+ from parse_hitmos.entered_tracks import EnteredTrack
46
+ result = EnteredTrack('linkin park',10)
47
+ ```
48
+ 1 аргументом (music_name) передается название песни или автора. 2 Аргументом (count) передается количество треков
49
+ ____
50
+ ## Как использовать модуль *rating_tracks_count*
51
+ ```
52
+ from parse_hitmos.rating_tracks_count import RatingCount
53
+ result = RatingCount(10)
54
+ ```
55
+ 1 аргументом (count) передается количество песен
56
+ ____
57
+ ## Как использовать модуль *rating_tracks_page*
58
+ ```
59
+ from parse_hitmos.rating_tracks_page import RatingPage
60
+ result = RatingPage(10)
61
+ ```
62
+ 1 аргументом (count) передается количество страниц (max 11)
63
+ ____
64
+ # Что можно достать при запросе?
65
+ Все возвращается в виде list
66
+ | Метод | Описание |
67
+ |----------------|:---------|
68
+ | result.get_author | Получить автора трека|
69
+ |result.get_title| Получить название трека|
70
+ |result.get_url_down|Получить ссылку на скачивание трека|
71
+ |result.direct_download_link|Получить прямую ссылку на скачивание трека|
72
+ |result.get_duration|Получить продолжительность трека|
73
+ |result.get_picture_url|Получить ссылку на обложку трека|
74
+ |result.get_url_track|Получить ссылку трек|
75
+ |result.get_all|Получить все данные в виде словаря|
76
+ |result.get_author_title|Получить лист в виде автор — название|
77
+
78
+ ____
79
+ # Сколько времени понадобиться для получения всех нужных данных с сайта
80
+ ## Рейтинговые треки (по страницам)
81
+
82
+ | Время | Прямые ссылки | Кол-во треков |
83
+ |:---------|:---------|:---------|
84
+ | 5с — 6с | `False` | 11 страниц (~528) |
85
+ | 5 — 6с | `False` | 10 страниц (~480) |
86
+ | 4 — 6с | `False` | 9 страниц (~432) |
87
+ | 4 — 6с | `False` | 8 страниц (~384) |
88
+ | 4 — 5с | `False` | 7 страниц (~336) |
89
+ | 3 — 4с | `False` | 6 страниц (~288) |
90
+ | 3 — 4с | `False` | 5 страниц (~240) |
91
+ | 2 — 4с | `False` | 4 страниц (~192) |
92
+ | 2 — 3с | `False` | 3 страниц (~144) |
93
+ | 1 — 2с | `False` | 2 страниц (~96) |
94
+ | 1с — 2c | `False` | 1 страниц (~48) |
95
+ | 126с — 223с (~2.1м — ~4м) | `True` | 11 страниц (~528) |
96
+ | 116с — 139с (~2м) | `True` | 10 страниц (~480) |
97
+ | 106с — 131с (~1.6м — 2м) | `True` | 9 страниц (~432) |
98
+ | 97с — 185с (~1.6м — 2м) | `True` | 8 страниц (~384) |
99
+ | 76с — 94с (~1.2м — ~1.5c) | `True` | 7 страниц (~336) |
100
+ | 66с — 74с (~1м — ~1.23) | `True` | 6 страниц (~288) |
101
+ | 54с — 61с | `True` | 5 страниц (~240) |
102
+ | 43с — 49с | `True` | 4 страниц (~192) |
103
+ | 32с — 49с | `True` | 3 страниц (~144) |
104
+ | 25с — 27с | `True` | 2 страниц (~96) |
105
+ | 14с — 20с | `True` | 1 страниц (~48) |
106
+
107
+
108
+ ## Рейтинговые треки и введенные треки (по трекам)
109
+ | Время | Прямые ссылки | Кол-во треков |
110
+ |:---------|:---------|:---------|
111
+ | 1с — ~3с | `False` | 48 |
112
+ | 1с — 2с | `False` | 1 |
113
+ | 23с — 28с | `True` | 48 |
114
+ | 3с — 4с | `True` | 1 |
115
+
116
+ ____
@@ -0,0 +1,13 @@
1
+ README.md
2
+ setup.py
3
+ pars_hitmotop.egg-info/PKG-INFO
4
+ pars_hitmotop.egg-info/SOURCES.txt
5
+ pars_hitmotop.egg-info/dependency_links.txt
6
+ pars_hitmotop.egg-info/requires.txt
7
+ pars_hitmotop.egg-info/top_level.txt
8
+ parse_hitmos/__init__.py
9
+ parse_hitmos/entered_tracks.py
10
+ parse_hitmos/excepts.py
11
+ parse_hitmos/how_to_use.py
12
+ parse_hitmos/rating_tracks_count.py
13
+ parse_hitmos/rating_tracks_page.py
@@ -0,0 +1,4 @@
1
+ beautifulsoup4==4.13.4
2
+ fake-useragent==2.2.0
3
+ requests==2.32.4
4
+ tenacity==9.1.2
@@ -0,0 +1 @@
1
+ parse_hitmos
@@ -0,0 +1,6 @@
1
+ from .entered_tracks import EnteredTrack
2
+ from .rating_tracks_count import RatingCount
3
+ from .rating_tracks_page import RatingPage
4
+
5
+ __author__ = 'Joy_079'
6
+ __version__= '1.0.0'
@@ -0,0 +1,125 @@
1
+ from bs4 import BeautifulSoup
2
+ from urllib.parse import quote
3
+
4
+ from parse_hitmos.tools.retry_func import safe_get, safe_head
5
+ from parse_hitmos.tools.headers import get_headers
6
+ from parse_hitmos.tools.base_session import BaseSessionHandlerInputTracks
7
+ from parse_hitmos.excepts import NoFoundTrack, MaxTrack, MusicName, AmountErr, RedirectErr
8
+ from parse_hitmos.tools.replace_symbol import replace_symbol_in_title
9
+
10
+
11
+ class EnteredTrack(BaseSessionHandlerInputTracks):
12
+ """
13
+ Треки из запроса\n
14
+ :param music_name: Название и автор трека в одной строке.
15
+ :param amount: Количество треков, которое нужно вывести. Max 48.
16
+ :param get_redirect_url: True-получить прямую ссылку на скачивание трека, но увеличивает время выполнения\n
17
+ :type music_name: str
18
+ :type amount: int
19
+ :type get_redirect_url: bool
20
+
21
+ .. note:: Установка get_redirect_url=True может значительно увеличить время выполнения.\n
22
+ Методы:\n
23
+ - get_author -> list[str]: автор трека
24
+ - get_title -> list[str]: название трека
25
+ - get_url_down -> list[str]: ссылка на скачивание трека
26
+ - direct_download_link -> list[str]: прямая ссылка на скачивание трека
27
+ - get_duration -> list[str]: длительность трека
28
+ - get_picture_url -> list[str]: ссылка на обложку трека
29
+ - get_url_track -> list[str]: ссылка на трек
30
+ """
31
+
32
+ def __init__(self, music_name:str, amount: int, get_redirect_url=False):
33
+ if not isinstance(music_name, str): raise MusicName
34
+ if not isinstance(amount, int): raise AmountErr
35
+ if not isinstance(get_redirect_url, bool): raise RedirectErr
36
+
37
+ self.music_name = music_name
38
+ self.amount = int(amount)
39
+
40
+ super().__init__()
41
+
42
+ self.get_redirect_url = get_redirect_url
43
+ self.get_info
44
+
45
+ @property
46
+ def get_info(self):
47
+
48
+ if self.amount > 48:
49
+ raise MaxTrack
50
+ else:
51
+
52
+
53
+ __headers = get_headers()
54
+ __search_url = self.search_url+quote(self.music_name)
55
+ __response = safe_get(self, __search_url, headers=__headers)
56
+ __soup = BeautifulSoup(__response.text, "html.parser")
57
+
58
+ if __soup.find('h2', class_='tracks__title content-item-title'):
59
+ raise NoFoundTrack
60
+
61
+ _track_titles = [i.text.strip() for i in __soup.find_all("div", class_="track__title")]
62
+ _track_artists = [i.text.strip() for i in __soup.find_all("div", class_="track__desc")]
63
+ _track_duration = [i.text.strip() for i in __soup.find_all("div", class_="track__fulltime")]
64
+ _track_pictures = [f"{i.get('style')[23:-3]}" for i in __soup.find_all("div", class_="track__img")]
65
+ _track_urls_dow = [i.get('href') for i in __soup.find_all('a', class_='track__download-btn')]
66
+ _track_url = [f"{self.base_url[:-1]}{tra_url.get('href')}" for tra_url in __soup.find_all('a', class_='track__info-l')]
67
+
68
+
69
+ _items = []
70
+ for idx in range(self.amount if len(_track_titles) > self.amount else len(_track_titles)):
71
+ if self.get_redirect_url and len(_track_urls_dow[idx]) > 0:
72
+ direct_download_link = safe_head(self, _track_urls_dow[idx], headers=__headers, allow_redirects=True).url
73
+ else: direct_download_link = None
74
+
75
+ item = {
76
+ 'author': _track_artists[idx],
77
+ 'title': replace_symbol_in_title(_track_titles[idx]),
78
+ 'url_down': _track_urls_dow[idx],
79
+ 'direct_download_link': direct_download_link,
80
+ 'duration_track': _track_duration[idx],
81
+ 'picture_url': _track_pictures[idx],
82
+ 'url_track': _track_url[idx]
83
+ }
84
+ _items.append(item)
85
+
86
+ self.count_tracks = len(_items)
87
+ self.data = {"items": _items}
88
+ return self.data
89
+
90
+ @property
91
+ def get_author(self) -> list[str]:
92
+ return [item['author'] for item in self.data['items']]
93
+
94
+ @property
95
+ def get_title(self) -> list[str]:
96
+ return [item['title'] for item in self.data['items']]
97
+
98
+ @property
99
+ def get_url_down(self) -> list[str]:
100
+ return [item['url_down'] for item in self.data['items']]
101
+
102
+ @property
103
+ def direct_download_link(self) -> list[str]:
104
+ return [item['direct_download_link'] for item in self.data['items']]
105
+
106
+ @property
107
+ def get_duration(self) -> list[str]:
108
+ return [item['duration_track'] for item in self.data['items']]
109
+
110
+ @property
111
+ def get_picture_url(self) -> list[str]:
112
+ return [item['picture_url'] for item in self.data['items']]
113
+
114
+ @property
115
+ def get_url_track(self) -> list[str]:
116
+ return [item['url_track'] for item in self.data['items']]
117
+
118
+ @property
119
+ def get_all(self) -> list[str]: return self.data
120
+
121
+ @property
122
+ def get_author_title(self) -> list[str]:
123
+ __author = self.get_author
124
+ __title = self.get_title
125
+ return [f'{__author[i]} - {__title[i]}' for i in range(self.count_tracks)]
@@ -0,0 +1,75 @@
1
+ class NoFoundTrack(Exception):
2
+
3
+ def __init__(self):
4
+ self.err = 'Nothing was found for your query'
5
+
6
+ def __str__(self):
7
+ return self.err
8
+
9
+ class MaxTrack(Exception):
10
+
11
+ def __init__(self):
12
+ self.err = 'The number of tracks should not exceed 48'
13
+
14
+ def __str__(self):
15
+ return self.err
16
+
17
+
18
+ class PageError(Exception):
19
+
20
+ def __init__(self):
21
+ self.err = 'Only <= 11'
22
+
23
+ def __str__(self):
24
+ return self.err
25
+
26
+
27
+
28
+ class MusicName(Exception):
29
+
30
+ def __init__(self):
31
+ self.err = 'The name of the music should only be str'
32
+
33
+ def __str__(self):
34
+ return self.err
35
+
36
+ class AmountErr(Exception):
37
+
38
+ def __init__(self):
39
+ self.err = 'The amount should only be int'
40
+
41
+ def __str__(self):
42
+ return self.err
43
+
44
+ class PageCount(Exception):
45
+
46
+ def __init__(self):
47
+ self.err = 'Page count only int'
48
+
49
+ def __str__(self):
50
+ return self.err
51
+
52
+
53
+ class CountTracksErr(Exception):
54
+
55
+ def __init__(self):
56
+ self.err = 'The count tracks should only be int'
57
+
58
+ def __str__(self):
59
+ return self.err
60
+
61
+ class RedirectErr(Exception):
62
+
63
+ def __init__(self):
64
+ self.err = 'Accepts only the bool type'
65
+
66
+ def __str__(self):
67
+ return self.err
68
+
69
+
70
+ class MaxAttempts(Exception):
71
+ def __init__(self, max_attempts):
72
+ self.err = f"Failed to create session after {max_attempts} attempts"
73
+
74
+ def __str__(self):
75
+ return self.err
@@ -0,0 +1,152 @@
1
+ import sys, os, urllib.request, pathlib
2
+ from parse_hitmos import EnteredTrack, RatingPage, RatingCount
3
+ from parse_hitmos.tools.headers import get_headers
4
+
5
+ def downl(url, info):
6
+ req = urllib.request.Request(url, headers=get_headers())
7
+ with urllib.request.urlopen(req) as response, open(f'{PATH_DOWNLOAD_MUSIC}/{info}.mp3', "wb") as f:
8
+ f.write(response.read())
9
+
10
+ cwd = pathlib.Path.cwd()
11
+ PATH_DOWNLOAD_MUSIC = pathlib.Path.joinpath(cwd, 'download_music')
12
+
13
+ if not os.path.isdir(PATH_DOWNLOAD_MUSIC): os.mkdir(PATH_DOWNLOAD_MUSIC)
14
+
15
+ result_entered_tracks = EnteredTrack('linkin park', 10, True)
16
+ result_rating_count = RatingCount(1, True)
17
+ result_rating_page = RatingPage(1, True)
18
+
19
+ def print_new_line():
20
+ print('\n------------------------\n')
21
+
22
+
23
+ # Получить количество треков
24
+ amount_ET = result_entered_tracks.count_tracks
25
+ amount_RC = result_rating_count.count_tracks
26
+ amount_RP = result_rating_page.count_tracks
27
+
28
+ print(f'{amount_ET=}\n{amount_RC=}\n{amount_RP=}\n')
29
+ print_new_line()
30
+
31
+ # Получить автора треков
32
+ author_ET = result_entered_tracks.get_author
33
+ author_RC = result_rating_count.get_author
34
+ author_RP = result_rating_page.get_author
35
+
36
+ print(f'{author_ET=}\n{author_RC=}\n{author_RP=}\n')
37
+ print_new_line()
38
+
39
+ # Получить названия треков
40
+ title_ET = result_entered_tracks.get_title
41
+ title_RC = result_rating_count.get_title
42
+ title_RP = result_rating_page.get_title
43
+
44
+ print(f'{title_ET=}\n{title_RC=}\n{title_RP=}\n')
45
+ print_new_line()
46
+
47
+
48
+ # Получить ссылки на скачивания треков
49
+ url_down_ET = result_entered_tracks.get_url_down
50
+ url_down_RC = result_rating_count.get_url_down
51
+ url_down_RP = result_rating_page.get_url_down
52
+
53
+ print(f'{url_down_ET=}\n{url_down_RC=}\n{url_down_RP=}\n')
54
+ print_new_line()
55
+
56
+ # Получить прямую ссылку на скачивание треков
57
+ url_down_dir_ET = result_entered_tracks.direct_download_link
58
+ url_down_dir_RC = result_rating_count.direct_download_link
59
+ url_down_dir_RP = result_rating_page.direct_download_link
60
+
61
+ print(f'{url_down_dir_ET=}\n{url_down_dir_RC=}\n{url_down_dir_RP=}\n')
62
+ print_new_line()
63
+
64
+ # Получить длительность треков
65
+ duration_ET = result_entered_tracks.get_duration
66
+ duration_RC = result_rating_count.get_duration
67
+ duration_RP = result_rating_page.get_duration
68
+
69
+ print(f'{duration_ET=}\n{duration_RC=}\n{duration_RP=}\n')
70
+ print_new_line()
71
+
72
+ # Получить обложки треков
73
+ picture_ET = result_entered_tracks.get_picture_url
74
+ picture_RC = result_rating_count.get_picture_url
75
+ picture_RP = result_rating_page.get_picture_url
76
+
77
+ print(f'{picture_ET=}\n{picture_RC=}\n{picture_RP=}\n')
78
+ print_new_line()
79
+
80
+ # Получить ссылки на треки
81
+ url_tracks_ET = result_entered_tracks.get_url_track
82
+ url_tracks_RC = result_rating_count.get_url_track
83
+ url_tracks_RP = result_rating_page.get_url_track
84
+
85
+ print(f'{url_tracks_ET=}\n{url_tracks_RC=}\n{url_tracks_RP=}\n')
86
+ print_new_line()
87
+
88
+
89
+ # Получить все данные
90
+ all_data_ET = result_entered_tracks.get_all
91
+ all_data_RC = result_rating_count.get_all
92
+ all_data_RP = result_rating_page.get_all
93
+
94
+ print(f'{all_data_ET=}\n{all_data_RC=}\n{all_data_RP=}\n')
95
+ print_new_line()
96
+
97
+
98
+ # Получить автор - название
99
+ info_ET = result_entered_tracks.get_author_title
100
+ info_RC = result_rating_count.get_author_title
101
+ info_RP = result_rating_page.get_author_title
102
+
103
+ print(f'{info_ET=}\n{info_RC=}\n{info_RP=}\n')
104
+ print_new_line()
105
+
106
+ # Скачать найденные треки треки
107
+ def down_music_ET():
108
+ for _ in range(amount_ET):
109
+
110
+ if url_down_dir_ET[_] != None:
111
+ print(info_ET[_])
112
+ print(f'Скачиваю по ссылке: {url_down_dir_ET[_]}')
113
+ downl(url_down_dir_ET[_], info_ET[_])
114
+
115
+ else:
116
+ print(title_ET[_])
117
+ print(f'Скачиваю hitmotop\n{url_tracks_ET[_]}')
118
+ downl(url_tracks_ET[_], info_ET[_])
119
+
120
+ def down_music_RC():
121
+ for _ in range(amount_RC):
122
+
123
+ if url_down_dir_RC[_] != None:
124
+ print(info_RC[_])
125
+ print(f'Скачиваю по ссылке: {url_down_dir_RC[_]}')
126
+ downl(url_down_dir_RC[_], info_RC[_])
127
+
128
+ else:
129
+ print(title_RC[_])
130
+ print(f'Скачиваю hitmotop\n{url_tracks_RC[_]}')
131
+ downl(url_tracks_RC[_], info_RC[_])
132
+
133
+ def down_music_RP():
134
+ for _ in range(amount_RP):
135
+
136
+ if url_down_dir_RP[_] != None:
137
+ print(info_RP[_])
138
+ print(f'Скачиваю по ссылке: {url_down_dir_RP[_]}')
139
+ downl(url_down_dir_RP[_], info_RP[_])
140
+
141
+ else:
142
+ print(title_RP[_])
143
+ print(f'Скачиваю hitmotop\n{url_tracks_RP[_]}')
144
+ downl(url_tracks_RP[_], info_RP[_])
145
+
146
+
147
+ print_new_line()
148
+ down_music_ET()
149
+ print_new_line()
150
+ down_music_RC()
151
+ print_new_line()
152
+ down_music_RP()
@@ -0,0 +1,113 @@
1
+ from bs4 import BeautifulSoup
2
+
3
+ from parse_hitmos.tools.headers import get_headers
4
+ from parse_hitmos.excepts import CountTracksErr, RedirectErr
5
+ from parse_hitmos.tools.base_session import BaseSessionHandlerRating
6
+ from parse_hitmos.tools.retry_func import safe_get, safe_head
7
+ from parse_hitmos.tools.replace_symbol import replace_symbol_in_title
8
+
9
+
10
+ class RatingCount(BaseSessionHandlerRating):
11
+ '''
12
+ Класс для получения списка рейтинговых треков.\n
13
+ :param count: число от 1 до 48 - количество треков\n
14
+ :param get_redirect_url: True-получить прямую ссылку на скачивание трека\n
15
+ :type count: int\n
16
+ :type get_redirect_url: bool
17
+
18
+ .. note:: Установка get_redirect_url=True может значительно увеличить время выполнения.\n
19
+ Методы:\n
20
+ - get_author -> list[str]: автор трека
21
+ - get_title -> list[str]: название трека
22
+ - get_url_down -> list[str]: ссылка на скачивание трека
23
+ - direct_download_link -> list[str]: прямая ссылка на скачивание трека
24
+ - get_duration -> list[str]: длительность трека
25
+ - get_picture_url -> list[str]: ссылка на обложку трека
26
+ - get_url_track -> list[str]: ссылка на трек
27
+ '''
28
+
29
+ def __init__(self, count_tracks, get_redirect_url=False):
30
+ if not isinstance(count_tracks, int): raise CountTracksErr
31
+ if not isinstance(get_redirect_url, bool): raise RedirectErr
32
+
33
+ self.count_tracks = count_tracks
34
+ self.get_redirect_url = get_redirect_url
35
+
36
+ super().__init__()
37
+
38
+ self.count_selection
39
+
40
+ @property
41
+ def count_selection(self) -> dict[str, list[dict[str, None | str]]]:
42
+
43
+ if self.count_tracks > 48:
44
+ raise ValueError('Only <= 48')
45
+
46
+ else:
47
+ __headers = get_headers()
48
+ request = safe_get(self, self.song_rated, headers=__headers)
49
+ _soup = BeautifulSoup(request.text, 'html.parser')
50
+
51
+ _track_titles = [i.text.strip() for i in _soup.find_all("div", class_="track__title")]
52
+ _track_artists = [i.text.strip() for i in _soup.find_all("div", class_="track__desc")]
53
+ _track_duration = [i.text.strip() for i in _soup.find_all("div", class_="track__fulltime")]
54
+ _track_pictures = [f"{i.get('style')[23:-3]}" for i in _soup.find_all("div", class_="track__img")]
55
+ _track_urls_dow = [i.get('href') for i in _soup.find_all('a', class_='track__download-btn')]
56
+ _track_url = [f"{self.base_url[:-1]}{tra_url.get('href')}" for tra_url in _soup.find_all('a', class_='track__info-l')]
57
+
58
+ _items = []
59
+
60
+ for idx in range(self.count_tracks if len(_track_titles) > self.count_tracks else len(_track_titles)):
61
+ if self.get_redirect_url and len(_track_urls_dow[idx]) > 0:
62
+ direct_download_link = safe_head(self, _track_urls_dow[idx], headers=__headers, allow_redirects=True, timeout=5).url
63
+ else: direct_download_link = None
64
+ item = {
65
+ 'author': _track_artists[idx],
66
+ 'title': replace_symbol_in_title(_track_titles[idx]),
67
+ 'url_down': _track_urls_dow[idx],
68
+ 'direct_download_link': direct_download_link,
69
+ 'duration_track': _track_duration[idx],
70
+ 'picture_url': _track_pictures[idx],
71
+ 'url_track': _track_url[idx]
72
+ }
73
+ _items.append(item)
74
+
75
+ self.session.close()
76
+ self.data = {"items": _items}
77
+ return self.data
78
+ @property
79
+ def get_author(self) -> list[str]:
80
+ return [item['author'] for item in self.data['items']]
81
+
82
+ @property
83
+ def get_title(self) -> list[str]:
84
+ return [item['title'] for item in self.data['items']]
85
+
86
+ @property
87
+ def get_url_down(self) -> list[str]:
88
+ return [item['url_down'] for item in self.data['items']]
89
+
90
+ @property
91
+ def direct_download_link(self) -> list[None | str]:
92
+ return [item['direct_download_link'] for item in self.data['items']]
93
+
94
+ @property
95
+ def get_duration(self) -> list[str]:
96
+ return [item['duration_track'] for item in self.data['items']]
97
+
98
+ @property
99
+ def get_picture_url(self) -> list[str]:
100
+ return [item['picture_url'] for item in self.data['items']]
101
+
102
+ @property
103
+ def get_url_track(self) -> list[str]:
104
+ return [item['url_track'] for item in self.data['items']]
105
+
106
+ @property
107
+ def get_all(self): return self.data
108
+
109
+ @property
110
+ def get_author_title(self) -> list[str]:
111
+ __author = self.get_author
112
+ __title = self.get_title
113
+ return [f'{__author[i]} - {__title[i]}' for i in range(self.count_tracks)]
@@ -0,0 +1,172 @@
1
+ from bs4 import BeautifulSoup
2
+ from urllib.parse import urljoin
3
+
4
+ from parse_hitmos.tools.headers import get_headers
5
+ from parse_hitmos.excepts import PageError, RedirectErr, PageCount
6
+ from parse_hitmos.tools.base_session import BaseSessionHandlerRatingPage
7
+ from parse_hitmos.tools.retry_func import safe_get, safe_head
8
+ from parse_hitmos.tools.replace_symbol import replace_symbol_in_title
9
+
10
+
11
+ class RatingPage(BaseSessionHandlerRatingPage):
12
+ '''
13
+ Функция для получения списка рейтинговых треков\n
14
+ :param page_count: число от 1 до 11 (номер страницы с треками)
15
+ :param get_redirect_url: True-получить прямую ссылку на скачивание трека, но увеличивает время выполнения
16
+ :type page_count: int
17
+ :type get_redirect_url: bool
18
+
19
+ .. note:: Установка get_redirect_url=True может значительно увеличить время выполнения.\n
20
+ Методы:\n
21
+ - get_author -> list[str]: автор трека
22
+ - get_title -> list[str]: название трека
23
+ - get_url_down -> list[str]: ссылка на скачивание трека
24
+ - direct_download_link -> list[str]: прямая ссылка на скачивание трека
25
+ - get_duration -> list[str]: длительность трека
26
+ - get_picture_url -> list[str]: ссылка на обложку трека
27
+ - get_url_track -> list[str]: ссылка на трек
28
+ '''
29
+ def __init__(self, page_count:int, get_redirect_url=False):
30
+ if not isinstance(page_count, int): raise PageCount
31
+ if not isinstance(get_redirect_url, bool): raise RedirectErr
32
+
33
+ self.page_count = int(page_count)
34
+ self.get_redirect_url = get_redirect_url
35
+
36
+ super().__init__()
37
+
38
+ self.__page_selection
39
+
40
+
41
+ @property
42
+ def __page_selection(self):
43
+
44
+ if self.page_count > 11:
45
+ raise PageError
46
+ else:
47
+
48
+
49
+ if self.page_count == 1:
50
+ __list = []
51
+ __headers = get_headers()
52
+ response = safe_get(self, self.song_rated, headers=__headers, timeout=10, allow_redirects=self.get_redirect_url)
53
+ _soup = BeautifulSoup(response.text, 'html.parser')
54
+ if not self.get_redirect_url: self.session.close()
55
+
56
+
57
+ _track_titles = [i.text.strip() for i in _soup.find_all("div", class_="track__title")]
58
+ _track_artists = [i.text.strip() for i in _soup.find_all("div", class_="track__desc")]
59
+ _track_duration = [i.text.strip() for i in _soup.find_all("div", class_="track__fulltime")]
60
+ _track_pictures = [f"{i.get('style')[23:-3]}" for i in _soup.find_all("div", class_="track__img")]
61
+ _track_urls_dow = [i.get('href') for i in _soup.find_all('a', class_='track__download-btn')]
62
+ _track_url = [f"{self.base_url[:-1]}{tra_url.get('href')}" for tra_url in _soup.find_all('a', class_='track__info-l')]
63
+
64
+ for idx in range(0, len(_track_titles)):
65
+ if self.get_redirect_url and len(_track_urls_dow[idx]) > 0:
66
+ try:
67
+ direct_download_link = self.session.head(_track_urls_dow[idx], headers=__headers, allow_redirects=True).url
68
+ except Exception as err:
69
+ print(err)
70
+
71
+ direct_download_link = safe_head(self, _track_urls_dow[idx], headers=__headers, allow_redirects=True)
72
+ direct_download_link = direct_download_link.url
73
+ else:
74
+ direct_download_link = None
75
+
76
+ items={
77
+ 'author': _track_artists[idx],
78
+ 'title': replace_symbol_in_title(_track_titles[idx]),
79
+ 'url_down': _track_urls_dow[idx],
80
+ 'direct_download_link': direct_download_link,
81
+ 'url_track': _track_url[idx],
82
+ 'duration_track': _track_duration[idx],
83
+ 'picture_url': _track_pictures[idx]
84
+ }
85
+ __list.append(items)
86
+
87
+ self.count_tracks = len(__list)
88
+ self.data = {'items': __list}
89
+ return self.data
90
+
91
+ else:
92
+ self.page_count *= 48
93
+
94
+ __list = []
95
+
96
+ items = []
97
+ for page in range(0, self.page_count, 48):
98
+ __headers = get_headers()
99
+ response = safe_get(self, urljoin(self.song_rated_more1, str(page)), cookies={'sid':self.sid.get_sid()}, headers=__headers, timeout=5)
100
+ soup = BeautifulSoup(response.text, 'html.parser')
101
+ if not self.get_redirect_url: self.session.close()
102
+
103
+ track_titles = [i.text.strip() for i in soup.find_all("div", class_="track__title")]
104
+ track_artists = [i.text.strip() for i in soup.find_all("div", class_="track__desc")]
105
+ track_duration = [i.text.strip() for i in soup.find_all("div", class_="track__fulltime")]
106
+ track_pictures = [f"{i.get('style')[23:-3]}" for i in soup.find_all("div", class_="track__img")]
107
+ track_urls_dow = [f"{track_dow_url.get('href')}" for track_dow_url in soup.find_all('a', class_='track__download-btn')]
108
+ track_url = [f"{self.base_url[:-1]}{tra_url.get('href')}" for tra_url in soup.find_all('a', class_='track__info-l')]
109
+
110
+ for idx in range(0, len(track_titles)):
111
+ if self.get_redirect_url and len(track_urls_dow[idx]) > 0:
112
+ try:
113
+ direct_download_link = self.session.head(track_urls_dow[idx], headers=__headers, allow_redirects=True).url
114
+ except Exception as err:
115
+ print(err)
116
+
117
+ direct_download_link = safe_get(self, track_urls_dow[idx], headers=__headers, allow_redirects=True)
118
+ direct_download_link = direct_download_link.url
119
+
120
+ else: direct_download_link=None
121
+
122
+ items={
123
+ 'author': track_artists[idx],
124
+ 'title': track_titles[idx],
125
+ 'url_down': track_urls_dow[idx],
126
+ 'direct_download_link': direct_download_link,
127
+ 'url_track': track_url[idx],
128
+ 'duration_track': track_duration[idx],
129
+ 'picture_url': track_pictures[idx]
130
+ }
131
+ __list.append(items)
132
+ self.session.close()
133
+ self.count_tracks = len(__list)
134
+ self.data = {'items': __list}
135
+ return self.data
136
+
137
+ @property
138
+ def get_author(self) -> list[str]:
139
+ return [item['author'] for item in self.data['items']]
140
+
141
+ @property
142
+ def get_title(self) -> list[str]:
143
+ return [item['title'] for item in self.data['items']]
144
+
145
+ @property
146
+ def get_url_down(self) -> list[str]:
147
+ return [item['url_down'] for item in self.data['items']]
148
+
149
+ @property
150
+ def direct_download_link(self) -> list[None | str]:
151
+ return [item['direct_download_link'] for item in self.data['items']]
152
+
153
+ @property
154
+ def get_duration(self) -> list[str]:
155
+ return [item['duration_track'] for item in self.data['items']]
156
+
157
+ @property
158
+ def get_picture_url(self) -> list[str]:
159
+ return [item['picture_url'] for item in self.data['items']]
160
+
161
+ @property
162
+ def get_url_track(self) -> list[str]:
163
+ return [item['url_track'] for item in self.data['items']]
164
+
165
+ @property
166
+ def get_all(self) -> list[str]: return self.data
167
+
168
+ @property
169
+ def get_author_title(self) -> list[str]:
170
+ __author = self.get_author
171
+ __title = self.get_title
172
+ return [f'{__author[i]} - {__title[i]}' for i in range(self.count_tracks)]
@@ -0,0 +1,33 @@
1
+ from setuptools import setup
2
+
3
+ version='1.0.0'
4
+
5
+ with open('README.md', encoding='utf-8') as f:
6
+ long_description=f.read()
7
+
8
+ setup(
9
+ name = 'pars_hitmotop',
10
+ version = version,
11
+
12
+ author = 'Joy_079',
13
+ author_email = 'Prufu@yandex.ru',
14
+ long_description = long_description,
15
+ long_description_content_type = 'text/markdown',
16
+ url = 'https://github.com/JoyHubN/pars_hitmos',
17
+ download_url = f'https://github.com/JoyHubN/pars_hitmos/arhive/v{version}.zip',
18
+ install_requires = ['beautifulsoup4==4.13.4',
19
+ 'fake-useragent==2.2.0',
20
+ 'requests==2.32.4',
21
+ 'tenacity==9.1.2',
22
+ ],
23
+ # license=...,
24
+ packages = ['parse_hitmos'],
25
+ classifiers = [
26
+ 'Programming Language :: Python',
27
+ 'Programming Language :: Python :: 3.8',
28
+ 'Programming Language :: Python :: 3.9',
29
+ 'Programming Language :: Python :: 3.10',
30
+ 'Programming Language :: Python :: 3.11',
31
+ 'Programming Language :: Python :: Implementation :: PyPy'
32
+ ]
33
+ )
@@ -1,65 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: pars-hitmotop
3
- Version: 0.1.0
4
- Summary: pars-hitmotop is now pars-hitmos
5
- Classifier: Development Status :: 7 - Inactive
6
- Description-Content-Type: text/markdown
7
-
8
- # pars-hitmontop теперь называется pars-hitmos
9
-
10
- Этот пакет был переименован. Вместо этого используйте `pip install pars-hitmos`.
11
-
12
- Новый пакет: https://pypi.org/project/pars-hitmos/
13
-
14
-
15
- # Оглавление
16
- 0. [Оглавление](https://github.com/JoyHubN/pars_hitmos#оглавление)
17
- 1. [Что именно парсит?](https://github.com/JoyHubN/pars_hitmos/blob/main/README.md#что-именно-парсит)
18
- 2. [Как использовать модуль entered_tracks](https://github.com/JoyHubN/pars_hitmos/blob/main/README.md#как-использовать-модуль-entered_tracks)
19
- 3. [Как использовать модуль rating_tracks_count](https://github.com/JoyHubN/pars_hitmos/blob/main/README.md#как-использовать-модуль-rating_tracks_count)
20
- 4. [Как использовать модуль rating_tracks_page](https://github.com/JoyHubN/pars_hitmos/blob/main/README.md#как-использовать-модуль-rating_tracks_page)
21
- 5. [Что можно достать при запросе?](https://github.com/JoyHubN/pars_hitmos/blob/main/README.md#что-можно-достать-при-запросе)
22
- ____
23
- Этот проект парсит [музыкальный сайт](https://hitmos.me/)
24
- ____
25
- # Что именно парсит?
26
- 1. [Рейтинговые треки](https://hitmos.me/songs/top-rated) от 1 до 48;
27
- 2. Тоже [рейтинговые треки](https://hitmos.me/songs/top-rated) но можно выбрать количество страниц, с которых будет произведен парсинг;
28
- 3. Треки введенные пользователем. Парсит от 1 трека до конечной страницы (на одной странице 48 треков)
29
- ____
30
- ## Как использовать модуль *entered_tracks*
31
- ```
32
- from pars_hitmos.entered_tracks import EnteredTrack
33
- result=EnteredTrack('linkin park',10)
34
- ```
35
- 1 аргументом (music_name) передается название песни или автора. 2 Аргументом (count) передается количество треков
36
- ____
37
- ## Как использовать модуль *rating_tracks_count*
38
- ```
39
- from pars_hitmos.rating_tracks_count import RatingCount
40
- result=RatingCount(10)
41
- ```
42
- 1 аргументом (count) передается количество песен
43
- ____
44
- ## Как использовать модуль *rating_tracks_page*
45
- ```
46
- from pars_hitmos.rating_tracks_page import RatingPage
47
- result=RatingPage(10)
48
- ```
49
- 1 аргументом (count) передается количество страниц (max 11)
50
- ____
51
- # Что можно достать при запросе?
52
- Все возвращается в виде list
53
- | Метод | Описание |
54
- |----------------|:---------|
55
- | result.get_author | Получить автора трека|
56
- |result.get_title| Получить название трека|
57
- |result.get_url_down|Получить ссылку на скачивание трека|
58
- |result.direct_download_link|Получить прямую ссылку на скачивание трека|
59
- |result.get_duration|Получить продолжительность трека|
60
- |result.get_picture_url|Получить ссылку на обложку трека|
61
- |result.get_url_track|Получить ссылку трек|
62
- |result.get_all|Получить все данные в виде словаря|
63
- |result.get_author_title|Получить лист в виде автор - название|
64
-
65
- ____
@@ -1,65 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: pars-hitmotop
3
- Version: 0.1.0
4
- Summary: pars-hitmotop is now pars-hitmos
5
- Classifier: Development Status :: 7 - Inactive
6
- Description-Content-Type: text/markdown
7
-
8
- # pars-hitmontop теперь называется pars-hitmos
9
-
10
- Этот пакет был переименован. Вместо этого используйте `pip install pars-hitmos`.
11
-
12
- Новый пакет: https://pypi.org/project/pars-hitmos/
13
-
14
-
15
- # Оглавление
16
- 0. [Оглавление](https://github.com/JoyHubN/pars_hitmos#оглавление)
17
- 1. [Что именно парсит?](https://github.com/JoyHubN/pars_hitmos/blob/main/README.md#что-именно-парсит)
18
- 2. [Как использовать модуль entered_tracks](https://github.com/JoyHubN/pars_hitmos/blob/main/README.md#как-использовать-модуль-entered_tracks)
19
- 3. [Как использовать модуль rating_tracks_count](https://github.com/JoyHubN/pars_hitmos/blob/main/README.md#как-использовать-модуль-rating_tracks_count)
20
- 4. [Как использовать модуль rating_tracks_page](https://github.com/JoyHubN/pars_hitmos/blob/main/README.md#как-использовать-модуль-rating_tracks_page)
21
- 5. [Что можно достать при запросе?](https://github.com/JoyHubN/pars_hitmos/blob/main/README.md#что-можно-достать-при-запросе)
22
- ____
23
- Этот проект парсит [музыкальный сайт](https://hitmos.me/)
24
- ____
25
- # Что именно парсит?
26
- 1. [Рейтинговые треки](https://hitmos.me/songs/top-rated) от 1 до 48;
27
- 2. Тоже [рейтинговые треки](https://hitmos.me/songs/top-rated) но можно выбрать количество страниц, с которых будет произведен парсинг;
28
- 3. Треки введенные пользователем. Парсит от 1 трека до конечной страницы (на одной странице 48 треков)
29
- ____
30
- ## Как использовать модуль *entered_tracks*
31
- ```
32
- from pars_hitmos.entered_tracks import EnteredTrack
33
- result=EnteredTrack('linkin park',10)
34
- ```
35
- 1 аргументом (music_name) передается название песни или автора. 2 Аргументом (count) передается количество треков
36
- ____
37
- ## Как использовать модуль *rating_tracks_count*
38
- ```
39
- from pars_hitmos.rating_tracks_count import RatingCount
40
- result=RatingCount(10)
41
- ```
42
- 1 аргументом (count) передается количество песен
43
- ____
44
- ## Как использовать модуль *rating_tracks_page*
45
- ```
46
- from pars_hitmos.rating_tracks_page import RatingPage
47
- result=RatingPage(10)
48
- ```
49
- 1 аргументом (count) передается количество страниц (max 11)
50
- ____
51
- # Что можно достать при запросе?
52
- Все возвращается в виде list
53
- | Метод | Описание |
54
- |----------------|:---------|
55
- | result.get_author | Получить автора трека|
56
- |result.get_title| Получить название трека|
57
- |result.get_url_down|Получить ссылку на скачивание трека|
58
- |result.direct_download_link|Получить прямую ссылку на скачивание трека|
59
- |result.get_duration|Получить продолжительность трека|
60
- |result.get_picture_url|Получить ссылку на обложку трека|
61
- |result.get_url_track|Получить ссылку трек|
62
- |result.get_all|Получить все данные в виде словаря|
63
- |result.get_author_title|Получить лист в виде автор - название|
64
-
65
- ____
@@ -1,7 +0,0 @@
1
- README.md
2
- setup.py
3
- pars_hitmotop.egg-info/PKG-INFO
4
- pars_hitmotop.egg-info/SOURCES.txt
5
- pars_hitmotop.egg-info/dependency_links.txt
6
- pars_hitmotop.egg-info/requires.txt
7
- pars_hitmotop.egg-info/top_level.txt
@@ -1 +0,0 @@
1
- pars-hitmos
@@ -1,23 +0,0 @@
1
- from setuptools import setup
2
- import os
3
-
4
- VERSION = "0.1.0"
5
-
6
-
7
- def get_long_description():
8
- with open(
9
- os.path.join(os.path.dirname(os.path.abspath(__file__)), "README.md"),
10
- encoding="utf8",
11
- ) as fp:
12
- return fp.read()
13
-
14
-
15
- setup(
16
- name="pars-hitmotop",
17
- description="pars-hitmotop is now pars-hitmos",
18
- long_description=get_long_description(),
19
- long_description_content_type="text/markdown",
20
- version=VERSION,
21
- install_requires=["pars-hitmos"],
22
- classifiers=["Development Status :: 7 - Inactive"],
23
- )
File without changes