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;