import System.Text.RegularExpressions import AlbumArtDownloader.Scripts import util class LastFmArtist(AlbumArtDownloader.Scripts.IScript, ICategorised): Name as string: get: return "LastFM Artist" Version as string: get: return "0.7" Author as string: get: return "Alex Vallat" Category as string: get: return "Artist Images" protected regexStr as string: get: return "]+?class=\"image-list-image\"[^>]*?src=\"(?[^\"]+?/u/)[^/]+/(?[^\"]+)\"" protected requestUrlBase as string: get: return "http://www.last.fm" def AddResults(imageMatches as MatchCollection, artist as string, requestUrl as string, results as IScriptResults): results.EstimatedCount += imageMatches.Count for imageMatch as Match in imageMatches: imageUrl = imageMatch.Groups["imageUrlBase"].Value + imageMatch.Groups["id"].Value imageUrlThumbnail = imageMatch.Groups["imageUrlBase"].Value + "60x60/" + imageMatch.Groups["id"].Value results.Add(imageUrlThumbnail, artist, requestUrl, -1, -1, imageUrl) def Search(artist as string, album as string, results as IScriptResults): artist = StripCharacters("&.'\";:?!", artist) encodedArtist = EncodeUrl(artist) requestUrl = "${requestUrlBase}/music/${encodedArtist}/+images" imagesHtml = GetPage(requestUrl) imageMatches = Regex(regexStr, RegexOptions.Singleline).Matches(imagesHtml) AddResults(imageMatches, artist, requestUrl, results) pageCount = 1 try: pageCountMatch = Regex("[^<]+?Page\\s+\\d+\\s+[^\\s]+\\s+(?\\d+)[^<]*").Match(imagesHtml) pageCount = System.Int32.Parse(pageCountMatch.Groups["pageCount"].Value) except: return for i in range(2, pageCount + 1): requestUrl = "${requestUrlBase}/music/${encodedArtist}/+images" + "?page=" + i.ToString("D") imagesHtml = GetPage(requestUrl) imageMatches = Regex(regexStr, RegexOptions.Singleline).Matches(imagesHtml) AddResults(imageMatches, artist, requestUrl, results) def RetrieveFullSizeImage(fullSizeCallbackParameter): return fullSizeCallbackParameter;