alias rss {
var %error, %pattern https?:\/\/(?:www\.)?([-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6})\b([-a-zA-Z0-9()@:%_\+.~#?&\/\/=]*)
if (!$regex($1,%pattern)) %error = Invalid URL!
else {
var %t $ticks, %itemcol itemcol. $+ %t, %com rss. $+ %t, %com2 rss2. $+ %t, %com3 rss3. $+ %t, %url $1
.comopen %com MSXML2.DOMDocument.6.0
if ((!$com(%com)) || ($comerr)) %error = Unable to create an instance of MSXML2.DOMDocument.6.0
elseif ((!$com(%com, async, 4, bool, false)) || ($comerr)) %error = Unable to set async property
elseif ((!$com(%com, load, 1, bstr*, %url)) || ($comerr)) %error = Unable to load XML from: %url
elseif ((!$com(%com, selectnodes, 1, bstr*, /rss/channel/item, dispatch* %itemcol)) || ($comerr)) %error = Unable to select nodes /rss/channel/item
else {
var %items $comval(%itemcol,0), %item 1
if (%items) {
while (%item <= %items) {
if ((!$com(%itemcol, item, 1, uint, %item, dispatch* %com2)) || ($comerr)) %error = Cannot dispatch XML for individual item to new object
if ($com(%com2)) {
.comclose %com2 $com(%com2, childnodes, 3, dispatch* %com3)
if ($com(%com3)) {
var %children $comval(%com3,0), %child 1
while (%child <= %children) {
if ($comval(%com3,%child,tagName) == title) echo -ag $v1 : $comval(%com3,%child,text)
if ($comval(%com3,%child,tagName) == link) echo -ag $v1 : $comval(%com3,%child,text)
if ($comval(%com3,%child,tagName) == description) echo -ag $v1 : $comval(%com3,%child,text)
if ($comval(%com3,%child,tagName) == pubDate) echo -ag $v1 : $comval(%com3,%child,text)
inc %child
}
.comclose %com3
}
}
inc %item
}
}
else %error = No news items found.
}
}
; Handle errors
:error
if ($error) var %error $v1 | reseterror
; Close coms
if ($com(%com)) .comclose %com
if ($com(%com2)) .comclose %com2
if ($com(%com3)) .comclose %com3
if ($com(%itemcol)) .comclose %itemcol
; Show error
if (%error) echo -ag Error: $v1
}