<%
''    AMAZON-RSS.ASP
''    Sean P. Nolan
''    http://www.yaywastaken.com/
''
''    This code is free for you to use as you see fit. Copy it, rewrite it, 
''    run it yourself, whatever. But no warranties or guarantees either. Who
''    knows what the hell it does. Not me, that's for sure!
''
''    Generates an RSS 0.91 feed from an Amazon book query
''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

    Const MAX_PAGES_DEFAULT = 10

    Dim szTitle, szMaxPages, nMaxPages

    Response.ContentType = "text/xml"
    Server.ScriptTimeout = 60 * 4 ' 4-minute maximum
    Response.Expires = 0

    szMaxPages = Request.QueryString("maxpages")
    If (szMaxPages = "") Then
        nMaxPages = MAX_PAGES_DEFAULT
    Else
        nMaxPages = CLng(szMaxPages)
    End If

    szTitle = "Amazon: " & XMLify(Request.QueryString("keywords"))

    %><?xml version="1.0" encoding="ISO-8859-1" ?>
    <rss version="0.91">
        <channel>
            <link>http://www.yaywastaken.com/amazon/</link>
            <title><%= szTitle %></title>
            <description>Create your own custom Amazon RSS feed!</description>
            <language>en-us</language>
            <image>
                <url>http://www.yaywastaken.com/amazon.gif</url>
                <link>http://www.yaywastaken.com/amazon/</link>
                <title><%= szTitle %></title>
            </image>
    <% 
    RenderItems Request.QueryString("keywords"), _
                Request.QueryString("browse") , _
                Request.QueryString("author") , _
                Request.QueryString("shortdesc"), _
                nMaxPages
    %>

        </channel>
    </rss>
    <%

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' RenderItems

    Sub RenderItems(szKeywords, szBrowseNode, szAuthor, szShortDesc, nMaxPages)
        Dim szURLFmt, szURL, xmlDoc, ipage, http, xmlErr
        Dim fParsed, xslDoc, szXSLPath, szOutput

        On Error Resume Next

        If (szShortDesc <> "") Then
            szXSLPath = "amazon-lite.xsl"
        Else
            szXSLPath = "amazon-heavy.xsl"
        End If

        Set xslDoc = Server.CreateObject("Msxml2.DOMDocument")
        xslDoc.async = False
        xslDoc.load(Server.MapPath(szXSLPath))

        If (szBrowseNode <> "") Then
            szURLFmt = "http://xml.amazon.com/onca/xml3?" & _
                       "t=yaywastaken-20&" & _
                          "dev-t=XXXXXXXXXXXX&BrowseNodeSearch=" & _
                          Server.URLEncode(szBrowseNode) & _
                          "&mode=books&type=heavy&page=%%%PAGE%%%&f=xml"
        ElseIf (szAuthor <> "") Then
            szURLFmt = "http://xml.amazon.com/onca/xml3?" & _
                       "t=yaywastaken-20&" & _
                          "dev-t=XXXXXXXXXXXX&AuthorSearch=" & _
                          Server.URLEncode(szAuthor) & _
                          "&mode=books&type=heavy&page=%%%PAGE%%%&f=xml"
        Else
            szURLFmt = "http://xml.amazon.com/onca/xml3?" & _
                       "t=yaywastaken-20&" & _
                          "dev-t=XXXXXXXXXXXX&KeywordSearch=" & _
                          Server.URLEncode(szKeywords) & _
                          "&mode=books&type=heavy&page=%%%PAGE%%%&f=xml"
        End If

        If (Request("loc") <> "") Then
            szURLFmt = szURLFmt & "&locale=" & LCase(Trim(Request("loc")))
        End If

        If (Request("mode") <> "") Then
            szURLFmt = Replace(szURLFmt, "mode=books", _
                               "mode=" & LCase(Trim(Request("mode"))))
        End If

        ipage = 1
        Do
            szURL = Replace(szURLFmt, "%%%PAGE%%%", ipage)
    
            Set http = Server.CreateObject("Msxml2.ServerXMLHTTP")
            http.open "GET", szURL, False
            http.send ""

            If (http.status <> 200) Then
                Exit Do
            End If

            Set xmlDoc = Server.CreateObject("Msxml2.DOMDocument")
            xmlDoc.async = False
            xmlDoc.validateOnParse = False
            xmlDoc.resolveExternals = False
            fParsed = xmlDoc.loadXML(http.responseText)

            If (Not fParsed) Then
                Exit Do
            End If

            Set xmlErr = Nothing
            Set xmlErr = xmlDoc.selectSingleNode("ProductInfo/ErrorMsg")
            If (Not xmlErr Is Nothing) Then
                Exit Do
            End If

            szOutput = xmlDoc.transformNode(xslDoc)
            Response.Write szOutput

            ipage = ipage + 1
            If (ipage > nMaxPages) Then
                Exit Do
            End If
        Loop
    End Sub

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Helpers

    Function XMLify(sz)
        XMLify = Replace(sz, "&", "&amp;")
        XMLify = Replace(XMLify, "<", "<")
        XMLify = Replace(XMLify, ">", ">")
        XMLify = Replace(XMLify, """", """)
        XMLify = Replace(XMLify, "'", "'")
    End Function
%>