Initial commit — AllMusicGuide scraper and music metadata tagger
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
using System.Collections.Generic;
|
||||
using MusicMetaTagger.Client.AllMusicGuide.RemoteDataAccess.Client;
|
||||
using MusicMetaTagger.Client.AllMusicGuide.RemoteDataAccess.Parser;
|
||||
using MusicMetaTagger.Core.Model;
|
||||
|
||||
namespace MusicMetaTagger.Client.AllMusicGuide.RemoteDataAccess.Scraper
|
||||
{
|
||||
public class AlbumResultPageScraper : ScraperBase<List<AlbumResult>, AlbumResultPageClient, AlbumResultPageParser>
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
using MusicMetaTagger.Client.AllMusicGuide.RemoteDataAccess.Client;
|
||||
using MusicMetaTagger.Client.AllMusicGuide.RemoteDataAccess.Parser;
|
||||
using MusicMetaTagger.Core.Model;
|
||||
|
||||
namespace MusicMetaTagger.Client.AllMusicGuide.RemoteDataAccess.Scraper
|
||||
{
|
||||
public class AlbumScraper : ScraperBase<Album, AlbumClient, AlbumParser>
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using MusicMetaTagger.Client.AllMusicGuide.RemoteDataAccess.Client;
|
||||
using MusicMetaTagger.Client.AllMusicGuide.RemoteDataAccess.Parser;
|
||||
using MusicMetaTagger.Core.Model;
|
||||
|
||||
namespace MusicMetaTagger.Client.AllMusicGuide.RemoteDataAccess.Scraper
|
||||
{
|
||||
public class ArtistDiscographyScraper : IScraper<List<ArtistDiscography>>
|
||||
{
|
||||
public List<ArtistDiscography> Scrape(string artistId)
|
||||
{
|
||||
var parser = new ArtistDiscographyPageParser();
|
||||
var xmlClients =
|
||||
new IXmlClientBase[]
|
||||
{
|
||||
new ArtistDiscographyAlbumPageClient(),
|
||||
new ArtistDiscographyCompilationPageClient(),
|
||||
new ArtistDiscographyEpSinglesPageClient()
|
||||
};
|
||||
return xmlClients.Select(c => c.Read(artistId)).SelectMany(parser.Parse).ToList();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
using System.Collections.Generic;
|
||||
using MusicMetaTagger.Client.AllMusicGuide.RemoteDataAccess.Client;
|
||||
using MusicMetaTagger.Client.AllMusicGuide.RemoteDataAccess.Parser;
|
||||
using MusicMetaTagger.Core.Model;
|
||||
|
||||
namespace MusicMetaTagger.Client.AllMusicGuide.RemoteDataAccess.Scraper
|
||||
{
|
||||
public class ArtistResultPageScraper : ScraperBase<List<ArtistResult>, ArtistResultPageClient, ArtistResultPageParser>
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
using MusicMetaTagger.Client.AllMusicGuide.RemoteDataAccess.Client;
|
||||
using MusicMetaTagger.Client.AllMusicGuide.RemoteDataAccess.Parser;
|
||||
using MusicMetaTagger.Core.Model;
|
||||
|
||||
namespace MusicMetaTagger.Client.AllMusicGuide.RemoteDataAccess.Scraper
|
||||
{
|
||||
public class ArtistScraper : ScraperBase<Artist, ArtistClient, ArtistParser>
|
||||
{
|
||||
public new Artist Scrape(string artistId)
|
||||
{
|
||||
var artist = base.Scrape(artistId);
|
||||
|
||||
var artistDiscographyScraper = new ArtistDiscographyScraper();
|
||||
artist.Discography = artistDiscographyScraper.Scrape(artistId);
|
||||
|
||||
return artist;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
namespace MusicMetaTagger.Client.AllMusicGuide.RemoteDataAccess.Scraper
|
||||
{
|
||||
public interface IScraper<out TEntity>
|
||||
{
|
||||
TEntity Scrape(string criteria);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
using MusicMetaTagger.Client.AllMusicGuide.RemoteDataAccess.Client;
|
||||
using MusicMetaTagger.Client.AllMusicGuide.RemoteDataAccess.Parser;
|
||||
|
||||
namespace MusicMetaTagger.Client.AllMusicGuide.RemoteDataAccess.Scraper
|
||||
{
|
||||
public abstract class ScraperBase<TEntity, TClient, TParser> : IScraper<TEntity>
|
||||
where TClient : IXmlClientBase, new()
|
||||
where TParser : IParser<TEntity>, new()
|
||||
{
|
||||
public TEntity Scrape(string criteria)
|
||||
{
|
||||
var xmlDocument = new TClient().Read(criteria);
|
||||
return new TParser().Parse(xmlDocument);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
using System.Collections.Generic;
|
||||
using MusicMetaTagger.Client.AllMusicGuide.RemoteDataAccess.Client;
|
||||
using MusicMetaTagger.Client.AllMusicGuide.RemoteDataAccess.Parser;
|
||||
using MusicMetaTagger.Core.Model;
|
||||
|
||||
namespace MusicMetaTagger.Client.AllMusicGuide.RemoteDataAccess.Scraper
|
||||
{
|
||||
public class SongResultPageScraper : ScraperBase<List<SongResult>, SongResultPageClient, SongResultPageParser>
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
using MusicMetaTagger.Client.AllMusicGuide.RemoteDataAccess.Client;
|
||||
using MusicMetaTagger.Client.AllMusicGuide.RemoteDataAccess.Parser;
|
||||
using MusicMetaTagger.Core.Model;
|
||||
|
||||
namespace MusicMetaTagger.Client.AllMusicGuide.RemoteDataAccess.Scraper
|
||||
{
|
||||
public class SongScraper : ScraperBase<Song, SongClient, SongParser>
|
||||
{
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user