Анализ времени прослушивания/добавления треков #192
Chimildic
started this conversation in
Личный опыт
Replies: 1 comment
-
Пример плейлиста, который будет обновляться 4 раза за день. Установите триггер на каждый час. Для корректной работы Clerk-модуля, обновите goofy до 1.8.2. function updateBestDayPeriod() {
const DURATION_PROGRESS = 0.9; // длительность прослушивания трека: 0.0 - 1.0
const PERIODS = [
{ period: 'night', from: 0, to: 5 },
{ period: 'morning', from: 6, to: 11 },
{ period: 'day', from: 12, to: 17 },
{ period: 'evening', from: 18, to: 23 },
];
let targetPeriod = '';
Clerk.runOnceAfter('00:00', function nightPls() { onSetDayPeriod() });
Clerk.runOnceAfter('06:00', function morningPls() { onSetDayPeriod() });
Clerk.runOnceAfter('12:00', function dayPls() { onSetDayPeriod() });
Clerk.runOnceAfter('18:00', function eveningPls() { onSetDayPeriod() });
if (targetPeriod.length == 0) {
return;
}
let savedTracks = Cache.read('SavedTracks.json');
let filteredSavedTracks = filter(savedTracks);
let filteredRecentTracks = filter(RecentTracks.get());
Filter.removeTracks(filteredRecentTracks, savedTracks);
let outputTracks = Combiner.mixinMulti({
source: [filteredRecentTracks, filteredSavedTracks],
inRow: [3, 1],
toLimitOn: true,
});
Playlist.saveWithReplace({
name: 'Лучшее время суток',
tracks: Selector.sliceFirst(outputTracks, 60),
});
function onSetDayPeriod() {
let nowHours = new Date().getHours();
targetPeriod = PERIODS.find(item => nowHours >= item.from && nowHours <= item.to).period;
}
function filter(inputTracks) {
let outputTracks = collectTracksForDayPeriod_(inputTracks, targetPeriod, DURATION_PROGRESS, PERIODS);
Filter.rangeDateAbs(outputTracks, DEFAULT_DATE, Filter.getDateRel(14, 'endDay'));
Order.shuffle(outputTracks);
return outputTracks;
}
} Альтернативный вариант с историей от lastfm let rawLastfmTracks = Lastfm.getCustomTop({
minPlayed: 11,
isRawItems: true,
from: '2013-01-01',
to: '2015-12-31',
}).filter(t => t.date).map(t => (t.played_at = t.date['#text'], t));
let filterdRawLastfmTracks = Selector.sliceRandom(filter(rawLastfmTracks), 70);
let lastfmTracks = Lastfm.convertToSpotify(filterdRawLastfmTracks, 'track');
let savedTracks = filter(Cache.read('SavedTracks.json'));
let outputTracks = Combiner.mixinMulti({
source: [lastfmTracks, savedTracks],
inRow: [3, 1],
toLimitOn: true,
}); |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Кажется в статьях про Яндекс.Музыку, видел гипотезу, что утром и вечером - вкус и настроение предпочитаемой музыки могут различаться. Причем порой неуловимо. Поэтому заинтересовало какие треки лайкал или слушал (почти) целиком в разное время суток.
Может выдаю желаемое за действительное, но сейчас (ночью) собрал треки за ночной период и как-то скипать даже не хочется. Надо бы проверить и с другими периодами.
Скрипт поддерживает треки с ключами played_at и added_at. То есть помимо истории прослушиваний, источником могут быть лайки или треки плейлиста (не генерируемые Spotify, у них нет дат добавления).
Фильтр-функция
Добавьте в качестве аддона. Например, в файл addons.gs.
Пример использования
Beta Was this translation helpful? Give feedback.
All reactions