SHARE
TWEET

buy-com.boo

a guest Sep 11th, 2011 16 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import System
  2. import System.IO
  3. import System.Net
  4. import System.Drawing
  5. import System.Drawing.Imaging
  6. import System.Text.RegularExpressions
  7. import System.Threading
  8. import AlbumArtDownloader.Scripts
  9. import util
  10.  
  11. class BuyDotCom(AlbumArtDownloader.Scripts.IScript):
  12.         Name as string:
  13.                 get: return "Buy.com"
  14.         Version as string:
  15.                 get: return "0.8.1"
  16.         Author as string:
  17.                 get: return "alsaan, DRata, Alex Vallat"
  18.                
  19.         def Search(artist as string, album as string, results as IScriptResults):
  20.        
  21.                 artist = StripCharacters("&.'\";:?!", artist)
  22.                 album = StripCharacters("&.'\";:?!", album)
  23.                
  24.                 searchParameter = EncodeUrl(artist + " " + album)
  25.                          
  26.                 //Retrieve the search results page
  27.                 searchResultsHtml as string = GetPage("http://www.buy.com/sr/srajax.aspx?qu=${searchParameter}&from=2&sid=6&page=1&pv=1")
  28.                
  29.                 //Check whether we actually got any relevant result or not
  30.                 if(searchResultsHtml.IndexOf("did not return an exact match") > -1):
  31.                         return
  32.  
  33.                 //Remove "Results ... in All Categories"
  34.                 allCategories = searchResultsHtml.IndexOf(" in all categories ")
  35.                 if(allCategories > -1):
  36.                         searchResultsHtml = searchResultsHtml.Substring(0, allCategories)
  37.  
  38.                 //Remove "Similar Products in General"
  39.                 similar = searchResultsHtml.IndexOf(">Similar Products in <span class=\"searchHeaderTerm\">general<")
  40.                 if(similar > -1):
  41.                         searchResultsHtml = searchResultsHtml.Substring(0, similar)
  42.                
  43.                 //Extract all the thumbnails and the links to product pages
  44.                 itemsRegex = Regex("<a href=\"(?<productPageUrl>[^\"]*/(?<sku>[^\"]*)\\.html)\"[^>]*><img[^>]*src=\"(?<thumbnailUrl>[^\"]*)\"[^>]*title=\"(?<title>[^\"]*)\"[^>]")
  45.                 itemsMatches = itemsRegex.Matches(searchResultsHtml)
  46.                
  47.                 //Set the estimated number of covers available (approx. 1 cover per product page)
  48.                 results.EstimatedCount = itemsMatches.Count
  49.                
  50.                 for itemMatch in itemsMatches:
  51.                         AddThumbnail(results, itemMatch)
  52.                                                                        
  53.         def AddThumbnail(results, itemMatch as Match):
  54.                
  55.                 title = itemMatch.Groups["title"].Value
  56.                 productPageUrl = "http://www.buy.com" + itemMatch.Groups["productPageUrl"].Value
  57.                 productNumber = itemMatch.Groups["sku"].Value
  58.                 thumbnailUrl = itemMatch.Groups["thumbnailUrl"].Value
  59.                
  60.                 if not thumbnailUrl.EndsWith(".gif"):
  61.                                        
  62.                         imageUrl = String.Format("http://ak.buy.com/PI/0/125/{0}.jpg", productNumber)                  
  63.                         results.Add(imageUrl, title, productPageUrl, -1, -1, productNumber, CoverType.Front)
  64.                        
  65.         def RetrieveFullSizeImage(productNumber):
  66.        
  67.                 imageUrl = String.Format("http://ak.buy.com/PI/0/500/{0}.jpg", productNumber)
  68.                
  69.                 request = System.Net.HttpWebRequest.Create(imageUrl) as System.Net.HttpWebRequest
  70.                 imageStream = request.GetResponse().GetResponseStream()
  71.                 imageStream = ConvertToMemoryStream(imageStream)
  72.                                                
  73.                 bitmap = Bitmap(imageStream)
  74.                 frameSize = GetFrameSize(bitmap)       
  75.        
  76.                 if frameSize > 125:
  77.                         croppedBitmap = CropBitmap(bitmap, 125)
  78.                         imageStream.Dispose()
  79.                         imageStream = ConvertImageToStream(croppedBitmap)
  80.                         croppedBitmap.Dispose()
  81.                 elif frameSize > 0:
  82.                         croppedBitmap = CropBitmap(bitmap, 250)
  83.                         imageStream.Dispose()
  84.                         imageStream = ConvertImageToStream(croppedBitmap)
  85.                         croppedBitmap.Dispose()
  86.                        
  87.                 bitmap.Dispose()
  88.  
  89.                 imageStream.Seek(0, SeekOrigin.Begin)
  90.                 return imageStream             
  91.                
  92.         def GetFrameSize(bitmap):
  93.        
  94.                 imageSize = bitmap.Width
  95.                 imageMiddle as int = imageSize / 2
  96.                 frameSize = 0
  97.                 whiteArgb = Color.White.ToArgb()
  98.                
  99.                 for i in range(0, 130):
  100.                
  101.                         frameSize = i
  102.                        
  103.                         color = bitmap.GetPixel(i, imageMiddle)
  104.                         if color.ToArgb() != whiteArgb:
  105.                                 break
  106.                                
  107.                         color = bitmap.GetPixel(imageMiddle,i)
  108.                         if color.ToArgb() != whiteArgb:
  109.                                 break
  110.                                
  111.                         color = bitmap.GetPixel(imageSize - i - 1,imageMiddle)
  112.                         if color.ToArgb() != whiteArgb:
  113.                                 break
  114.                                
  115.                         color = bitmap.GetPixel(imageMiddle, imageSize - i - 1)
  116.                         if color.ToArgb() != whiteArgb:
  117.                                 break
  118.  
  119.                 return frameSize
  120.                
  121.         def CropBitmap(bitmap, size):
  122.                
  123.                 x as int = ((bitmap.Width / 2) - (size / 2))
  124.                 y as int = ((bitmap.Width / 2) - (size / 2))
  125.                 w = size
  126.                 h = size
  127.        
  128.                 croppedBitmap = bitmap.Clone(Rectangle(x, y, w, h), bitmap.PixelFormat)
  129.                 bitmap.Dispose()
  130.                
  131.                 return croppedBitmap
  132.                
  133.         def ConvertImageToStream(image):
  134.        
  135.                 stream = System.IO.MemoryStream()
  136.                 image.Save(stream, ImageFormat.Png)
  137.                
  138.                 stream.Seek(0, SeekOrigin.Begin)               
  139.                 return stream
  140.                
  141.         def ConvertToMemoryStream(sourceStream as Stream) as Stream:   
  142.        
  143.                 buffer = array(byte, 4096)
  144.                 readBytes = 1
  145.                 memoryStream = MemoryStream()
  146.                
  147.                 while readBytes > 0:
  148.                         readBytes = sourceStream.Read(buffer, 0, buffer.Length - 1)
  149.                         memoryStream.Write(buffer, 0, readBytes)
  150.                        
  151.                 sourceStream.Dispose()
  152.                 sourceStream = memoryStream
  153.                        
  154.                 memoryStream.Seek(0, SeekOrigin.Begin)         
  155.                 return memoryStream
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top