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 searchMax as Int32: get: return 50 protected requestUrlBase as string: get: return "http://www.last.fm" def Search(artist as string, album as string, results as IScriptResults): artist = StripCharacters("&.'\";:?!", artist) encodedArtist = EncodeUrl(artist) requestUrl = "${requestUrlBase}/music/${encodedArtist}/+images" resultCount = 0 while true: imagesHtml = GetPage(requestUrl) if resultCount == 0: imageCountMatch = Regex("[^<\\d]+?\\d+?[^\\d]+?(?<imageCount>\\d+?)[^\\d][^<]+").Match(imagesHtml) if imageCountMatch.Success: results.EstimatedCount = System.Int32.Parse(imageCountMatch.Groups["imageCount"].Value) imageMatch = Regex("class=\"gallery-image(\"|\\s+[^\"]+\").+?[^\"]+?/u/)(?[^/]+)/(?[^\"]+)\".+?href=\"(?/music[^\"]+)\"(\\s|\\n)+class=\"(\\s|\\n)*gallery-(?[^\"]+)\"", RegexOptions.Singleline).Match(imagesHtml) imageUrl = imageMatch.Groups["imageUrlBase"].Value + imageMatch.Groups["fullSize"].Value + "/" + imageMatch.Groups["id"].Value imageUrlThumbnail = imageMatch.Groups["imageUrlBase"].Value + "60x60/" + imageMatch.Groups["id"].Value results.Add(imageUrlThumbnail, artist, requestUrl, -1, -1, imageUrl); resultCount += 1 nextOrPreviousUrl = imageMatch.Groups["nextOrPreviousUrl"].Value nextOrPrevious = imageMatch.Groups["nextOrPrevious"].Value if nextOrPrevious.Substring(0,4) != "next" or resultCount >= searchMax: break requestUrl = requestUrlBase + nextOrPreviousUrl def RetrieveFullSizeImage(fullSizeCallbackParameter): return fullSizeCallbackParameter;