Добавлен раздел "Примеры" в документацию
このコミットが含まれているのは:
コミット
d55a953462
|
@ -0,0 +1,40 @@
|
|||
# Получение чарта
|
||||
|
||||
Пример работы с чартом ЯМ. Получение треков, отображение позиций и их изменения с использованием эмодзи.
|
||||
|
||||
```python
|
||||
import os
|
||||
|
||||
from yandex_music import Client
|
||||
|
||||
|
||||
CHART_ID = 'world'
|
||||
TOKEN = os.environ.get('TOKEN')
|
||||
|
||||
client = Client(TOKEN).init()
|
||||
chart = client.chart(CHART_ID).chart
|
||||
|
||||
text = [f'🏆 {chart.title}', chart.description, '', 'Треки:']
|
||||
|
||||
for track_short in chart.tracks:
|
||||
track, chart = track_short.track, track_short.chart
|
||||
artists = ''
|
||||
if track.artists:
|
||||
artists = ' - ' + ', '.join(artist.name for artist in track.artists)
|
||||
|
||||
track_text = f'{track.title}{artists}'
|
||||
|
||||
if chart.progress == 'down':
|
||||
track_text = '🔻 ' + track_text
|
||||
elif chart.progress == 'up':
|
||||
track_text = '🔺 ' + track_text
|
||||
elif chart.progress == 'new':
|
||||
track_text = '🆕 ' + track_text
|
||||
elif chart.position == 1:
|
||||
track_text = '👑 ' + track_text
|
||||
|
||||
track_text = f'{chart.position} {track_text}'
|
||||
text.append(track_text)
|
||||
|
||||
print('\n'.join(text))
|
||||
```
|
|
@ -0,0 +1,43 @@
|
|||
# Обновление стрика дейлика
|
||||
|
||||
Отмечает "Плейлист дня" как прослушанный сегодня (добавляет +1 к счетчику).
|
||||
|
||||
```python
|
||||
import sys
|
||||
import datetime
|
||||
from yandex_music.client import Client
|
||||
|
||||
# Help text
|
||||
if len(sys.argv) == 1 or len(sys.argv) > 3:
|
||||
print('Usage: DailyPlaylistUpdater.py token')
|
||||
print('token - Authentication token')
|
||||
quit()
|
||||
# Authorization
|
||||
elif len(sys.argv) == 2:
|
||||
client = Client(sys.argv[1]).init()
|
||||
|
||||
# Current daily playlist
|
||||
PersonalPlaylistBlocks = client.landing(blocks=['personalplaylists']).blocks[0]
|
||||
DailyPlaylist = next(
|
||||
x.data.data for x in PersonalPlaylistBlocks.entities if x.data.data.generated_playlist_type == 'playlistOfTheDay'
|
||||
)
|
||||
|
||||
# Check if we don't need to update it
|
||||
if DailyPlaylist.play_counter.updated:
|
||||
modifiedDate = datetime.datetime.strptime(DailyPlaylist.modified, "%Y-%m-%dT%H:%M:%S%z").date()
|
||||
if datetime.datetime.now().date() == modifiedDate:
|
||||
print('\x1b[6;30;43m' + 'Looks like it has been already updated today' + '\x1b[0m')
|
||||
quit()
|
||||
|
||||
# Updated playlist
|
||||
updatedPlaylist = client.users_playlists(user_id=DailyPlaylist.uid, kind=DailyPlaylist.kind)[0]
|
||||
|
||||
if updatedPlaylist.play_counter.updated and not DailyPlaylist.play_counter.updated:
|
||||
print('\x1b[6;30;42m' + 'Success!' + '\x1b[0m')
|
||||
else:
|
||||
print('\x1b[6;30;41m' + 'Something has gone wrong and nothing updated' + '\x1b[0m')
|
||||
|
||||
# Debug information
|
||||
print('Before:\n modified: %s\n PlayCounter: %s' % (DailyPlaylist.modified, DailyPlaylist.play_counter))
|
||||
print('After:\n modified: %s\n PlayCounter: %s' % (updatedPlaylist.modified, updatedPlaylist.play_counter))
|
||||
```
|
|
@ -0,0 +1,44 @@
|
|||
# Получение альбома с треками
|
||||
|
||||
Пример получения информации об альбоме. Пример отображения треков вместе с исполнителями и названием.
|
||||
|
||||
```python
|
||||
import os
|
||||
|
||||
from yandex_music import Client
|
||||
|
||||
# без авторизации недоступен список треков альбома
|
||||
TOKEN = os.environ.get('TOKEN')
|
||||
ALBUM_ID = 2832563
|
||||
|
||||
client = Client(TOKEN).init()
|
||||
|
||||
album = client.albums_with_tracks(ALBUM_ID)
|
||||
tracks = []
|
||||
for i, volume in enumerate(album.volumes):
|
||||
if len(album.volumes) > 1:
|
||||
tracks.append(f'💿 Диск {i + 1}')
|
||||
tracks += volume
|
||||
|
||||
text = 'АЛЬБОМ\n\n'
|
||||
text += f'{album.title}\n'
|
||||
text += f"Исполнитель: {', '.join([artist.name for artist in album.artists])}\n"
|
||||
text += f'{album.year} · {album.genre}\n'
|
||||
|
||||
cover = album.cover_uri
|
||||
if cover:
|
||||
text += f'Обложка: {cover.replace("%%", "400x400")}\n\n'
|
||||
|
||||
text += 'Список треков:'
|
||||
|
||||
print(text)
|
||||
|
||||
for track in tracks:
|
||||
if isinstance(track, str):
|
||||
print(track)
|
||||
else:
|
||||
artists = ''
|
||||
if track.artists:
|
||||
artists = ' - ' + ', '.join(artist.name for artist in track.artists)
|
||||
print(track.title + artists)
|
||||
```
|
|
@ -0,0 +1,32 @@
|
|||
# Лайки и дизлайки сущностей
|
||||
|
||||
Пример установки отметок "Мне нравится" и "Мне не нравится" на альбомы, треки, плейлисты и исполнителей.
|
||||
|
||||
```python
|
||||
import os
|
||||
|
||||
from yandex_music import Client
|
||||
|
||||
|
||||
TOKEN = os.environ.get('TOKEN')
|
||||
ALBUM_ID = 2832563
|
||||
|
||||
client = Client(TOKEN).init()
|
||||
|
||||
success = client.users_likes_albums_add(ALBUM_ID)
|
||||
answer = 'Лайкнут' if success else 'Произошла ошибка'
|
||||
|
||||
print(answer)
|
||||
|
||||
success = client.users_likes_albums_remove(ALBUM_ID)
|
||||
answer = 'Дизлайкнут' if success else 'Произошла ошибка'
|
||||
|
||||
print(answer)
|
||||
|
||||
# Тоже самое и в другими сущностями (плейлист, трек, исполнитель)
|
||||
# client.users_likes_playlists_add(f'{user_id}:{playlist_id}')
|
||||
# client.users_likes_playlists_remove(f'{user_id}:{playlist_id}')
|
||||
# client.users_likes_tracks_add(track_id)
|
||||
# client.users_likes_tracks_remove(track_id)
|
||||
# и т.д. Читайте документацию.
|
||||
```
|
|
@ -0,0 +1,34 @@
|
|||
# Текст текущего играющего трека
|
||||
|
||||
Пример работы с очередями и получением текста. Выводит текущий проигрываемый трек и его текст.
|
||||
|
||||
```python
|
||||
import os
|
||||
|
||||
from yandex_music import Client
|
||||
from yandex_music.exceptions import NotFoundError
|
||||
|
||||
|
||||
TOKEN = os.environ.get('TOKEN')
|
||||
|
||||
client = Client(TOKEN).init()
|
||||
|
||||
queues = client.queues_list()
|
||||
# Последняя проигрываемая очередь всегда в начале списка
|
||||
last_queue = client.queue(queues[0].id)
|
||||
|
||||
last_track_id = last_queue.get_current_track()
|
||||
last_track = last_track_id.fetch_track()
|
||||
|
||||
artists = ', '.join(last_track.artists_name())
|
||||
title = last_track.title
|
||||
print(f'Сейчас играет: {artists} - {title}')
|
||||
|
||||
try:
|
||||
lyrics = last_track.get_lyrics('LRC')
|
||||
print(lyrics.fetch_lyrics())
|
||||
|
||||
print(f'\nИсточник: {lyrics.major.pretty_name}')
|
||||
except NotFoundError:
|
||||
print('Текст песни отсутствует')
|
||||
```
|
|
@ -0,0 +1,25 @@
|
|||
# Примеры
|
||||
|
||||
В этом разделе есть небольшие примеры, чтобы показать, как выглядят скрипты,
|
||||
написанные с помощью `yandex-music-api`.
|
||||
|
||||
Перед просмотром примеров обязательно прочитайте секцию "[Начало работы](https://github.com/MarshalX/yandex-music-api#%D0%B8%D0%B7%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BF%D0%BE-%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D0%B0%D0%BC)"
|
||||
в основном README файле. Там есть сниппеты, которые помогут разобраться.
|
||||
|
||||
Все примеры лицензированы в соответствии с
|
||||
[Лицензией CC0](https://github.com/MarshalX/yandex-music-api/blob/master/examples/LICENSE.txt)
|
||||
и поэтому полностью предназначены для общественного достояния.
|
||||
Вы можете использовать их в качестве базы для своих собственных скриптов,
|
||||
не беспокоясь об авторских правах.
|
||||
|
||||
```{toctree}
|
||||
examples.chart.md
|
||||
examples.daily_playlist_updater.md
|
||||
examples.get_album_with_tracks.md
|
||||
examples.like_and_dislike.md
|
||||
examples.lyrics_playing_track.md
|
||||
examples.proxy.md
|
||||
examples.search.md
|
||||
```
|
||||
|
||||
Больше примеров доступно в папке [examples](https://github.com/MarshalX/yandex-music-api/tree/main/examples)!
|
|
@ -0,0 +1,32 @@
|
|||
# Использование прокси
|
||||
|
||||
Пример использования прокси, когда у пользователя нет подписки
|
||||
(так как Яндекс.Музыка недоступна за пределами СНГ. Актуально для расположения
|
||||
скрипта на зарубежном сервере). При проблемах с авторизацией или токеном
|
||||
использование клиента без авторизации.
|
||||
|
||||
```python
|
||||
import os
|
||||
|
||||
from yandex_music import Client
|
||||
from yandex_music.exceptions import YandexMusicError
|
||||
from yandex_music.utils.request import Request
|
||||
|
||||
yandex_music_token = os.environ.get('YANDEX_MUSIC_TOKEN')
|
||||
proxied_request = Request(proxy_url=os.environ.get('PROXY_URL'))
|
||||
|
||||
try:
|
||||
if not yandex_music_token:
|
||||
raise YandexMusicError()
|
||||
|
||||
# подключаемся без прокси для получения информации об аккаунте (доступно из других стран)
|
||||
client = Client(yandex_music_token, request=Request()).init()
|
||||
# проверяем отсутствие подписки у пользователя
|
||||
if client.me and client.me.plus and not client.me.plus.has_plus:
|
||||
# если подписки нет - пересоздаем клиент с использованием прокси
|
||||
client = Client(yandex_music_token, request=proxied_request).init()
|
||||
except YandexMusicError:
|
||||
# если есть проблемы с авторизацией, токеном или чем-либо еще, то инициализируем клиент без авторизации
|
||||
# так как сервисом можно пользоваться будучи гостем, но со своими ограничениями
|
||||
client = Client(request=proxied_request)
|
||||
```
|
|
@ -0,0 +1,70 @@
|
|||
# Работа с поиском
|
||||
|
||||
Пример работы с поиском. Осуществление поисковых запросов, обработка лучшего результата и отображение статистики по найденным данным.
|
||||
|
||||
```python
|
||||
from yandex_music import Client
|
||||
|
||||
|
||||
client = Client().init()
|
||||
|
||||
type_to_name = {
|
||||
'track': 'трек',
|
||||
'artist': 'исполнитель',
|
||||
'album': 'альбом',
|
||||
'playlist': 'плейлист',
|
||||
'video': 'видео',
|
||||
'user': 'пользователь',
|
||||
'podcast': 'подкаст',
|
||||
'podcast_episode': 'эпизод подкаста',
|
||||
}
|
||||
|
||||
|
||||
def send_search_request_and_print_result(query):
|
||||
search_result = client.search(query)
|
||||
|
||||
text = [f'Результаты по запросу "{query}":', '']
|
||||
|
||||
best_result_text = ''
|
||||
if search_result.best:
|
||||
type_ = search_result.best.type
|
||||
best = search_result.best.result
|
||||
|
||||
text.append(f'❗️Лучший результат: {type_to_name.get(type_)}')
|
||||
|
||||
if type_ in ['track', 'podcast_episode']:
|
||||
artists = ''
|
||||
if best.artists:
|
||||
artists = ' - ' + ', '.join(artist.name for artist in best.artists)
|
||||
best_result_text = best.title + artists
|
||||
elif type_ == 'artist':
|
||||
best_result_text = best.name
|
||||
elif type_ in ['album', 'podcast']:
|
||||
best_result_text = best.title
|
||||
elif type_ == 'playlist':
|
||||
best_result_text = best.title
|
||||
elif type_ == 'video':
|
||||
best_result_text = f'{best.title} {best.text}'
|
||||
|
||||
text.append(f'Содержимое лучшего результата: {best_result_text}\n')
|
||||
|
||||
if search_result.artists:
|
||||
text.append(f'Исполнителей: {search_result.artists.total}')
|
||||
if search_result.albums:
|
||||
text.append(f'Альбомов: {search_result.albums.total}')
|
||||
if search_result.tracks:
|
||||
text.append(f'Треков: {search_result.tracks.total}')
|
||||
if search_result.playlists:
|
||||
text.append(f'Плейлистов: {search_result.playlists.total}')
|
||||
if search_result.videos:
|
||||
text.append(f'Видео: {search_result.videos.total}')
|
||||
|
||||
text.append('')
|
||||
print('\n'.join(text))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
while True:
|
||||
input_query = input('Введите поисковой запрос: ')
|
||||
send_search_request_and_print_result(input_query)
|
||||
```
|
|
@ -16,6 +16,7 @@
|
|||
token
|
||||
client
|
||||
client_async
|
||||
examples
|
||||
module
|
||||
changes
|
||||
contributing
|
||||
|
|
読み込み中…
新しいイシューから参照