Advertisement
Guest User

buy-com.boo

a guest
Sep 11th, 2011
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
BOO 4.73 KB | None | 0 0
  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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement