Skip to content

Commit

Permalink
Добавлены функции Lastfm.getTop*ByTag
Browse files Browse the repository at this point in the history
  • Loading branch information
Chimildic committed Dec 6, 2021
1 parent f3db62f commit 97484ef
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 1 deletion.
2 changes: 1 addition & 1 deletion docs/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

## Версия 1.5.4
- Добавлена попытка повторного чтения/записи при неизвестной ошибки службы Google Диска.
- Добавлена функция: [Lastfm.rangeTags](/func?id=rangetags).
- Добавлены функции: [Lastfm.rangeTags](/func?id=rangetags) и ряд Lastfm.getTop*ByTag.
- [addToQueue](/func?id=addtoqueue) может добавлять массив треков в очередь.
- К [mineTracks](/func?id=minetracks) добавлен параметр для пропуска элементов.
- К [removeUnavailable](/func?id=removeunavailable) добавлен аргумент отключения сообщений с логами.
Expand Down
55 changes: 55 additions & 0 deletions docs/func.md
Original file line number Diff line number Diff line change
Expand Up @@ -836,6 +836,24 @@ let artists = Lastfm.getTopAlbums({
});
```

### getTopAlbumsByTag

Возвращает топ альбомов по заданному тегу. Поиск каждого альбома тратит один запрос.

Аргументы
- (объект) `params` - параметры для выбора топа.
- (строка) `tag` - название тега.
- (число) `limit` - количество альбомов на странице. По умолчанию 50. Можно больше, но в этом случае Lastfm иногда дает другое количество.
- (число) `page` - номер страницы, используется для сдвига по результату. По умолчанию 1.

Пример 1 - Получить альбомы с 51-100 по тегу рок
```js
let albums = Lastfm.getTopAlbumsByTag({
tag: 'rock',
page: 2,
})
```

### getTopArtists

Возвращает массив с топом исполнителей по заданному периоду.
Expand All @@ -852,6 +870,25 @@ let artists = Lastfm.getTopArtists({
});
```

### getTopArtistsByTag

Возвращает топ исполнителей по заданному тегу. Поиск каждого исполнителя тратит один запрос.

Аргументы
- (объект) `params` - параметры для выбора топа.
- (строка) `tag` - название тега.
- (число) `limit` - количество исполнителей на странице. По умолчанию 50. Можно больше, но в этом случае Lastfm иногда дает другое количество.
- (число) `page` - номер страницы, используется для сдвига по результату. По умолчанию 1.

Пример 1 - Получить вторую десятку исполнителей из топа инди.
```js
let artists = Lastfm.getTopArtistsByTag({
tag: 'indie',
limit: 10,
page: 2,
})
```

### getTopTracks

Возвращает массив с топом треков по заданному периоду. Внимание на предупреждение из [getRecentTracks](/func?id=getrecenttracks).
Expand All @@ -877,6 +914,24 @@ let tracks = Lastfm.getTopTracks({
});
```

### getTopTracksByTag

Возвращает топ треков по заданному тегу. Поиск каждого трека тратит одни запрос.

Аргументы
- (объект) `params` - параметры для выбора топа.
- (строка) `tag` - название тега.
- (число) `limit` - количество треков на странице. По умолчанию 50. Можно больше, но в этом случае Lastfm иногда дает другое количество.
- (число) `page` - номер страницы, используется для сдвига по результату. По умолчанию 1.

Пример 1 - Получить топ 20 по тегу поп.
```js
let tracks = Lastfm.getTopTracksByTag({
tag: 'pop',
limit: 20,
})
```

### rangeTags

Оставляет только треки, которые содержат указанные теги Lastfm. Треки непрошедшие проверку удаляются из оригинального массива `spotifyTracks`. К каждому треку добавляется ключ `tags`, содержащий массив тегов.
Expand Down
26 changes: 26 additions & 0 deletions library.js
Original file line number Diff line number Diff line change
Expand Up @@ -2081,8 +2081,11 @@ const Lastfm = (function () {
getLastfmRecentTracks: getLastfmRecentTracks,
findNewPlayed: findNewPlayed,
getTopTracks: getTopTracks,
getTopTracksByTag: getTopTracksByTag,
getTopArtists: getTopArtists,
getTopArtistsByTag: getTopArtistsByTag,
getTopAlbums: getTopAlbums,
getTopAlbumsByTag: getTopAlbumsByTag,
getMixStation: getMixStation,
getLibraryStation: getLibraryStation,
getRecomStation: getRecomStation,
Expand Down Expand Up @@ -2379,6 +2382,29 @@ const Lastfm = (function () {
}
}

function getTopTracksByTag(params) {
params.method = 'tag.gettoptracks';
return getTopByTag(params, 'track');
}

function getTopArtistsByTag(params) {
params.method = 'tag.gettopartists';
return getTopByTag(params, 'artist');
}

function getTopAlbumsByTag(params) {
params.method = 'tag.gettopalbums';
return getTopByTag(params, 'album');
}

function getTopByTag(queryObj, type) {
let [formatMethod, searchMethod] = obtainMethodNamesByType(type);
let url = createUrl(queryObj);
let response = CustomUrlFetchApp.fetch(url);
let key = Object.keys(response)[0];
return searchMethod(response[key][type], formatMethod);
}

function obtainMethodNamesByType(type = 'track') {
let formatMethod, searchMethod;
if (type == 'artist') {
Expand Down

0 comments on commit 97484ef

Please sign in to comment.