Пользователь
0,0
рейтинг
15 июня 2013 в 12:57

Разработка → Сортировка треков в плейлисте VK



Disclaimer: я начал писать этот скрипт, когда весёлые новости ещё не подоспели.

Буду краток.
  • Что оно делает?
    • Переупорядочивает треки в вашем плейлисте в VK так, чтобы с минимальным вмешательством он стал выглядеть аккуратнее.
  • Где взять?
  • Как пользоваться?
    • Понадобится Python 2.7.x. Качаете, устанавливаете. Берёте файл vk_music_organizer.py из архива, открываете в блокноте, в самом начале пишете в строках email = '...' и password = '...' свой логин и пароль соответственно. Сохраняете. Если у вас корректно установлен Python, то после этого достаточно просто запустить этот файл двойным щелчком.


  • Как оно работает?
    • Алгоритм сортировки такой:
      1. Разбить все треки по альбомам, если таковые у пользователя есть, все треки без указанного альбома скинуть в один безымянный альбом. Все альбомы отсортировать по алфавиту, безымянный поставить первым.
      2. Пройтись по всем трекам внутри каждого альбома и цепочки идущих подряд треков с одним исполнителем объеденить в кластеры.
      3. Внутри каждого альбома, для всех встреченных исполнителей найти самый большой кластер с ними. Из одинаковых по размеру выбрать первый в списке.
      4. Все треки, не лежащие в самом большом кластере своего исполнителя, перетащить в этот кластер.
      5. Объеденить подряд все кластеры внутри каждого альбома. Объединить все альбомы.

      Помимо сортировки там ничего особо содержательного нет. Я использую авторизатор и код вызова API из этой статьи. Не считая сортировки, работа программы ограничивается одним запросом к audio.get, одним к audio.getAlbums и кучей к audio.reorder. Бесплатный бонус: все треки, попавшие под суровую длань копирайта, отправляются в подвал.

Скрипт предоставляется как есть, со всеми багами и недостатками. Используйте на свой страх и риск. Enjoy!
@Pastafarianist
карма
95,0
рейтинг 0,0
Пользователь
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (25)

  • +22
    Скоро будет нечего сортировать, копирасты всё поудаляют из вк )
    • 0
      Вспомним про флэшки- будем на флэшках обмениваться. Потом запретят флэшки- вспомним про болванки. Запретят болванки- вспомним про кассеты и винил.
      • +4
        А вам не приходило в голову, что такой образ мышления априори предполагает, что абсолютно ничего нельзя сделать против самих запрещений?
        • +3
          Против самих запрещений ничего нельзя сделать хотя бы потому, что данная власть вроде как легитимна, но ей при этом абсолютно наплевать на интересы выбравших ее граждан.
          И следующие выборы ничего нового не принесут.
          А всякие предложения вроде революций есть провокация, запрещенная законодательством РФ.
      • +1
        Запретят кассеты и винил — bar-blues станет мейнстримом
        • +1
          Тогда будут рейды маски-шоу с представителем РАО по этим заведениям, где исполняют каверы.
          Разницы-то? Надо менять принципы системы, а не методы ухода от глупых законов.
      • НЛО прилетело и опубликовало эту надпись здесь
    • –1
      Вчера культовый трек 2Pac – Changes удалили (
  • –8
    открываете в блокноте, в самом начале пишете в строках email = '...' и password = '...'

    Учитывая, что эти методы доступны flash и iframe приложениям, не вижу никакого смысла использовать Ваше решение, где мне еще придется свои данные для аутентификации оставлять.
    • +17
      У моего приложения есть преимущество: оно уже написано. Если боитесь, что оно сольёт куда-то Ваши данные, прочитайте код. Кроме того, никто не заставляет Вас им пользоваться.
      • –3
        Интересно, за что меня минусуют. Ведь stanalone приложениям доступна авторизация как и всем сторонним приложениям, просто с запросом разрешений в браузере. Не вижу никакого смысла оставлять приложению свои данные. Не каждый будет лезть в исходный код. Учитесь уважать пользователей.

        P.S. Все больше убеждаюсь, что хабрасообщество — стадо. То в одном посте осуждают нубов, оставляющих свои данные где непопадя, то минусуют меня за обратное.
        • +1
          не вижу никакого смысла использовать Ваше решение

          Не видите смысла — не используйте, в чём проблема? Напишите своё, если Вам нужно. Лично мне будет интересно почитать про разработку приложений на Flash с нуля, поскольку я в этой теме не разбираюсь.

          Не каждый будет лезть в исходный код.

          А не нужно каждому. Достаточно одного человека, который заметит бэкдор и ткнёт пальцем в строку на гитхабе.

          Учитесь уважать пользователей.

          Вы так говорите, как будто я лично Вам что-то должен.
          • 0
            не вижу никакого смысла использовать Ваше решение

            Где Вы такую фразу увидели?

            Лично мне будет интересно почитать про разработку приложений на Flash с нуля

            Я вверху писал, что есть еще iframe приложения. Javascript API.

            Учитесь уважать пользователей.

            Не вырывайте фразы без контекста. Вы все больше меня разочаровываете. Обратите пожалуйста внимание на фразу: «Ведь stanalone приложениям доступна авторизация как и всем сторонним приложениям, просто с запросом разрешений в браузере.»
            • +1
              Где Вы такую фразу увидели?

              В корне этой ветки.

              Я вверху писал, что есть еще iframe приложения. Javascript API.

              И про это тоже будет интересно почитать.

              Не вырывайте фразы без контекста. Вы все больше меня разочаровываете. Обратите пожалуйста внимание на фразу: «Ведь stanalone приложениям доступна авторизация как и всем сторонним приложениям, просто с запросом разрешений в браузере.»

              Пожалуйста, процитирую Вас целиком. Во-первых, повторюсь в третий раз, не нравится — не пользуйтесь. Во-вторых, если знаете, как сделать на питоне авторизацию через браузер, милости прошу в кнопку fork. В третьих, и тут я позволю себе процитировать Вас лишь частично:
              Вы все больше меня разочаровываете.
              Держите меня в курсе.
  • +2
    тююю, я то думал «альбомы» в музыкальном смысле этого слова, а тут… ничего интересного вобщем, простите уж
    • +1
      тоже разочаровался(
    • 0
      Ну, знаете. Можно, конечно, попробовать добавить запросы к MusicBrainz, но могут полезть очень неприятные и труднопоправимые ошибки из-за неверного сопоставления. Я изначально ставил цель добиться порядка минимальными изменениями. Подобные же операции — вещь намного более радикальная.
  • 0
    Попытался затестить. Запустил, попросилось в интернет, вконтакте пишет, что приложение зашло, но за 20 минут ничего не изменилось и ничего не написало. Насколько долго нужно ждать и как определить, что оно вообще работает? :)
    • 0
      Время работы зависит от количества треков. На моих ~250 скрипт отрабатывает за 3 минуты.
      Большая часть времени — это запросы к API на переупорядочивание. Мне было лень писать аккуратную реализацию с запросами только по необходимости, поэтому 1 трек = 1 запрос. У VK стоит ограничение на 3 запроса в секунду. Плюс не слишком точная задержка у меня.
      Если хотите смотреть, что оно там отправляет, можете вставить в метод reorder_audio в файле vk_music_organizer.py какую-нибудь отладочную печать, как-то так:
      reorder_audio
      	def reorder_audio(self, audio_id, owner_id=None, before=None, after=None):
      		if not before and not after:
      			raise ValueError('Neither before nor after were specified')
      
      		self.ensure_login()
      
      		params = {'aid': audio_id, 'oid': (self.user_id if owner_id is None else owner_id)}
      		if before:
      			params['before'] = before
      		if after:
      			params['after'] = after
      
      		print params  # this is the debug output
      
      		result = vk_api.call_api('audio.reorder', params, self.token)
      		if result != 1:
      			raise RuntimeError('API did not return success code')
      
      • 0
        Сейчас, после некоторого времени, консоль просто вылетела, и никаких изменений. Грустно.
        У меня 707 аудиозаписей, но не думаю, что дело в них. :)
        Сейчас попробую с отладочной печатью, может так яснее станет, в чём дело.
        • 0
          Можете ещё переключить debug_mode = True в самом начале. Тогда скрипт будет сохранять в отдельные файлы списки треков, альбомов и результаты сортировки. По крайней мере, можно будет посмотреть, отсортировалось оно там или нет.
          • 0
            Включил, оно опять так же отработало, но result и audios абсолютно идентичными остались.
            • 0
              Предлагаю перевести дискуссию в ЛС, она может затянуться.
  • 0
    Python 2.7.x установлен верно. Падает с ошибкой.
    E:\vk-music-organizer-master>vk_music_organizer.py Traceback (most recent call last): File "E:\vk-music-organizer-master\vk_music_organizer.py", line 218, in <module> main(email=email, password=password) File "E:\vk-music-organizer-master\vk_music_organizer.py", line 200, in main audios = vk.get_audios() File "E:\vk-music-organizer-master\vk_music_organizer.py", line 52, in get_audios self.ensure_login() File "E:\vk-music-organizer-master\vk_music_organizer.py", line 46, in ensure_login self.email, self.password, client_id=self.client_id, scope=self.scope) File "E:\vk-music-organizer-master\vk_auth.py", line 108, in auth doc, url = auth_user(email, password, client_id, scope, opener) File "E:\vk-music-organizer-master\vk_auth.py", line 71, in auth_user raise RuntimeError('Some essential data is missing in the form.') RuntimeError: Some essential data is missing in the form. E:\vk-music-organizer-master>
    • 0
      Да, я принял кривой pull request. Уже исправил, перекачайте.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.