Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import System
- import System.IO
- import System.Net
- import System.Drawing
- import System.Drawing.Imaging
- import System.Text.RegularExpressions
- import System.Threading
- import AlbumArtDownloader.Scripts
- import util
- class BuyDotCom(AlbumArtDownloader.Scripts.IScript):
- Name as string:
- get: return "Buy.com"
- Version as string:
- get: return "0.8.1"
- Author as string:
- get: return "alsaan, DRata, Alex Vallat"
- def Search(artist as string, album as string, results as IScriptResults):
- artist = StripCharacters("&.'\";:?!", artist)
- album = StripCharacters("&.'\";:?!", album)
- searchParameter = EncodeUrl(artist + " " + album)
- //Retrieve the search results page
- searchResultsHtml as string = GetPage("http://www.buy.com/sr/srajax.aspx?qu=${searchParameter}&from=2&sid=6&page=1&pv=1")
- //Check whether we actually got any relevant result or not
- if(searchResultsHtml.IndexOf("did not return an exact match") > -1):
- return
- //Remove "Results ... in All Categories"
- allCategories = searchResultsHtml.IndexOf(" in all categories ")
- if(allCategories > -1):
- searchResultsHtml = searchResultsHtml.Substring(0, allCategories)
- //Remove "Similar Products in General"
- similar = searchResultsHtml.IndexOf(">Similar Products in <span class=\"searchHeaderTerm\">general<")
- if(similar > -1):
- searchResultsHtml = searchResultsHtml.Substring(0, similar)
- //Extract all the thumbnails and the links to product pages
- itemsRegex = Regex("<a href=\"(?<productPageUrl>[^\"]*/(?<sku>[^\"]*)\\.html)\"[^>]*><img[^>]*src=\"(?<thumbnailUrl>[^\"]*)\"[^>]*title=\"(?<title>[^\"]*)\"[^>]")
- itemsMatches = itemsRegex.Matches(searchResultsHtml)
- //Set the estimated number of covers available (approx. 1 cover per product page)
- results.EstimatedCount = itemsMatches.Count
- for itemMatch in itemsMatches:
- AddThumbnail(results, itemMatch)
- def AddThumbnail(results, itemMatch as Match):
- title = itemMatch.Groups["title"].Value
- productPageUrl = "http://www.buy.com" + itemMatch.Groups["productPageUrl"].Value
- productNumber = itemMatch.Groups["sku"].Value
- thumbnailUrl = itemMatch.Groups["thumbnailUrl"].Value
- if not thumbnailUrl.EndsWith(".gif"):
- imageUrl = String.Format("http://ak.buy.com/PI/0/125/{0}.jpg", productNumber)
- results.Add(imageUrl, title, productPageUrl, -1, -1, productNumber, CoverType.Front)
- def RetrieveFullSizeImage(productNumber):
- imageUrl = String.Format("http://ak.buy.com/PI/0/500/{0}.jpg", productNumber)
- request = System.Net.HttpWebRequest.Create(imageUrl) as System.Net.HttpWebRequest
- imageStream = request.GetResponse().GetResponseStream()
- imageStream = ConvertToMemoryStream(imageStream)
- bitmap = Bitmap(imageStream)
- frameSize = GetFrameSize(bitmap)
- if frameSize > 125:
- croppedBitmap = CropBitmap(bitmap, 125)
- imageStream.Dispose()
- imageStream = ConvertImageToStream(croppedBitmap)
- croppedBitmap.Dispose()
- elif frameSize > 0:
- croppedBitmap = CropBitmap(bitmap, 250)
- imageStream.Dispose()
- imageStream = ConvertImageToStream(croppedBitmap)
- croppedBitmap.Dispose()
- bitmap.Dispose()
- imageStream.Seek(0, SeekOrigin.Begin)
- return imageStream
- def GetFrameSize(bitmap):
- imageSize = bitmap.Width
- imageMiddle as int = imageSize / 2
- frameSize = 0
- whiteArgb = Color.White.ToArgb()
- for i in range(0, 130):
- frameSize = i
- color = bitmap.GetPixel(i, imageMiddle)
- if color.ToArgb() != whiteArgb:
- break
- color = bitmap.GetPixel(imageMiddle,i)
- if color.ToArgb() != whiteArgb:
- break
- color = bitmap.GetPixel(imageSize - i - 1,imageMiddle)
- if color.ToArgb() != whiteArgb:
- break
- color = bitmap.GetPixel(imageMiddle, imageSize - i - 1)
- if color.ToArgb() != whiteArgb:
- break
- return frameSize
- def CropBitmap(bitmap, size):
- x as int = ((bitmap.Width / 2) - (size / 2))
- y as int = ((bitmap.Width / 2) - (size / 2))
- w = size
- h = size
- croppedBitmap = bitmap.Clone(Rectangle(x, y, w, h), bitmap.PixelFormat)
- bitmap.Dispose()
- return croppedBitmap
- def ConvertImageToStream(image):
- stream = System.IO.MemoryStream()
- image.Save(stream, ImageFormat.Png)
- stream.Seek(0, SeekOrigin.Begin)
- return stream
- def ConvertToMemoryStream(sourceStream as Stream) as Stream:
- buffer = array(byte, 4096)
- readBytes = 1
- memoryStream = MemoryStream()
- while readBytes > 0:
- readBytes = sourceStream.Read(buffer, 0, buffer.Length - 1)
- memoryStream.Write(buffer, 0, readBytes)
- sourceStream.Dispose()
- sourceStream = memoryStream
- memoryStream.Seek(0, SeekOrigin.Begin)
- return memoryStream
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement