pars-hitmotop 0.0.8__tar.gz → 0.1.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,65 @@
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
+ ____
@@ -0,0 +1,58 @@
1
+ # pars-hitmontop теперь называется pars-hitmos
2
+
3
+ Этот пакет был переименован. Вместо этого используйте `pip install pars-hitmos`.
4
+
5
+ Новый пакет: https://pypi.org/project/pars-hitmos/
6
+
7
+
8
+ # Оглавление
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#что-можно-достать-при-запросе)
15
+ ____
16
+ Этот проект парсит [музыкальный сайт](https://hitmos.me/)
17
+ ____
18
+ # Что именно парсит?
19
+ 1. [Рейтинговые треки](https://hitmos.me/songs/top-rated) от 1 до 48;
20
+ 2. Тоже [рейтинговые треки](https://hitmos.me/songs/top-rated) но можно выбрать количество страниц, с которых будет произведен парсинг;
21
+ 3. Треки введенные пользователем. Парсит от 1 трека до конечной страницы (на одной странице 48 треков)
22
+ ____
23
+ ## Как использовать модуль *entered_tracks*
24
+ ```
25
+ from pars_hitmos.entered_tracks import EnteredTrack
26
+ result=EnteredTrack('linkin park',10)
27
+ ```
28
+ 1 аргументом (music_name) передается название песни или автора. 2 Аргументом (count) передается количество треков
29
+ ____
30
+ ## Как использовать модуль *rating_tracks_count*
31
+ ```
32
+ from pars_hitmos.rating_tracks_count import RatingCount
33
+ result=RatingCount(10)
34
+ ```
35
+ 1 аргументом (count) передается количество песен
36
+ ____
37
+ ## Как использовать модуль *rating_tracks_page*
38
+ ```
39
+ from pars_hitmos.rating_tracks_page import RatingPage
40
+ result=RatingPage(10)
41
+ ```
42
+ 1 аргументом (count) передается количество страниц (max 11)
43
+ ____
44
+ # Что можно достать при запросе?
45
+ Все возвращается в виде list
46
+ | Метод | Описание |
47
+ |----------------|:---------|
48
+ | result.get_author | Получить автора трека|
49
+ |result.get_title| Получить название трека|
50
+ |result.get_url_down|Получить ссылку на скачивание трека|
51
+ |result.direct_download_link|Получить прямую ссылку на скачивание трека|
52
+ |result.get_duration|Получить продолжительность трека|
53
+ |result.get_picture_url|Получить ссылку на обложку трека|
54
+ |result.get_url_track|Получить ссылку трек|
55
+ |result.get_all|Получить все данные в виде словаря|
56
+ |result.get_author_title|Получить лист в виде автор - название|
57
+
58
+ ____
@@ -0,0 +1,65 @@
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
+ ____
@@ -0,0 +1,7 @@
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
@@ -0,0 +1 @@
1
+ pars-hitmos
@@ -1,4 +1,4 @@
1
- [egg_info]
2
- tag_build =
3
- tag_date = 0
4
-
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,23 @@
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
+ )
@@ -1,64 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: pars_hitmotop
3
- Version: 0.0.8
4
- Home-page: https://github.com/PY079/pars_hitmotop
5
- Download-URL: https://github.com/PY079/pars_hitmotop/arhive/v0.0.8.zip
6
- Author: Joy_079
7
- Author-email: Prufu@yandex.ru
8
- Classifier: Programming Language :: Python
9
- Classifier: Programming Language :: Python :: 3.7
10
- Classifier: Programming Language :: Python :: 3.8
11
- Classifier: Programming Language :: Python :: 3.9
12
- Classifier: Programming Language :: Python :: Implementation :: PyPy
13
- Description-Content-Type: text/markdown
14
-
15
- # Оглавление
16
- 0. [Оглавление](https://github.com/PY079/pars_hitmotop#оглавление)
17
- 1. [Что именно парсит?](https://github.com/PY079/pars_hitmotop/blob/main/README.md#что-именно-парсит)
18
- 2. [Как использовать модуль entered_tracks](https://github.com/PY079/pars_hitmotop/blob/main/README.md#как-использовать-модуль-entered_tracks)
19
- 3. [Как использовать модуль rating_tracks_count](https://github.com/PY079/pars_hitmotop/blob/main/README.md#как-использовать-модуль-rating_tracks_count)
20
- 4. [Как использовать модуль rating_tracks_page](https://github.com/PY079/pars_hitmotop/blob/main/README.md#как-использовать-модуль-rating_tracks_page)
21
- 5. [Что можно достать при запросе?](https://github.com/PY079/pars_hitmotop/blob/main/README.md#что-можно-достать-при-запросе)
22
- ____
23
- Этот проект парсит [музыкальный сайт](https://rur.hitmotop.com/)
24
- ____
25
- # Что именно парсит?
26
- 1. [Рейтинговые треки](https://rur.hitmotop.com/songs/top-rated) от 1 до 48;
27
- 2. Тоже [рейтиновые треки](https://rur.hitmotop.com/songs/top-rated) но можно выбрать количество страниц, с которых будет произведен парсинг;
28
- 3. Треки введеные пользователем. Парсит от 1 трека до конечной страницы (на одной старнице 48 треков)
29
- ____
30
- ## Как использовать модуль *entered_tracks*
31
- ```
32
- from pars_hitmotop.entered_tracks import EnteredTrack
33
- result=EnteredTrack('linkin park',10)
34
- ```
35
- 1 аргументом (musci_name) передается название пенси или автора. 2 Аргументом (count) передается количество треков
36
- ____
37
- ## Как использовать модуль *rating_tracks_count*
38
- ```
39
- from pars_hitmotop.rating_tracks_count import RatingCount
40
- result=RatingCount(10)
41
- ```
42
- 1 аргументом (count) передается количество песен
43
- ____
44
- ## Как использовать модуль *rating_tracks_page*
45
- ```
46
- from pars_hitmotop.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_duraction|Получить продолжительность трека|
60
- |result.get_picture_url|Получить ссылку на обложку трека|
61
- |result.get_url_track|Получить ссылку трек|
62
- |result.get_all|Получить все данные в виде словаря|
63
-
64
- ____
@@ -1,50 +0,0 @@
1
- # Оглавление
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#что-можно-достать-при-запросе)
8
- ____
9
- Этот проект парсит [музыкальный сайт](https://rur.hitmotop.com/)
10
- ____
11
- # Что именно парсит?
12
- 1. [Рейтинговые треки](https://rur.hitmotop.com/songs/top-rated) от 1 до 48;
13
- 2. Тоже [рейтиновые треки](https://rur.hitmotop.com/songs/top-rated) но можно выбрать количество страниц, с которых будет произведен парсинг;
14
- 3. Треки введеные пользователем. Парсит от 1 трека до конечной страницы (на одной старнице 48 треков)
15
- ____
16
- ## Как использовать модуль *entered_tracks*
17
- ```
18
- from pars_hitmotop.entered_tracks import EnteredTrack
19
- result=EnteredTrack('linkin park',10)
20
- ```
21
- 1 аргументом (musci_name) передается название пенси или автора. 2 Аргументом (count) передается количество треков
22
- ____
23
- ## Как использовать модуль *rating_tracks_count*
24
- ```
25
- from pars_hitmotop.rating_tracks_count import RatingCount
26
- result=RatingCount(10)
27
- ```
28
- 1 аргументом (count) передается количество песен
29
- ____
30
- ## Как использовать модуль *rating_tracks_page*
31
- ```
32
- from pars_hitmotop.rating_tracks_page import RatingPage
33
- result=RatingPage(10)
34
- ```
35
- 1 аргументом (count) передается количество страниц (max 11)
36
- ____
37
- # Что можно достать при запросе?
38
- Все вовзращается в виде list
39
- | Метод | Описание |
40
- |----------------|:---------|
41
- | result.get_author | Получить автора трека|
42
- |result.get_title| Получить название трека|
43
- |result.get_url_down|Получить ссылку на скачивание трека|
44
- |result.direct_download_link|Получть пряму ссылку на скачивание трека|
45
- |result.get_duraction|Получить продолжительность трека|
46
- |result.get_picture_url|Получить ссылку на обложку трека|
47
- |result.get_url_track|Получить ссылку трек|
48
- |result.get_all|Получить все данные в виде словаря|
49
-
50
- ____
@@ -1,6 +0,0 @@
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__= '0.0.5'
@@ -1,108 +0,0 @@
1
- import fake_useragent, requests
2
- from bs4 import BeautifulSoup
3
- from .excepts import NoFoundTrack, MaxTrack
4
-
5
- class EnteredTrack:
6
- """
7
- Треки из запроса
8
- :param music_name: Название и автор трека в одной строке. - str
9
- :param amount: Количество треков, которое нужно вывести. Max 48. - int
10
- :param get_redirect_url: bool тип, True-получить прямую ссылку на скачивание трека, но увеличивает время время выполнения
11
- Для получения информации доступны след.функции:
12
- - get_author: list, автор трека;
13
- - get_title: list, название трека;
14
- - get_url_down: list, ссылка на скачивание трека;
15
- - direct_download_link: list прямая ссылка на скачивание трека;
16
- - get_duraction: list, длительность трека;
17
- - get_picture_url: list, ссылка на обложку трека;
18
- - get_url_track: list, ссылка на трек.
19
-
20
- """
21
-
22
- def __init__(self, music_name:str, amount:int, get_redirect_url=False):
23
- self.music_name = music_name
24
- self.amount = amount
25
- self.get_redirect_url = get_redirect_url
26
- self.get_info
27
-
28
-
29
- @property
30
- def get_info(self):
31
-
32
- if self.amount > 48:
33
- raise MaxTrack
34
- else:
35
- __user = fake_useragent.UserAgent().random
36
- __headers = {"user-agent": __user}
37
- __url11= requests.get('https://hitmos.me/', headers=__headers, allow_redirects=True).url
38
- __url1= __url11[:-1] if '/' in __url11[:-1] else __url11
39
-
40
- _url = f"{__url1}{'/' if '/' in __url1[:-1] else ''}search?q={self.music_name}"
41
-
42
- _response = requests.get(_url, headers=__headers)
43
- _soup = BeautifulSoup(_response.text, "html.parser")
44
-
45
-
46
- if _soup.find('h2',class_='tracks__title content-item-title'):
47
- raise NoFoundTrack
48
-
49
-
50
-
51
- # получаем информацию о треках
52
- _track_titles = [i.text.strip() for i in _soup.find_all("div", class_="track__title")]
53
- _track_artists = [i.text.strip() for i in _soup.find_all("div", class_="track__desc")]
54
- _track_duration = [i.text.strip() for i in _soup.find_all("div", class_="track__fulltime")]
55
- _track_pictures = [f"{i.get('style')[23:-3]}" for i in _soup.find_all("div", class_="track__img")]
56
- _track_urls_dow = [i.get('href') for i in _soup.find_all('a', class_='track__download-btn')]
57
- _track_url = [f"{__url1}{tra_url.get('href')}" for tra_url in _soup.find_all('a', class_='track__info-l')]
58
-
59
- _items = []
60
- for idx in range(min(len(_track_titles), self.amount)):
61
- if self.get_redirect_url and len(_track_urls_dow[idx])>0:
62
- direct_download_link = requests.get(_track_urls_dow[idx],headers=__headers,allow_redirects=True).url
63
- print(f'Получил прямую ссылку: {direct_download_link}')
64
- else: direct_download_link = None
65
-
66
- item = {
67
- 'author': _track_artists[idx],
68
- 'title': _track_titles[idx].replace('/','').replace(':','').replace('*','').replace('?','').replace('"','').replace('<','').replace('>','').replace('|','').replace('\\',''),
69
- 'url_down': _track_urls_dow[idx],
70
- 'direct_download_link': direct_download_link,
71
- 'duration_track': _track_duration[idx],
72
- 'picture_url': _track_pictures[idx],
73
- 'url_track': _track_url[idx]
74
- }
75
- _items.append(item)
76
-
77
- self.count_tracks = len(_items)
78
- self.data = {"items": _items}
79
- return self.data
80
-
81
- @property
82
- def get_author(self):
83
- return [item['author'] for item in self.data['items']]
84
-
85
- @property
86
- def get_title(self):
87
- return [item['title'] for item in self.data['items']]
88
-
89
- @property
90
- def get_url_down(self):
91
- return [item['url_down'] for item in self.data['items']]
92
-
93
- @property
94
- def direct_download_link(self):
95
- return [item['direct_download_link'] for item in self.data['items']]
96
-
97
- @property
98
- def get_duraction(self):
99
- return [item['duration_track'] for item in self.data['items']]
100
-
101
- @property
102
- def get_picture_url(self):
103
- return [item['picture_url'] for item in self.data['items']]
104
-
105
- @property
106
- def get_url_track(self):
107
- return [item['url_track'] for item in self.data['items']]
108
-
@@ -1,24 +0,0 @@
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
@@ -1,58 +0,0 @@
1
- from .entered_tracks import EnteredTrack
2
- import urllib.request, os
3
- from colorama import Fore, Style, init
4
- os.system('cls')
5
- init()
6
-
7
- path=r'C:\Users\днс\python_project\pars_hitmotop\music'
8
- result=EnteredTrack('linkin park',10)
9
-
10
-
11
- # Получить количество треков
12
- amout = result.count_tracks
13
-
14
- # Получить автора треков
15
- author = result.get_author
16
-
17
- # Получить названия треков
18
- title = result.get_title
19
-
20
- # Получить ссылки на скачивания треков
21
- url_down= result.get_url_down
22
-
23
- # Получить прямую ссылку на скачивание треков
24
- url_down_new= result.direct_download_link
25
-
26
- # Получить длителькость треков
27
- duraction = result.get_duraction
28
-
29
- # Получить обложки треков
30
- picture = result.get_picture_url
31
-
32
- # Получить ссылки на треки
33
- url_tracks = result.get_url_track
34
-
35
- # Скачать найденные треки треки
36
- def down_music(path,result):
37
- for _ in range(result.count_tracks):
38
- print(f'Скачиваю по ссылке: {result.direct_download_link[_]}')
39
- if result.direct_download_link[_] != None:
40
- urllib.request.urlretrieve(result.direct_download_link[_],f"{path}\{result.get_title[_]}.mp3")
41
- else:
42
- print(result.get_title[_])
43
- print(f'Скачиваю hitmotop\n{result.get_url_down[_]}')
44
- urllib.request.urlretrieve(result.get_url_down[_],f"{path}\{result.get_title[_]}.mp3")
45
-
46
-
47
- print(f'{Fore.BLUE+Style.BRIGHT}1 запрос {result.music_name}{Style.RESET_ALL}\n')
48
- for _ in range(result.count_tracks):
49
- print(f"{author} - {title} {duraction}")
50
- down_music(path, result)
51
-
52
-
53
- result = EnteredTrack('green day', 10)
54
-
55
- print(f'\n\n{Fore.GREEN+Style.BRIGHT}2 запрос {result.music_name}\n\n{Style.RESET_ALL}')
56
- for _ in range(result.count_tracks):
57
- print(f"{result.get_author} - {result.get_title} {result.get_duraction}")
58
- down_music(path, result)
@@ -1,94 +0,0 @@
1
- '''Рейтинговые треки'''
2
- import fake_useragent, requests
3
- from bs4 import BeautifulSoup
4
-
5
- class RatingCount:
6
- '''
7
- Функция для получения списка рейтинговых треков с сайта rur.hitmotop.com.
8
- param: count - число от 1 до 48, кол-во треков
9
- \nДля получения информации доступны след.функции:
10
- - get_author: list, автор трека;
11
- - get_title: list, название трека;
12
- - get_url_down: list, ссылка на скачивание трека;
13
- - direct_download_link: list прямая ссылка на скачивание трека;
14
- - get_duraction: list, длительность трека;
15
- - get_picture_url: list, ссылка на обложку трека;
16
- - get_url_track: list, ссылка на трек.
17
-
18
- '''
19
-
20
- def __init__(self, count_tracks, get_redirect_url=False):
21
- self.count_tracks = count_tracks
22
- self.get_redirect_url = get_redirect_url
23
- self.count_selection
24
-
25
- @property
26
- def count_selection(self):
27
-
28
- if self.count_tracks >48:
29
- raise ValueError('Only <= 48')
30
- else:
31
-
32
- __user = fake_useragent.UserAgent().random
33
- __headers = {'user-agent': __user}
34
- __url11= requests.get('https://hitmos.me/', headers=__headers, allow_redirects=True).url
35
- __url1= __url11[:-1] if '/' in __url11[-1] else __url11
36
-
37
- url = f"{__url1}{'/' if '/' in __url1[:-1] else ''}songs/top-rated"
38
-
39
- response = requests.get(url, headers=__headers)
40
- _soup = BeautifulSoup(response.text, 'html.parser')
41
-
42
- _track_titles = [i.text.strip() for i in _soup.find_all("div", class_="track__title")]
43
- _track_artists = [i.text.strip() for i in _soup.find_all("div", class_="track__desc")]
44
- _track_duration = [i.text.strip() for i in _soup.find_all("div", class_="track__fulltime")]
45
- _track_pictures = [f"{i.get('style')[23:-3]}" for i in _soup.find_all("div", class_="track__img")]
46
- _track_urls_dow = [i.get('href') for i in _soup.find_all('a', class_='track__download-btn')]
47
- _track_url = [f"{__url1}{tra_url.get('href')}" for tra_url in _soup.find_all('a', class_='track__info-l')]
48
-
49
- _items = []
50
-
51
- for idx in range(min(len(_track_titles), self.count_tracks)):
52
- if self.get_redirect_url and len(_track_urls_dow[idx])>0:
53
- direct_download_link = requests.get(_track_urls_dow[idx],headers=__headers,allow_redirects=True).url
54
- else: direct_download_link = None
55
- item = {
56
- 'author': _track_artists[idx],
57
- 'title': _track_titles[idx].replace('/','').replace(':','').replace('*','').replace('?','').replace('"','').replace('<','').replace('>','').replace('|','').replace('\\',''),
58
- 'url_down': _track_urls_dow[idx],
59
- 'direct_download_link': direct_download_link,
60
- 'duration_track': _track_duration[idx],
61
- 'picture_url': _track_pictures[idx],
62
- 'url_track': _track_url[idx]
63
- }
64
- _items.append(item)
65
-
66
- self.data = {"items": _items}
67
- return self.data
68
- @property
69
- def get_author(self):
70
- return [item['author'] for item in self.data['items']]
71
-
72
- @property
73
- def get_title(self):
74
- return [item['title'] for item in self.data['items']]
75
-
76
- @property
77
- def get_url_down(self):
78
- return [item['url_down'] for item in self.data['items']]
79
-
80
- @property
81
- def direct_download_link(self):
82
- return [item['direct_download_link'] for item in self.data['items']]
83
-
84
- @property
85
- def get_duraction(self):
86
- return [item['duration_track'] for item in self.data['items']]
87
-
88
- @property
89
- def get_picture_url(self):
90
- return [item['picture_url'] for item in self.data['items']]
91
-
92
- @property
93
- def get_url_track(self):
94
- return [item['url_track'] for item in self.data['items']]
@@ -1,143 +0,0 @@
1
- '''Рейтинговые треки'''
2
- import fake_useragent, requests
3
- from bs4 import BeautifulSoup
4
- from .excepts import PageError
5
-
6
- class RatingPage:
7
- '''
8
- Функция для получения списка рейтинговых треков с сайта rur.hitmotop.com.
9
- :param page_count: число от 1 до 11 (номер страницы с треками)
10
- \nДля получения информации доступны след.функции:
11
- - get_author: list, автор трека;
12
- - get_title: list, название трека;
13
- - get_url_down: list, ссылка на скачивание трека;
14
- - direct_download_link: list прямая ссылка на скачивание трека;
15
- - get_duraction: list, длительность трека;
16
- - get_picture_url: list, ссылка на обложку трека;
17
- - get_url_track: list, ссылка на трек.
18
- '''
19
- def __init__(self, page_count:int, get_redirect_url=False):
20
- self.page_count = page_count
21
- self.get_redirect_url = get_redirect_url
22
- self.page_selection
23
-
24
- @property
25
- def page_selection(self):
26
-
27
- if self.page_count >11:
28
- raise PageError
29
- else:
30
-
31
- __user = fake_useragent.UserAgent().random
32
- __headers = {'user-agent': __user}
33
- __url11= requests.get('https://hitmos.me/', headers=__headers, allow_redirects=True).url
34
- __url1 = __url11[:-1] if '/' in __url11[-1] else __url11
35
-
36
- if self.page_count == 1:
37
- __list = []
38
- url = f"{__url1}{'/' if '/' in __url1[:-1] else ''}songs/top-rated"
39
- response = requests.get(url, headers=__headers)
40
- _soup = BeautifulSoup(response.text, 'html.parser')
41
-
42
- _track_titles = [i.text.strip() for i in _soup.find_all("div", class_="track__title")]
43
- _track_artists = [i.text.strip() for i in _soup.find_all("div", class_="track__desc")]
44
- _track_duration = [i.text.strip() for i in _soup.find_all("div", class_="track__fulltime")]
45
- _track_pictures = [f"{i.get('style')[23:-3]}" for i in _soup.find_all("div", class_="track__img")]
46
- _track_urls_dow = [i.get('href') for i in _soup.find_all('a', class_='track__download-btn')]
47
- _track_url = [f"{__url1}{tra_url.get('href')}" for tra_url in _soup.find_all('a', class_='track__info-l')]
48
-
49
- for idx in range(min(len(_track_titles), 48)):
50
- if self.get_redirect_url and len(_track_urls_dow[idx])>0:
51
- direct_download_link = requests.get(_track_urls_dow[idx],headers=__headers,allow_redirects=True).url
52
- else: direct_download_link = None
53
-
54
- items={
55
- 'author': _track_artists[idx],
56
- 'title': _track_titles[idx].replace('/','').replace(':','').replace('*','').replace('?','').replace('"','').replace('<','').replace('>','').replace('|','').replace('\\',''),
57
- 'url_down': _track_urls_dow[idx],
58
- 'direct_download_link': direct_download_link,
59
- 'url_track': _track_url[idx],
60
- 'duration_track': _track_duration[idx],
61
- 'picture_url': _track_pictures[idx]
62
- }
63
- __list.append(items)
64
-
65
- self.count_tracks = len(__list)
66
- self.data = {'items': __list}
67
- return self.data
68
-
69
-
70
- else:
71
- self.page_count *= 48
72
-
73
- __list = []
74
-
75
- url = f"{__url1}{'/' if '/' in __url1[:-1] else ''}songs/top-rated/start/"
76
-
77
- items = []
78
- for page in range(0, self.page_count, 48):
79
-
80
- response = requests.get(f'{url}{page}', headers=__headers)
81
- soup = BeautifulSoup(response.text, 'lxml')
82
-
83
-
84
- track_titles = [i.text.strip() for i in soup.find_all("div", class_="track__title")]
85
- track_artists = [i.text.strip() for i in soup.find_all("div", class_="track__desc")]
86
- track_duration = [i.text.strip() for i in soup.find_all("div", class_="track__fulltime")]
87
- track_pictures = [f"{__url1}{i.get('style')[23:-3]}" for i in soup.find_all("div", class_="track__img")]
88
- track_urls_dow = [f"{track_dow_url.get('href')}" for track_dow_url in soup.find_all('a', class_='track__download-btn')]
89
- track_url = [f"{__url1}{tra_url.get('href')}" for tra_url in soup.find_all('a', class_='track__info-l')]
90
-
91
-
92
- for idx in range(min(len(track_titles), 48)):
93
- if self.get_redirect_url and len(_track_urls_dow[idx])>0:
94
- direct_download_link = requests.get(_track_urls_dow[idx],headers=__headers,allow_redirects=True).url
95
- else: direct_download_link=None
96
-
97
- items={
98
- 'author': track_artists[idx],
99
- 'title': track_titles[idx],
100
- 'url_down': track_urls_dow[idx],
101
- 'direct_download_link': direct_download_link,
102
- 'url_track': track_url[idx],
103
- 'duration_track': track_duration[idx],
104
- 'picture_url': track_pictures[idx]
105
- }
106
- __list.append(items)
107
- self.count_tracks = len(__list)
108
- self.data = {'items': __list}
109
- return self.data
110
-
111
- @property
112
- def get_author(self):
113
- return [item['author'] for item in self.data['items']]
114
-
115
- @property
116
- def get_title(self):
117
- return [item['title'] for item in self.data['items']]
118
-
119
- @property
120
- def get_url_down(self):
121
- return [item['url_down'] for item in self.data['items']]
122
-
123
- @property
124
- def direct_download_link(self):
125
- return [item['direct_download_link'] for item in self.data['items']]
126
-
127
- @property
128
- def get_duraction(self):
129
- return [item['duration_track'] for item in self.data['items']]
130
-
131
- @property
132
- def get_picture_url(self):
133
- return [item['picture_url'] for item in self.data['items']]
134
-
135
- @property
136
- def get_url_track(self):
137
- return [item['url_track'] for item in self.data['items']]
138
-
139
- @property
140
- def get_all(self): return self.data
141
-
142
-
143
-
@@ -1,64 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: pars-hitmotop
3
- Version: 0.0.8
4
- Home-page: https://github.com/PY079/pars_hitmotop
5
- Download-URL: https://github.com/PY079/pars_hitmotop/arhive/v0.0.8.zip
6
- Author: Joy_079
7
- Author-email: Prufu@yandex.ru
8
- Classifier: Programming Language :: Python
9
- Classifier: Programming Language :: Python :: 3.7
10
- Classifier: Programming Language :: Python :: 3.8
11
- Classifier: Programming Language :: Python :: 3.9
12
- Classifier: Programming Language :: Python :: Implementation :: PyPy
13
- Description-Content-Type: text/markdown
14
-
15
- # Оглавление
16
- 0. [Оглавление](https://github.com/PY079/pars_hitmotop#оглавление)
17
- 1. [Что именно парсит?](https://github.com/PY079/pars_hitmotop/blob/main/README.md#что-именно-парсит)
18
- 2. [Как использовать модуль entered_tracks](https://github.com/PY079/pars_hitmotop/blob/main/README.md#как-использовать-модуль-entered_tracks)
19
- 3. [Как использовать модуль rating_tracks_count](https://github.com/PY079/pars_hitmotop/blob/main/README.md#как-использовать-модуль-rating_tracks_count)
20
- 4. [Как использовать модуль rating_tracks_page](https://github.com/PY079/pars_hitmotop/blob/main/README.md#как-использовать-модуль-rating_tracks_page)
21
- 5. [Что можно достать при запросе?](https://github.com/PY079/pars_hitmotop/blob/main/README.md#что-можно-достать-при-запросе)
22
- ____
23
- Этот проект парсит [музыкальный сайт](https://rur.hitmotop.com/)
24
- ____
25
- # Что именно парсит?
26
- 1. [Рейтинговые треки](https://rur.hitmotop.com/songs/top-rated) от 1 до 48;
27
- 2. Тоже [рейтиновые треки](https://rur.hitmotop.com/songs/top-rated) но можно выбрать количество страниц, с которых будет произведен парсинг;
28
- 3. Треки введеные пользователем. Парсит от 1 трека до конечной страницы (на одной старнице 48 треков)
29
- ____
30
- ## Как использовать модуль *entered_tracks*
31
- ```
32
- from pars_hitmotop.entered_tracks import EnteredTrack
33
- result=EnteredTrack('linkin park',10)
34
- ```
35
- 1 аргументом (musci_name) передается название пенси или автора. 2 Аргументом (count) передается количество треков
36
- ____
37
- ## Как использовать модуль *rating_tracks_count*
38
- ```
39
- from pars_hitmotop.rating_tracks_count import RatingCount
40
- result=RatingCount(10)
41
- ```
42
- 1 аргументом (count) передается количество песен
43
- ____
44
- ## Как использовать модуль *rating_tracks_page*
45
- ```
46
- from pars_hitmotop.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_duraction|Получить продолжительность трека|
60
- |result.get_picture_url|Получить ссылку на обложку трека|
61
- |result.get_url_track|Получить ссылку трек|
62
- |result.get_all|Получить все данные в виде словаря|
63
-
64
- ____
@@ -1,14 +0,0 @@
1
- README.md
2
- setup.cfg
3
- setup.py
4
- pars_hitmotop/__init__.py
5
- pars_hitmotop/entered_tracks.py
6
- pars_hitmotop/excepts.py
7
- pars_hitmotop/how_to_use.py
8
- pars_hitmotop/rating_tracks_count.py
9
- pars_hitmotop/rating_tracks_page.py
10
- pars_hitmotop.egg-info/PKG-INFO
11
- pars_hitmotop.egg-info/SOURCES.txt
12
- pars_hitmotop.egg-info/dependency_links.txt
13
- pars_hitmotop.egg-info/requires.txt
14
- pars_hitmotop.egg-info/top_level.txt
@@ -1,5 +0,0 @@
1
- bs4
2
- colorama
3
- fake-useragent
4
- requests
5
- lxml
@@ -1 +0,0 @@
1
- pars_hitmotop
@@ -1,27 +0,0 @@
1
- from setuptools import setup
2
-
3
- version='0.0.8'
4
- with open('README.md', encoding='utf-8') as f:
5
- long_description=f.read()
6
-
7
- setup(
8
- name='pars_hitmotop',
9
- version=version,
10
-
11
- author='Joy_079',
12
- author_email='Prufu@yandex.ru',
13
- long_description=long_description,
14
- long_description_content_type='text/markdown',
15
- url='https://github.com/PY079/pars_hitmotop',
16
- download_url=f'https://github.com/PY079/pars_hitmotop/arhive/v{version}.zip',
17
- install_requires=['bs4','colorama','fake-useragent','requests','lxml'],
18
- # license=...,
19
- packages=['pars_hitmotop'],
20
- classifiers=[
21
- 'Programming Language :: Python',
22
- 'Programming Language :: Python :: 3.7',
23
- 'Programming Language :: Python :: 3.8',
24
- 'Programming Language :: Python :: 3.9',
25
- 'Programming Language :: Python :: Implementation :: PyPy'
26
- ]
27
- )