Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Сбор новых релизов #155

Closed
3 tasks done
Chimildic opened this issue Dec 19, 2021 · 5 comments
Closed
3 tasks done

Сбор новых релизов #155

Chimildic opened this issue Dec 19, 2021 · 5 comments
Labels
фича добавить в основной функционал

Comments

@Chimildic
Copy link
Owner

Chimildic commented Dec 19, 2021

Описание

Создать публичную функцию по сбору новых релизов через расширенный поиск Spotify

Цель

  • Позволить собрать новые релизы при излишне большом количестве исполнителей (при малом периоде времени)
  • Уменьшить время выполнения по сравнению с аналогичным решением прямого перебора

Ограничение

  • Не использовать перебор всех доступных альбомов исполнителя

Вопрос

  • Расширенный поиск Spotify умеет искать по полной дате? (Нет)
@Chimildic Chimildic added the фича добавить в основной функционал label Dec 19, 2021
@Chimildic
Copy link
Owner Author

Chimildic commented Dec 21, 2021

При 79 отслеживаемых исполнителей, способ сбора релизов через расширенный поиск эффективнее прямого перебора на 90% по времени и 92% по запросам.

Прямой перебор Расширенный поиск
Период, дней 7 / 365 7 / 365
Время выполнения, секунд 300 15 (-95%) / 46 (-85%)
Количество запросов 3633 84 (-98%) / 520 (-86%)

Значения по одному прогону. На практике, время может варьироваться в обе стороны, но не значительно в сравнении с полученной разницей.

@Chimildic
Copy link
Owner Author

Сбор альбомов и синглов по 1245 исполнителям

Расширенный поиск
Период, дней 7 30 100 182/365
Время сбора, секунд 184,5 216,6 343 Х
Количество запросов 1338 1738 3199 Х
Треков в плейлисте 226 1221 3600+ Х

Тест по 365 и 182 дням не завершился из-за лимита времени выполнения Apps Script (360 секунд). Тест по 100 дням успел собрать релизы, но прервался при выводе в плейлист на отметке 3600 треков.

Значения будут варьироваться в зависимости от количества релизов и времени запуска. При большом количестве исполнителей, функция пригодна на сбор релизов в коротком периоде времени.

С другой стороны, такое количество исполнителей по своему бесполезно. Многое будет пропускаться, другое даже не прослушается. Поэтому актуально формировать список исполнителей, релизы которых действительно интересны.

@Chimildic
Copy link
Owner Author

Добавлено с версией 1.6.3: getReleasesByArtists

@Chimildic
Copy link
Owner Author

Есть проблема с исполнителями из частотных слов. Например, Red. Вся поисковая выдача по альбомам не имеет отношения к релизу от Red.

Возможные решения:

  • Добавить прямой перебор при пустом результате поиска
  • Переключиться на парсинг страницы исполнителя с EveryNoise

@Chimildic
Copy link
Owner Author

EveryNoise может дать профиль исполнителя, где на одной странице есть все релизы и даже их треки. Но если полностью перейти на такой источник, существенно возрастает время выполнения. По причине большего веса страниц, которые приходится ждать по несколько секунд. Даже при параллельном запросе fetchAll время возрастает минимум в два раза по сравнению с ранее реализованным алгоритмом.

Новый вариант является гибридом двух алгоритмов. Если поиск альбомов через API не даст результатов, будет запрос к EveryNoise.

При 79 отслеживаемых исполнителей, гибридный алгоритм практически не изменил показатели первого теста. Выставлялся тот же абсолютный период.

Расширенный поиск Гибрид
Период, дней 7 / 365 7 / 365
Время выполнения, секунд 15 / 46 18.8 / 52.5
Запросов к EveryNoise - 12 / 10
Общее количество запросов 84 / 520 96 / 528

Незначительный прирост позволяет решить проблему с релизами исполнителей вроде Red.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
фича добавить в основной функционал
Projects
None yet
Development

No branches or pull requests

1 participant