Those few items that don't have images can be pesky if your application depends on them. The key to weeding out the bad ones is byte size.
Amazon's product database contains millions of items, so it's not surprising that a few of them don't have images. The lack of images can be a problem if your application relies on them. AWS responses don't tell you if an image doesn't exist; in fact, AWS always returns an image URL, but in some cases the image is a single-pixel transparent GIF instead of a picture of the product. For many applications, using the invisible, single-pixel GIF won't be a problem. But if you're watching every pixel and your application works within a strict design, you'll want to find a way to work around this problem.
Although AWS responses don't directly say whether a product has an image or not, they do let you know indirectly. The image at the other end of the image URL will be considerably smaller if it's a single-pixel GIF. With a quick HTTP request, you can find the image byte size and know if it's big or small.
The function can be used in any ASP script; these run on Windows servers running IIS. You'll also need the Microsoft XML Parser, which is usually installed by default when you install Internet Explorer.
Create a file called hasImage.asp with the following code:
Function hasImage(asin_in) strIURL = "http://images.amazon.com/images/P/" & asin_in strIURL = strIURL & ".01.THUMBZZZ.jpg" On Error Resume Next Set xmlhttp = Server.CreateObject("Msxml2.SERVERXMLHTTP") xmlhttp.Open "GET", strIURL, false xmlhttp.Send(Now) If Err.Number <> 0 Then strResponseBody = "" Err.Clear Else strResponseBody = xmlhttp.responseBody End If On Error GoTo 0 Set xmlhttp = Nothing If Len(strResponseBody) > 403 Then hasImage = 1 Else hasImage = 0 End If End Function
The function requests an image, looks at the byte size, and returns true or false based on what it finds. It just so happens that the number of characters in the single-pixel GIF file is 403. This script assumes that anything greater than that must be a real product image.
The hard part in testing this script is finding products without images. Only a small percentage of products don't have images, and there's no way to specifically seek them out. Still, to test it out, add the following lines to hasImage.asp:
response.write "Asin 1873176945 " If hasImage("1873176945") Then response.write "has an image." Else response.write "doesn't have an image!" End If response.write "<br>" response.write "Asin 0596004478 " If hasImage("0596004478") Then response.write "has an image." Else response.write "doesn't have an image!" End If
Browse to the page on your server:
And you should see:
Asin 1873176945 doesn't have an image! Asin 0596004478 has an image.
Then you can confirm the results by browsing to the product detail pages.