Hack 84 Work Around Products Without Images
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.
84.1 What You Need
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.
84.2 The Code
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.
84.3 Running the Hack
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:
http://example.com/hasImage.asp
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.
|