What is the best script and/or class to parse an XML file from an ASP page?
msaqib -3 Junior Poster in Training
Here is a class that parse the RSS XML.
<%
'+---------------------------------------------+
'| RSS Content Feed VBScript Class 1.0 |
'| © 2004 www.tele-pro.co.uk |
'| http://www.tele-pro.co.uk/scripts/rss/ |
'| The RSSContentFeed Class makes it easy to |
'| download and display RSS XML feeds. |
'+---------------------------------------------+
Class RSSContentFeed
'+---------------------------------------------+
'declare class variables
'strings
Private classname
Private xml_URL
Private xml_data
Private StrResultsXML
Private StrCachePath
Private Strchannel
Private Strtitle
Private Strlink
Private Strdescription
Private StrRSSVersion
Private imgTitle
Private imgUrl
Private imgLink
'ebay
Private eBayAPIURL
Private eBayAPISandboxURL
Private imgBuyItNow
Public eBayTime 'date
'int
Private iTotalResults
Private icacheDays
Private iMaxResults
Private imgWidth
Private imgHeight
'bool
Private bFromcache
'dict
Private Headers
'arrays
Public Results()
Public Links()
Public Titles()
Public Descriptions()
Public PubDates()
Public Images()
Public Ids()
'+---------------------------------------------+
'Class Functions
'Class_Initialize
Private Sub Class_Initialize
Initialize
End Sub
'Class_Terminate
Private Sub Class_Terminate
'empty the cache
DeleteCache()
'empty the dict
If IsObject(Headers) Then
Headers.RemoveAll
Set Headers = Nothing
End If
End Sub
Public Sub Initialize
'set constant values
classname = "RSSContentFeed"
eBayAPIURL = "https://api.ebay.com/ws/api.dll"
eBayAPISandboxURL = "https://api.sandbox.ebay.com/ws/api.dll"
imgBuyItNow = "http://pics.ebaystatic.com/aw/pics/promo/holiday/buyItNow_15x54.gif"
'set object vars
xml_URL = ""
xml_data = ""
StrCachePath = ""
icacheDays = 1
iMaxResults = 15
'clear result vars
Set Headers = Createobject("Scripting.Dictionary")
Clear()
End Sub
'+---------------------------------------------+
Public Sub Clear
'Clear search variables
iTotalResults =0
bFromcache = false
Strlink = ""
Strtitle = ""
Strdescription = ""
'channel image
imgTitle = ""
imgUrl = ""
imgLink = ""
imgWidth = 0
imgHeight = 0
eBayTime = ""
ReDim Results(1)
ReDim Links(1)
ReDim Titles(1)
ReDim Descriptions(1)
ReDim PubDates(1)
ReDim Images(1)
ReDim Ids(1)
End Sub
'+---------------------------------------------+
'Public Properties - Readonly
'show the copyright info
Public Property Get Version
Version = "XML RSS Content Feed VBScript Class Version 1.0 " & VbCrLf & _
"© 2004 www.tele-pro.co.uk"
End Property
Public Property Get TotalResults
TotalResults = iTotalResults
End Property
Public Property Get CacheCount
CacheCount = CacheContentCount(StrCachePath)
End Property
Public Property Get Fromcache
Fromcache= (bFromcache = true)
End Property
Public Property Get ChannelLink
ChannelLink= Trim(Strlink)
End Property
Public Property Get ChannelTitle
ChannelTitle= Trim(Strtitle)
End Property
Public Property Get ChannelDescription
ChannelDescription = Trim(Strdescription)
End Property
Public Property Get ChannelImgURL
ChannelImgURL = Trim(imgURL)
End Property
Public Property Get ChannelImgTitle
ChannelImgTitle = Trim(imgTitle)
End Property
Public Property Get ChannelImgLink
ChannelImgLink = Trim(imgLink)
End Property
Public Property Get ChannelImgWidth
ChannelImgWidth = CLNG(imgWidth)
End Property
Public Property Get ChannelImgHeight
ChannelImgHeight = CLNG(imgHeight)
End Property
Public Property Get ResultsXML
ResultsXML = Trim(strResultsXML)
End Property
Public Property Get RSSVersion
RSSVersion = Trim(strRSSVersion)
End Property
'+---------------------------------------------+
'Public Properties - settable
'show the xml_URL
Public Property Get ContentURL
ContentURL = Trim(xml_URL)
End Property
'set the xml_URL
Public Property Let ContentURL(ByVal vContentURL)
vContentURL = Trim(vContentURL)
'add protocol if necessary
If inStr(LCASE(vContentURL), "<A href="http://")=0">http://")=0 Then
vContentURL = "http://" & vContentURL
End if
xml_URL = Trim(vContentURL)
End Property
Public Property Get PostData
PostData = Trim(xml_data)
End Property
Public Property Let PostData(sxml_data)
xml_data = Trim(sxml_data)
End Property
Public Property Get Cache
Cache = Trim(StrCachePath)
End Property
Public Property Let Cache(ByVal sCache)
StrCachePath = ""
If Trim(sCache)<>"" Then
If Not DExists(sCache) Then
ErrRaise "SetCache" , "Cache folder does not exist "
Else
'rem last slash
If (Mid(sCache, LEN(sCache), 1) = "\") Then
sCache = Mid(sCache, 1, LEN(sCache)-1)
End If
'add slash
StrCachePath = Trim(sCache) & "\"
End If
End If
End Property
Public Property Get CacheDays
CacheDays = CLNG(iCacheDays)
End Property
Public Property Let CacheDays(iDays)
iCacheDays = CLNG(iDays)
End Property
Public Property Get MaxResults
MaxResults = CLNG(iMaxResults)
End Property
Public Property Let MaxResults(vMaxResults)
iMaxResults = CLNG(vMaxResults)
End Property
'+---------------------------------------------+
'Public Functions
'Delete items in Cache
Public FUNCTION DeleteCache()
If (Trim(StrCachePath)<>"") Then
DeleteCache = DeleteCacheContent(StrCachePath, icacheDays)
End If
End FUNCTION
'add header for http request
Public FUNCTION AddHeader(str_hdr, str_val)
'add header to dict for http request
If Not (Headers.Exists(Trim(str_hdr))) Then
Headers.Add Trim(str_hdr), Trim(str_val)
Else
Headers(str_hdr) = Trim(str_val)
End If
End FUNCTION
'transform xml with xsl
Public FUNCTION Transform(str_xslt)
If Trim(StrResultsXML)="" Then Exit Function
If Trim(str_xslt)="" Then Exit Function
'Load XML
Dim x
set x = CreateObject("MSXML2.DOMDocument")
x.async = false
x.setProperty "ServerHTTPRequest", True
'path or url?
If (inStr(str_xslt, "http")=1) Then 'url
Dim tmpStr
tmpStr = getResults(str_xslt)
x.LoadXML(tmpStr)
Else
If (inStr(str_xslt, "\")=0) Then 'needs mapping
str_xslt = Server.MapPath(str_xslt)
x.Load(str_xslt)
End if
End if
x.resolveExternals = False
If (x.parseError.errorCode <> 0) Then
ErrRaise "Transform", "XML error: " & x.parseError.reason
EXIT FUNCTION
End If
str_xslt = x.xml
Transform = TransformXML(StrResultsXML, str_xslt)
End FUNCTION
'retrieve the value of a node
Public FUNCTION XMLValue(str_node)
If Trim(StrResultsXML)="" Then Exit Function
XMLValue = GetNodeText(str_node, StrResultsXML)
End FUNCTION
'construct amazon rss url and call getrss function
Public Function GetAmazonRSS(t, devt, kwd, mode, bcm)
'check
If Trim(t) = "" Then
ErrRaise "GetAmazonRSS", "Associate tag must be set"
Exit Function
End if
If Trim(devt) = "" Then
ErrRaise "GetAmazonRSS", "Developer token must be set"
Exit Function
End if
If Trim(kwd) = "" Then
ErrRaise "GetAmazonRSS", "KeywordSearch token must be set"
Exit Function
End if
If Trim(mode) = "" Then
mode = "books"
End if
'set amazon vals
xml_url = "http://xml-na.amznxslt.com/onca/xml3" & _
"?t=" & Trim(t) & _
"&dev-t=" &Trim(devt) & _
"&KeywordSearch=" & Trim(kwd) & _
"&mode=" & Trim(mode) & _
"&bcm=" & Trim(bcm) & _
"&type=lite" & _
"&page=1" & _
"&ct=text/xml" & _
"&sort=%2Bsalesrank" & _
"&f=http://www.tele-pro.co.uk/scripts/rss/amazon.xsl"
'"&f=http://xml.amazon.com/xsl/xml-rss091.xsl"
GetAmazonRSS = GetRSS()
End Function
'+---------------------------------------------+
'main function
Public Function GetRSS()
'clear search
Clear()
'check xml_URL
If Trim(xml_URL) = "" Then
ErrRaise "GetRSS", "ContentURL must be set"
End if
'get results from web or cache
Dim soapResults, soapResultsStd
soapResults = getResults(xml_URL)
'Dump the results into an XML document.
Dim Res
Set Res = CreateObject("MSXML2.DOMDocument")
Res.async = false
'set the global xml string
StrResultsXML = Trim(soapResults)
soapResultsStd = DeSensitize(soapResults)
Res.setProperty "ServerHTTPRequest", True
Res.loadXML soapResultsStd
Res.resolveExternals = False
If (Res.parseError.errorCode <> 0) Then
ErrRaise "GetRSS", "XML error: " & Res.parseError.reason
EXIT FUNCTION
End If
'set the global xml string to the xml formatted string
If Trim(soapResultsStd) = Trim(soapResults) Then
StrResultsXML = Trim(Res.XML)
End If
Dim Node, Nodes
'---------------------------------------------------------
'get RSS Version
StrRSSVersion = ""
Set Nodes = Res.selectNodes("//rss")
For Each Node In Nodes
on error resume next
strRSSVersion = Node.getAttribute("version")
on error Goto 0
Next
if (Trim(strRSSVersion)="") Then
Set Nodes = Res.selectNodes("//eBay")
For Each Node In Nodes
strRSSVersion = "eBay"
Next
end if
if (Trim(strRSSVersion)="") Then
Set Nodes = Res.selectNodes("//rdf:RDF")
For Each Node In Nodes
on error resume next
strRSSVersion = Node.getAttribute("xmlns")
If Trim(strRSSVersion) = "http://purl.org/rss/1.0/" Then
strRSSVersion = "1.0"
End If
on error Goto 0
Next
end if
if (Trim(strRSSVersion)="eBay") Then
Set Nodes = Res.selectNodes("//eBayTime")
For Each Node In Nodes
eBayTime = Node.Text
Next
end if
'---------------------------------------------------------
'set the size of arrays to the max results
Dim c
c=0
'get the size
Set Nodes = Res.selectNodes("//item")
For Each Node In Nodes
If (c<iMaxResults) Then
c = c + 1
End If
Next
'set the size
ReDim Results(c-1)
ReDim Links(c-1)
ReDim Titles(c-1)
ReDim Descriptions(c-1)
ReDim PubDates(c-1)
ReDim Images(c-1)
ReDim Ids(c-1)
'get item content
'declare results strings
Dim res_URL
Dim res_title
Dim res_desc
Dim res_date
Dim res_img
Dim res_id
'ebay
Dim CurrencyId, CurrentPrice, BidCount
'Parse the XML document.
c=0
For Each Node In Nodes
If (c<iMaxResults) Then
'clear the strings
res_URL = ""
res_title = ""
res_desc = ""
res_date = ""
res_img = ""
res_id = ""
CurrencyId = ""
CurrentPrice = ""
BidCount = ""
'retrieve the values
on error resume next
res_URL = Trim(Node.selectSingleNode("link").Text)
res_title = Trim(Node.selectSingleNode("title").Text)
res_desc = Trim(Node.selectSingleNode("description").XML)
'amazon from custom xsl
res_img = Trim(Node.selectSingleNode("imgS").Text)
res_id = Trim(Node.selectSingleNode("Asin").Text)
on error goto 0
'or it might be a dc:description tag
If (Trim(res_desc)="") Then
on error resume next
res_desc = Trim(Node.selectSingleNode("dc:description").XML)
on error goto 0
End If
res_desc = Replace(res_desc, "<description>", "")
res_desc = Replace(res_desc, "</description>", "")
'or it might be ebay
If (strRSSVersion = "eBay") Then
If (Trim(res_desc)="") Then
'get ebay data
on error resume next
CurrencyId = Trim(Node.selectSingleNode("CurrencyId").Text)
CurrentPrice = Trim(Node.selectSingleNode("CurrentPrice").Text)
BidCount = Trim( Node.selectSingleNode("BidCount").Text)
res_img = Trim(Node.selectSingleNode("ItemProperties//GalleryURL").Text)
res_id = Trim( Node.selectSingleNode("Id").Text)
on error goto 0
res_desc = res_desc & "<b>"
res_desc = res_desc & eBayCurrencySymbolFromID(CurrencyId)
res_desc = res_desc & Trim(CurrentPrice) & "</b> ("
res_desc = res_desc & Trim(BidCount) & " bids) " & VbCrLf
'construct description
on error resume next
If Trim(Node.selectSingleNode("ItemProperties//BuyItNow").Text)="1" Then
res_desc = res_desc & " <a href="""
res_desc = res_desc & res_URL
res_desc = res_desc & """><img align=""absmiddle"" border=""0"" src="""
res_desc = res_desc & imgBuyItNow
res_desc = res_desc & """ alt=""Buy It Now""></a>" & VbCrLf
End If
on error goto 0
'ItemProperties//Featured
'ItemProperties//New
'ItemProperties//IsFixedPrice
'ItemProperties//Gift
'ItemProperties//CharityItem
End If
End If '(strRSSVersion = "eBay")
'optional tags
on error resume next
res_date = Node.selectSingleNode("pubDate").Text
'ebay
If (Trim(res_date)="") Then
res_date = Node.selectSingleNode("EndTime").Text
End If
on error goto 0
if Trim(res_URL)<>"" Or _
Trim(res_title)<>"" Or _
Trim(res_desc)<>"" then
'its a result, add to array
Results(c) = c
Links(c) = res_URL
Titles(c) = res_title
Descriptions(c) = res_desc
PubDates(c) = res_date
Images(c) = res_img
Ids(c) = res_id
c=c+1 'inc counter
End If
End If
Next
'---------------------------------------------------------
'get channel content
Set Nodes = Res.selectNodes("//channel")
For Each Node In Nodes
on error resume next
Strlink = Node.selectSingleNode("link").Text
Strtitle = Node.selectSingleNode("title").Text
Strdescription = Node.selectSingleNode("description").Text
on error Goto 0
Next
'get image
Set Nodes = Res.selectNodes("//image")
For Each Node In Nodes
on error resume next
imgTitle = Node.selectSingleNode("title").Text
imgUrl = Node.selectSingleNode("url").Text
imgLink = Node.selectSingleNode("link").Text
imgWidth = Node.selectSingleNode("width").Text
imgHeight = Node.selectSingleNode("height").Text
on error Goto 0
Next
'release objects
Set Nodes = Nothing
Set Res = Nothing
'return count
iTotalResults = c
GetRSS = c
End Function
Private Function DeSensitize(Istr)
Dim str
str = Istr
str = Replace(str, "<Item>", "<item>", 1, -1, 1)
str = Replace(str, "<Link>", "<link>", 1, -1, 1)
str = Replace(str, "<Title>", "<title>", 1, -1, 1)
str = Replace(str, "</Item>", "</item>", 1, -1, 1)
str = Replace(str, "</Link>", "</link>", 1, -1, 1)
str = Replace(str, "</Title>", "</title>", 1, -1, 1)
DeSensitize = str
End Function
Public Function ItemHTML(iNumber)
Dim r_URL, r_title, r_description, r_pubdate
If (iTotalResults=0) Then
ErrRaise "ItemHTML", "There are no items"
Exit Function
End If
If (iNumber>=iTotalResults) Then
ErrRaise "ItemHTML", "Item index out of bounds"
Exit Function
End If
r_URL = Links(iNumber)
r_title= Titles(iNumber)
r_description = Descriptions(iNumber)
r_pubdate = PubDates(iNumber)
ItemHTML = Trim(FormatResult(r_URL, r_title, r_description, r_pubdate))
End Function
Private Function FormatResult(h, t, d, p)
Dim str
str = ""
str = str & "<b><a href=""" & h & """>" & t & "</a></b> <br/> " & VbCrLF
If (Trim(d) <> "") Then str = str & Shorten(d, 25, "...") & "<br/>" & VbCrLF
str = str & "<a href=""" & h & """>" & h & "</a>" & VbCrLF
If (Trim(p) <> "") Then str = str & "<br/>" & p & VbCrLF
FormatResult= Trim(str)
End Function
'+---------------------------------------------+
'Private Functions
Private Function ErrRaise(f, e)
Err.Raise vbObjectError+1001, classname, f & ": " & e
Response.End
End Function
Private Function GetXMLResults(q)
GetXMLResults = XmlHttp( (q), xml_data, Headers)
'Server.URLEncode
End Function
'get results from cache or from web
Private FUNCTION qCheckSum(d)
'quick checksum
Dim chks
chks = 0
Dim x
For x = 1 To LEN(d)
chks = chks + ( (ASC(Mid(d, x, 1))) * (x Mod 255) )
Next
qCheckSum = CLNG(chks)
End Function
'get results from cache or from web
Private FUNCTION getResults(q)
Dim res, a
a = CacheFileName(q & xml_data)
res = ""
If (Trim(StrCachePath)<>"") Then res = ReadFile(a)
If (Trim(res) = "") Then
res = getXMLResults(q)
'after many problems passing string straight back
'writing and reading back solved the problem
Dim b
b = Server.MapPath("_rss_content_feed_class_1_tmp.txt")
Call DelFile(b)
Call Write2File(b, res)
res = ReadFile(b)
Call DelFile(b)
If (Trim(StrCachePath)<>"") Then Call Write2File(a, res)
bFromcache = False
Else
bFromcache = True
End if
getResults = res
END FUNCTION
Private FUNCTION CacheFileName(n)
Dim cn
Dim cd
cn = qCheckSum(n)
cd = DomainFromUrl(n)
cn = StrCachePath & cd & "~" & cn & ".xml"
CacheFileName = cn
End FUNCTION
Private Function DomainFromUrl(sText)
Dim nIndex
If (LCase(Left(sText, 7))) = "http://" Then sText = Mid(sText, 8)
If LCase(Left(sText, 8 )) = "https://" Then sText = Mid(sText, 9)
nIndex = InStr(sText, "/")
If (nIndex > 0) Then sText = Left(sText, nIndex - 1)
DomainFromUrl = sText
End Function
Private FUNCTION CacheContentCount(cache)
CacheContentCount = 0
If Trim(cache)="" Then Exit FUNCTION
If Not DExists(cache) Then Exit FUNCTION
CacheContentCount = CLNG(FolderCount(cache))
End FUNCTION
Private FUNCTION DeleteCacheContent(cache, age)
If Trim(cache)="" Then Exit FUNCTION
If Not DExists(cache) Then Exit FUNCTION
'count cache
Dim a
a = CacheContentCount(cache)
Dim fs
Set fs = Createobject("Scripting.FileSystemobject")
Dim oFolder
Set oFolder = fs.GetFolder(cache)
Dim oFile
For Each oFile in oFolder.Files
If (age <= (Int(Now() - oFile.DateLastModified))) Then
oFile.Delete True
End If
Next
Set fs = Nothing
Set oFolder = Nothing
'count cache
a = (CLNG(a) - CLNG(CacheContentCount(cache)))
DeleteCacheContent = CLNG(a)
END FUNCTION
'+---------------------------------------------+
'Generic
'Retrieve response and return HTML response body
Public Function XmlHttp(xAction, data, hdrs)
Dim HTTP, Raw
Set Http = CreateObject("MSXML2.ServerXMLHTTP")
'MSXML2.XMLHTTP
if (Trim(data) <> "") then
Http.open "POST", xAction, FALSE
'add post hdr
if (inStr(data, "<?xml")=1) then
Http.setRequestHeader "Content-Type","text/xml"
else
Http.setRequestHeader "Content-Type","application/x-www-form-urlencoded"
end if
Http.setRequestHeader "Content-Length",Len(data)
else
Http.open "GET", xAction, FALSE
end if
'get headers from the dict
If IsObject(hdrs) Then
Dim hdr
For Each hdr in hdrs
Http.setRequestHeader Trim(hdr), Trim(hdrs(hdr))
Next
End If
Http.send (data)
Raw = http.responseText
Set Http = Nothing
XmlHttp = Raw
End Function
Private Function DExists(d) 'true if file exists
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
DExists = fso.FolderExists(d)
Set fso = Nothing
End Function
Private Function FExists(d) 'true if file exists
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
FExists = fso.FileExists(d)
Set fso = Nothing
End Function
Private Function DelFile(f)
If Trim(f)="" Then Exit FUNCTION
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
if FExists(f) then fso.DeleteFile(f)
Set fso = Nothing
End Function
Private FUNCTION FolderCount(dir)
If Trim(dir)="" Then Exit FUNCTION
Dim fs
Set fs = Createobject("Scripting.FileSystemobject")
Dim oFolder
Set oFolder = fs.GetFolder(dir)
FolderCount = oFolder.Files.Count
Set fs = Nothing
Set oFolder = Nothing
END FUNCTION
Private Function Write2File(afile,bstr)
Dim wObj, wText
if afile="" Then EXIT FUNCTION
Set wObj = CreateObject("Scripting.FileSystemObject")
Set wtext = wObj.OpenTextFile(afile, 8, True)
Dim nCharPos, sChar
For nCharPos = 1 To Len(bstr)
sChar = Mid(bstr, nCharPos, 1)
On Error resume next '<-- **** Error handing starts ****
wtext.Write sChar
On Error Goto 0 '<-- ***** Error handing ends *****
Next
wtext.Close()
Set wtext = Nothing
Set wObj = Nothing
End Function
Private Function ReadFile(fpath)
Dim fObj, ftext, fileStr
Set fObj = CreateObject("Scripting.FileSystemObject")
If fObj.FileExists(fpath) Then
Set ftext = fObj.OpenTextFile(fpath, 1, FALSE)
fileStr =""
WHILE NOT ftext.AtEndOfStream
fileStr = fileStr & ftext.ReadLine & chr(13)
WEND
ftext.Close
else
fileStr = ""
End if
ReadFile= fileStr
End Function
Public Function Shorten(sentence, wds, addifShortened)
Dim ret
ret = Trim(sentence)
Dim ar
ReDim ar(1)
ar = Split(ret)
ret = ""
Dim c
For c = 0 To UBOUND(ar)
If c < wds Then
ret = ret & " " & ar(c)
End If
Next
ret = Trim(ret)
If Trim(ret) <> Trim(sentence) Then
ret = ret & addifShortened
End If
Shorten = ret
End Function
Private FUNCTION GetNodeText(str_node, str_xml)
Dim tmpString
tmpString = Trim(str_xml)
'declare an xml object to work with
dim xmldoc
set xmldoc = CreateObject("MSXML2.DOMDocument")
xmldoc.async = False
xmldoc.setProperty "ServerHTTPRequest", True
'attempt to load from str
xmldoc.LoadXML(tmpString)
xmldoc.resolveExternals = False
If (xmldoc is Nothing) Or (Len(xmldoc.text) = 0) then
'error
EXIT FUNCTION
End If
'attempt to get Node Text
Dim currNode
tmpString = ""
Set currNode = xmlDoc.documentElement.selectSingleNode(str_node)
On Error Resume next
tmpString = Trim(currNode.Text)
On Error Goto 0
Set currNode = Nothing
GetNodeText = Trim(tmpString)
END FUNCTION
'Transform XML with XSL string
Private FUNCTION TransformXML(xml, xslt)
'Load XML
Dim x
set x = CreateObject("MSXML2.DOMDocument")
x.async = false
x.setProperty "ServerHTTPRequest", True
x.LoadXML(xml)
x.resolveExternals = False
If (x.parseError.errorCode <> 0) Then
ErrRaise "TransformXML", "XML Parse error: " & x.parseError.reason
EXIT FUNCTION
End If
'Load XSL
Dim xsl
set xsl = CreateObject("MSXML2.DOMDocument")
xsl.async = false
xsl.LoadXML(xslt)
If (xsl.parseError.errorCode <> 0) Then
ErrRaise "TransformXML", "XSL Parse error: " & xsl.parseError.reason
EXIT FUNCTION
End If
'Transform file
TransformXML = (x.transformNode(xsl))
END FUNCTION
'get the ebay xml api response
Public FUNCTION GeteBayRSS(eBayVerb, eBayToken, eBayParam1, ebaySiteId, bProduction)
' eBayVerb: GetSearchResults | GetSellerList | GetCategoryListings
' eBayToken: http://developer.ebay.com/tokentool/Credentials.aspx
' eBayParam1: Search query, Seller Id or Category Id
' ebaySiteId: ebay SiteId
' bProduction: Production or Sandbox
If Trim(eBayVerb) = "" Then
ErrRaise "GeteBayRSS", "eBayVerb must be set"
Exit Function
End if
If Trim(eBayToken) = "" Then
ErrRaise "GeteBayRSS", "eBayToken must be set"
Exit Function
End if
If Trim(ebaySiteId) = "" Then
ebaySiteId = "0"
End if
bProduction = (bProduction=True)
Headers.RemoveAll()
Headers.Add "X-EBAY-API-COMPATIBILITY-LEVEL", "305"
Headers.Add "X-EBAY-API-DETAIL-LEVEL", "0"
Headers.Add "X-EBAY-API-CALL-NAME", eBayVerb
Headers.Add "X-EBAY-API-SITEID", ebaySiteId
If (bProduction) then
xml_URL = eBayAPIURL
Else
xml_URL = eBayAPISandboxURL
End If
xml_data = eBayCreateRequestXML(eBayVerb, eBayToken, eBayParam1, ebaySiteId, iMaxResults)
GeteBayRSS = GetRSS()
END FUNCTION
'construct the ebay soap request xml
Private FUNCTION eBayCreateRequestXML(UserVerb, UserToken, qry, SiteId, UserMaxResults)
Dim xml
xml = ""
xml = xml & "<?xml version=""1.0"" encoding=""iso-8859-1""?>" & VbCrLf
xml = xml & "<request xmlns=""urn:eBayAPIschema"">"
xml = xml & "<RequestToken>" & UserToken & "</RequestToken>" & VbCrLf
xml = xml & "<SiteId>" & SiteId & "</SiteId>" & VbCrLf
xml = xml & "<DetailLevel>0</DetailLevel>" & VbCrLf
xml = xml & "<ErrorLevel>1</ErrorLevel>" & VbCrLf
xml = xml & "<MaxResults>" & UserMaxResults & "</MaxResults>" & VbCrLf
xml = xml & "<Verb>" & UserVerb & "</Verb>" & VbCrLf
SELECT Case LCASE(UserVerb)
Case "getsearchresults":
xml = xml & "<Query>" & qry & "</Query>" & VbCrLf
Case "getsellerlist":
xml = xml & "<UserId>" & qry & "</UserId>" & VbCrLf
xml = xml & "<ItemsPerPage>" & UserMaxResults & "</ItemsPerPage>" & VbCrLf
xml = xml & "<PageNumber>1</PageNumber>" & VbCrLf
xml = xml & "<EndTimeFrom>2002-01-01 00:00:01</EndTimeFrom>" & VbCrLf
xml = xml & "<EndTimeTo>2020-01-01 00:00:01</EndTimeTo>" & VbCrLf
Case "getcategorylistings":
xml = xml & "<CategoryId>" & qry & "</CategoryId>" & VbCrLf
END SELECT
xml = xml & "</request>" & VbCrLf
eBayCreateRequestXML = Trim(xml)
END FUNCTION
Public FUNCTION eBayTimeLeft(eBayEndTime)
Dim eBayOfficialTime
eBayOfficialTime = eBayTime
If eBayOfficialTime="" Then Exit Function
eBayOfficialTime = Replace(eBayOfficialTime, "GMT", "")
eBayEndTime = Replace(eBayEndTime, "GMT", "")
Dim TimeLeft, TimeLeftD, TimeLeftH, TimeLeftM
TimeLeft = DateDiff("n", eBayOfficialTime, eBayEndTime)
If TimeLeft<0 Then
eBayTimeLeft = "Ended "
Else
TimeLeftD = Int(TimeLeft/( 60 * 24))
TimeLeftH = Int((TimeLeft - (TimeLeftD * 60 * 24)) / 60)
TimeLeftM = Int(TimeLeft - (TimeLeftD * 60 * 24) - (TimeLeftH * 60) )
eBayTimeLeft = TimeLeftD & "d " & TimeLeftH & "h " & TimeLeftM & "m "
End If
END FUNCTION
Private FUNCTION eBayCurrencySymbolFromID(sym)
Dim res, s
res= ""
s = trim(Sym)
If (s= "") Then Exit FUNCTION
If Not IsNumeric(s) Then Exit FUNCTION
s = CLNG(s)
SELECT CASE (S)
case 1: res="$"
case 2: res="C $"
case 3: res="GBP"
case 5: res="AU $"
case 7: res="EUR"
case 8: res="FRF"
case 31: res="NLG"
case 13: res="CHF"
case 41: res="NT $"
END SELECT
eBayCurrencySymbolFromID = Trim(res)
END FUNCTION
End Class
%>
Here is the examle how to use that class.
<%= getXML("file.xml","file.xsd") %>
file.xsd is the style in which the xhm should be transformed to html.
This class also deals with Ebay API.
Be a part of the DaniWeb community
We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.