Class ::xowiki::RSS-client
::xowiki::RSS-client
create ... \
[ -url url ]
Class Relations
- class: ::xotcl::Class
![[i]](/resources/acs-subsite/ZoomIn16.gif)
- superclass: ::xotcl::Object
![[i]](/resources/acs-subsite/ZoomIn16.gif)
::xotcl::Class create ::xowiki::RSS-client \
-superclass ::xotcl::Object
Methods (to be applied on the object)
getRSSVersion (scripted)
set root [$doc documentElement]
switch [$root nodeName] {
rss {
if {[$root hasAttribute version]} {
return [$root getAttribute version]
}
return 0.92
}
rdf:RDF {
return 1.0
}
default {
return 0
}
}node_text (scripted)
set n [$node selectNode $xpath]
if {$n ne ""} {
return [$n nodeValue]
} else {
return ""
}node_uri (scripted)
set n [$node selectNode $xpath]
if {$n ne ""} {
return [string map { & %26 } [$n nodeValue]]
} else {
return ""
}
Methods (to be applied on instances)
channel (scripted)
return [self]::channel
init (scripted)
set XML [:load]
if {$XML ne ""} {
:parse $XML
}items (scripted)
return ${:items}load (scripted)
set request [util::http::get -url [:url]]
set status [dict get $request status]
set data [expr {[dict exists $request page] ? [dict get $request page] : ""}]
if {$status != 200} {
set :errorMessage "$status - $data"
}
return $data
parse (scripted)
set doc [ dom parse -- $data ]
set root [ $doc documentElement ]
switch [RSS-client getRSSVersion $doc] {
0.91 - 0.92 - 0.93 - 2.0 {
array set :xpath {
title {/rss/channel/title/text()}
link {/rss/channel/link/text()}
imgNode {/rss/channel/image/title}
imgTitle {/rss/channel/image/title/text()}
imgLink {/rss/channel/image/url/text()}
imgWidth {/rss/channel/image/width/text()}
imgHeight {/rss/channel/image/height/text()}
stories {/rss/channel/item}
itemTitle {title/text()}
itemLink {link/text()}
itemPubDate {pubDate/text()}
itemDesc {description/text()}
}
}
1.0 {
array set :xpath {
title {/rdf:RDF/*[local-name()='channel']/*[local-name()='title']/text()}
link {/rdf:RDF/*[local-name()='channel']/*[local-name()='link']/text()}
imgNode {/rdf:RDF/*[local-name()='image']}
imgTitle {/rdf:RDF/*[local-name()='image']/*[local-name()='title']/text()}
imgLink {/rdf:RDF/*[local-name()='image']/*[local-name()='url']/text()}
imgWidth {/rdf:RDF/*[local-name()='image']/*[local-name()='width']/text()}
imgHeight {/rdf:RDF/*[local-name()='image']/*[local-name()='height']/text()}
stories {/rdf:RDF/*[local-name()='item']}
itemTitle {*[local-name()='title']/text()}
itemLink {*[local-name()='link']/text()}
itemPubDate {*[local-name()='pubDate']/text()}
itemDesc {*[local-name()='description']/text()}
}
}
default {
set :errorMessage "Unsupported RSS schema [RSS-client getRSSVersion $doc]"
return
}
}
set cN [ $root child 1 channel ]
set channel [::xowiki::RSS-client::channel create [self]::channel -root $cN]
set :items {}
set stories [$root selectNodes [set :xpath(stories)] ]
foreach iN $stories {
lappend :items [::xowiki::RSS-client::item new -childof [self] -node $iN ]
}url (setter)
xpath (scripted)
return [set :xpath($key)]