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]+?(?\\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;