1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.

Прокомментируйте код. Экспорт списка плейлистов Яндекс.Музыки

Тема в разделе "python", создана пользователем searchengines, 21 май 2019.


Поделиться в соц сетях

  1. searchengines

    searchengines Administrator

    Регистрация:
    5 янв 2019
    Сообщения:
    1.653
    Симпатии:
    2
    Баллы:
    38
    Оцените читабельность, понятность и саму реализацию с точки зрения python.

    main.py

    """
    Отображает список личных (или избранных) плейлитов по логину Яндекс.Музыки
    """

    import values.strings_ru as strings # Модуль с текстами на русском
    import values.consts as const # Константы и сборщики ссылок
    import modules.http_requests as request # Отправка запроса, получение результата
    import modules.ym_list_creator as creator # Создатель листов по полученным JSON


    def main():
    """Основная функция"""
    print(strings.readme) # Вывод сообщения-приветствия
    owner = input(strings.input_login) # Получить логин
    url = const.get_url_library(owner) # Получить ссылку-запрос с логином
    json_data = request.get_json(url) # Отправить запрос, получить результат
    if json_data is None: # Если ошибка, завершить
    print("JSON data is None") # Текст поясняющий ошибку
    return # Выход из main()

    count = creator.get_count_library(json_data, 'playlists') # Узнать количество плейлистов
    if count == 0: # Если 0, скорее всего профиль пользователя закрыт
    print(strings.private_user) # Сказать об этом
    return # Выйти из main()

    list_library = creator.get_list_library(json_data, 'playlists') # Создать список личных плейлистов
    #list_library = creator.get_list_library(json_data, 'bookmarks') # Создать список ИЗБРАННЫХ плейлистов
    print(strings.titles_playlists) # Описание следующей команды
    print("-" * 21) # Разделитель
    creator.print_titles(list_library) # Напечатать названия плейлистов и кол-во треков в них
    print("-" * 21) # Разделитель
    print(strings.your_have, count) # Вывести счетчик, общее число плейлистов


    # Точка входа
    if __name__ == "__main__": # Если запускают не через import
    main() # Перейти в основную функцию


    http_requests.py

    from requests import get # Импорт get() из requests


    def get_json(request_url):
    """
    Отправляет запрос request_url
    Если статус ответа 200, вернет текст ответа
    Если статус ответа не 200, вернет None
    """
    document = get(request_url) # Отправить запрос, получить ответ
    if document.status_code != 200: # Если статус ответа не 200
    print("Error!\n\twhere: http_requests.get_json()",
    f"\n\twhat: status code is {document.status_code}") # Сказать об ошибке и ее номере
    document = None # Обнулить ответ
    else:
    document = document.json() # Иначе преобразовать ответ в JSON
    return document


    consts.py

    # Ссылки для запросов
    url = "https://music.yandex.ru/handlers/"
    url_library = url + "library.jsx"
    url_playlist = url + "playlist.jsx"


    def get_url_library(owner):
    """
    Принимает логин
    Возвращает ссылку с параметрами для запроса
    (получить список плейлистов по логину)
    """
    return f"{url_library}?owner={owner}&filter=playlists"


    def get_url_playlist(owner, kind):
    """
    Принимает логин и id плейлиста
    Возвращает ссылку с параметрами для запроса
    (получить список плейлистов по логину и номеру плейлиста)
    """
    return f"{url_playlist}?owner={owner}&kinds={kind}&light=false"


    ym_list_creator.py

    def get_list_library(data, group):
    """
    Получить список плейлистов в библиотеке
    в виде листа, каждый элемент которого словарь

    group - какую группу плейлистов:
    playlists личные
    bookmarks избранные (лайки на плейлист)
    """
    list_library = list() # Создать пустой лист
    for playlist in data[group]: # Перебирать каждый плейлист
    item = {'title': playlist['title'], # Создать словарь с именем, номером и числом треков
    'kind': playlist['kind'],
    'count': playlist['trackCount']}
    list_library.append(item) # Добавить его к листу
    return list_library


    def get_count_library(data, group):
    """
    Узнать количетсов плейлистов в библиотеке

    group - какую группу плейлистов:
    playlists личные
    bookmarks избранные (лайки на плейлист)
    """
    return len(data[group])


    def print_titles(data):
    """Вывести названия плейлистов"""
    i = 1
    for playlist in data: # Перебор плейлистов
    print("{:3}".format(i), # Форматирование порядкого номера (три места на число)
    playlist['title'], # Название плейлиста
    f"({playlist['count']})") # Кол-во треков в нем
    i += 1
     

Поделиться этой страницей