Added tag.getTopTracks

This commit is contained in:
Dave Conley 2016-05-19 12:06:53 +01:00
parent e515eb2be1
commit bdec7c9a35
4 changed files with 75 additions and 8 deletions

View File

@ -12,12 +12,12 @@
namespace IF.Lastfm.Core.Api.Commands.Tag
{
[ApiMethodName("tag.getTopArtists")]
internal class GetTopArtistsCommand: GetAsyncCommandBase<PageResponse<LastArtist>>
[ApiMethodName("tag.getTopTracks")]
internal class GetTopTracksCommand: GetAsyncCommandBase<PageResponse<LastTrack>>
{
public string TagName { get; set; }
public GetTopArtistsCommand(ILastAuth auth, string tagName) : base(auth)
public GetTopTracksCommand(ILastAuth auth, string tagName) : base(auth)
{
TagName = tagName;
}
@ -29,7 +29,7 @@ public override void SetParameters()
DisableCaching();
}
public async override Task<PageResponse<LastArtist>> HandleResponse(HttpResponseMessage response)
public async override Task<PageResponse<LastTrack>> HandleResponse(HttpResponseMessage response)
{
var json = await response.Content.ReadAsStringAsync();
@ -37,14 +37,14 @@ public async override Task<PageResponse<LastArtist>> HandleResponse(HttpResponse
if (LastFm.IsResponseValid(json, out status) && response.IsSuccessStatusCode)
{
var jtoken = JsonConvert.DeserializeObject<JToken>(json);
var resultsToken = jtoken.SelectToken("topartists");
var itemsToken = resultsToken.SelectToken("artist");
var resultsToken = jtoken.SelectToken("toptracks");
var itemsToken = resultsToken.SelectToken("track");
return PageResponse<LastArtist>.CreateSuccessResponse(itemsToken, resultsToken, LastArtist.ParseJToken, LastPageResultsType.Attr);
return PageResponse<LastTrack>.CreateSuccessResponse(itemsToken, resultsToken, LastTrack.ParseJToken, LastPageResultsType.Attr);
}
else
{
return LastResponse.CreateErrorResponse<PageResponse<LastArtist>>(status);
return LastResponse.CreateErrorResponse<PageResponse<LastTrack>>(status);
}
}
}

View File

@ -0,0 +1,51 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using IF.Lastfm.Core.Api.Enums;
using IF.Lastfm.Core.Api.Helpers;
using IF.Lastfm.Core.Objects;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace IF.Lastfm.Core.Api.Commands.Tag
{
[ApiMethodName("tag.getTopArtists")]
internal class GetTopArtistsCommand: GetAsyncCommandBase<PageResponse<LastArtist>>
{
public string TagName { get; set; }
public GetTopArtistsCommand(ILastAuth auth, string tagName) : base(auth)
{
TagName = tagName;
}
public override void SetParameters()
{
Parameters.Add("tag", TagName);
AddPagingParameters();
DisableCaching();
}
public async override Task<PageResponse<LastArtist>> HandleResponse(HttpResponseMessage response)
{
var json = await response.Content.ReadAsStringAsync();
LastResponseStatus status;
if (LastFm.IsResponseValid(json, out status) && response.IsSuccessStatusCode)
{
var jtoken = JsonConvert.DeserializeObject<JToken>(json);
var resultsToken = jtoken.SelectToken("topartists");
var itemsToken = resultsToken.SelectToken("artist");
return PageResponse<LastArtist>.CreateSuccessResponse(itemsToken, resultsToken, LastArtist.ParseJToken, LastPageResultsType.Attr);
}
else
{
return LastResponse.CreateErrorResponse<PageResponse<LastArtist>>(status);
}
}
}
}

View File

@ -73,6 +73,21 @@ public Task<PageResponse<LastArtist>> GetTopArtistsAsync(string tagName, int pag
return command.ExecuteAsync();
}
/// <summary>
/// Get the top artists tagged by this tag, ordered by tag count.
/// </summary>
public Task<PageResponse<LastTrack>> GetTopTracksAsync(string tagName, int page = 1, int itemsPerPage = LastFm.DefaultPageLength)
{
var command = new GetTopTracksCommand(Auth, tagName)
{
HttpClient = HttpClient,
Page = page,
Count = itemsPerPage
};
return command.ExecuteAsync();
}
/// <summary>
/// Fetches the top global tags on Last.fm, sorted by popularity (number of times used).
/// </summary>

View File

@ -68,6 +68,7 @@
<Compile Include="Api\Commands\Tag\GetTopAlbumsCommand.cs" />
<Compile Include="Api\Commands\Tag\GetTopArtistsCommand.cs" />
<Compile Include="Api\Commands\Tag\GetTopTagsCommand.cs" />
<Compile Include="Api\Commands\Tag\GetTopTracksCommand.cs" />
<Compile Include="Api\Commands\Track\ScrobbleCommand.cs" />
<Compile Include="Api\Commands\Track\UpdateNowPlayingCommand.cs" />
<Compile Include="Api\Commands\UnauthenticatedPostAsyncCommandBase.cs" />