mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-07-09 03:04:24 -04:00
First cut at LastfmArtistProvider
This commit is contained in:
parent
de878025e6
commit
d7cdf06326
@ -77,7 +77,7 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
|
|||||||
{
|
{
|
||||||
var handler = new WebRequestHandler
|
var handler = new WebRequestHandler
|
||||||
{
|
{
|
||||||
AutomaticDecompression = DecompressionMethods.Deflate,
|
//AutomaticDecompression = DecompressionMethods.Deflate,
|
||||||
CachePolicy = new RequestCachePolicy(RequestCacheLevel.Revalidate)
|
CachePolicy = new RequestCachePolicy(RequestCacheLevel.Revalidate)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -38,6 +38,11 @@ namespace MediaBrowser.Common.Kernel
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public readonly SemaphoreSlim Mb = new SemaphoreSlim(5, 5);
|
public readonly SemaphoreSlim Mb = new SemaphoreSlim(5, 5);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The mb
|
||||||
|
/// </summary>
|
||||||
|
public readonly SemaphoreSlim Lastfm = new SemaphoreSlim(5, 5);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Apple doesn't seem to like too many simulataneous requests.
|
/// Apple doesn't seem to like too many simulataneous requests.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -1,12 +1,15 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using MediaBrowser.Common.Net;
|
using MediaBrowser.Common.Net;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
|
using MediaBrowser.Controller.Entities.Audio;
|
||||||
using MediaBrowser.Model.Logging;
|
using MediaBrowser.Model.Logging;
|
||||||
|
using MediaBrowser.Model.Net;
|
||||||
using MediaBrowser.Model.Serialization;
|
using MediaBrowser.Model.Serialization;
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.Providers.Music
|
namespace MediaBrowser.Controller.Providers.Music
|
||||||
@ -18,9 +21,64 @@ namespace MediaBrowser.Controller.Providers.Music
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override Task FetchLastfmData(BaseItem item, string id, CancellationToken cancellationToken)
|
protected override async Task<string> FindId(Entities.BaseItem item, System.Threading.CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
//Execute the Artist search against our name and assume first one is the one we want
|
||||||
|
var url = RootUrl + string.Format("method=artist.search&artist={0}&api_key={1}&format=json", UrlEncode(item.Name), ApiKey);
|
||||||
|
|
||||||
|
LastfmArtistSearchResults searchResult = null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (var json = await HttpClient.Get(url, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false))
|
||||||
|
{
|
||||||
|
searchResult = JsonSerializer.DeserializeFromStream<LastfmArtistSearchResults>(json);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (HttpException e)
|
||||||
|
{
|
||||||
|
if (e.StatusCode == HttpStatusCode.NotFound)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (searchResult != null && searchResult.results != null && searchResult.results.artistmatches != null && searchResult.results.artistmatches.artist.Any())
|
||||||
|
{
|
||||||
|
return searchResult.results.artistmatches.artist.First().mbid;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override async Task FetchLastfmData(BaseItem item, string id, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
// Get artist info with provided id
|
||||||
|
var url = RootUrl + string.Format("method=artist.getInfo&mbid={0}&api_key={1}&format=json", UrlEncode(id), ApiKey);
|
||||||
|
|
||||||
|
LastfmGetArtistResult result = null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (var json = await HttpClient.Get(url, Kernel.Instance.ResourcePools.Lastfm, cancellationToken).ConfigureAwait(false))
|
||||||
|
{
|
||||||
|
result = JsonSerializer.DeserializeFromStream<LastfmGetArtistResult>(json);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (HttpException e)
|
||||||
|
{
|
||||||
|
if (e.StatusCode == HttpStatusCode.NotFound)
|
||||||
|
{
|
||||||
|
throw new LastfmProviderException(string.Format("Unable to retrieve artist info for {0} with id {0}", item.Name, id));
|
||||||
|
}
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result != null && result.artist != null)
|
||||||
|
{
|
||||||
|
ProcessArtistData(item as MusicArtist, result.artist);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ namespace MediaBrowser.Controller.Providers.Music
|
|||||||
{
|
{
|
||||||
public abstract class LastfmBaseArtistProvider : LastfmBaseProvider
|
public abstract class LastfmBaseArtistProvider : LastfmBaseProvider
|
||||||
{
|
{
|
||||||
protected LastfmBaseArtistProvider(IJsonSerializer jsonSerializer, IHttpClient httpClient, ILogManager logManager)
|
protected LastfmBaseArtistProvider(IJsonSerializer jsonSerializer, IHttpClient httpClient, ILogManager logManager)
|
||||||
: base(jsonSerializer, httpClient, logManager)
|
: base(jsonSerializer, httpClient, logManager)
|
||||||
{
|
{
|
||||||
LocalMetaFileName = "MBArtist.json";
|
LocalMetaFileName = "MBArtist.json";
|
||||||
@ -25,38 +25,17 @@ namespace MediaBrowser.Controller.Providers.Music
|
|||||||
return item is MusicArtist;
|
return item is MusicArtist;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override async Task<string> FindId(Entities.BaseItem item, System.Threading.CancellationToken cancellationToken)
|
protected void ProcessArtistData(MusicArtist artist, LastfmArtist data)
|
||||||
{
|
{
|
||||||
//Execute the Artist search against our name and assume first one is the one we want
|
artist.Overview = data.bio.summary;
|
||||||
var url = RootUrl + string.Format("method=artist.search&artist={0}&api_key={1}&format=json", UrlEncode(item.Name), ApiKey);
|
foreach (var tag in data.tags.tag)
|
||||||
|
|
||||||
LastfmArtistSearchResults searchResult = null;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
{
|
||||||
using (var json = await HttpClient.Get(url, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false))
|
artist.AddGenre(tag.name);
|
||||||
{
|
|
||||||
searchResult = JsonSerializer.DeserializeFromStream<LastfmArtistSearchResults>(json);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (HttpException e)
|
|
||||||
{
|
|
||||||
if (e.StatusCode == HttpStatusCode.NotFound)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (searchResult != null && searchResult.results != null && searchResult.results.artistmatches != null && searchResult.results.artistmatches.artist.Any())
|
|
||||||
{
|
|
||||||
return searchResult.results.artistmatches.artist.First().mbid;
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#region Result Objects
|
#region Result Objects
|
||||||
|
|
||||||
public class LastfmStats
|
public class LastfmStats
|
||||||
@ -71,6 +50,11 @@ namespace MediaBrowser.Controller.Providers.Music
|
|||||||
public string url { get; set; }
|
public string url { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class LastfmTags
|
||||||
|
{
|
||||||
|
public List<LastfmTag> tag { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
public class LastfmFormationInfo
|
public class LastfmFormationInfo
|
||||||
{
|
{
|
||||||
public string yearfrom { get; set; }
|
public string yearfrom { get; set; }
|
||||||
@ -96,7 +80,7 @@ namespace MediaBrowser.Controller.Providers.Music
|
|||||||
public string ontour { get; set; }
|
public string ontour { get; set; }
|
||||||
public LastfmStats stats { get; set; }
|
public LastfmStats stats { get; set; }
|
||||||
public List<LastfmArtist> similar { get; set; }
|
public List<LastfmArtist> similar { get; set; }
|
||||||
public List<LastfmTag> tags { get; set; }
|
public LastfmTags tags { get; set; }
|
||||||
public LastFmBio bio { get; set; }
|
public LastFmBio bio { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,6 +103,5 @@ namespace MediaBrowser.Controller.Providers.Music
|
|||||||
{
|
{
|
||||||
public LastfmArtistSearchResult results { get; set; }
|
public LastfmArtistSearchResult results { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user