<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-gb">
	<link rel="self" type="application/atom+xml" href="https://forum.eggheads.org/app.php/feed/topic/10454" />

	<title>egghelp/eggheads community</title>
	<subtitle>Discussion of eggdrop bots, shell accounts and tcl scripts.</subtitle>
	<link href="https://forum.eggheads.org/index.php" />
	<updated>2005-09-06T16:33:57-04:00</updated>

	<author><name><![CDATA[egghelp/eggheads community]]></name></author>
	<id>https://forum.eggheads.org/app.php/feed/topic/10454</id>

		<entry>
		<author><name><![CDATA[Tye]]></name></author>
		<updated>2005-09-06T16:33:57-04:00</updated>

		<published>2005-09-06T16:33:57-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=55368#p55368</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=55368#p55368"/>
		<title type="html"><![CDATA[RSSNews.tcl by perplexa. enable cdata , HELP !]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=55368#p55368"><![CDATA[
thx for your answer.<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=6689">Tye</a> — Tue Sep 06, 2005 4:33 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[Alchera]]></name></author>
		<updated>2005-09-05T20:36:57-04:00</updated>

		<published>2005-09-05T20:36:57-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=55328#p55328</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=55328#p55328"/>
		<title type="html"><![CDATA[RSSNews.tcl by perplexa. enable cdata , HELP !]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=55328#p55328"><![CDATA[
Contact the author &gt;&gt; #perpleXa on QuakeNet<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=3646">Alchera</a> — Mon Sep 05, 2005 8:36 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[demond]]></name></author>
		<updated>2005-09-05T18:13:19-04:00</updated>

		<published>2005-09-05T18:13:19-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=55323#p55323</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=55323#p55323"/>
		<title type="html"><![CDATA[RSSNews.tcl by perplexa. enable cdata , HELP !]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=55323#p55323"><![CDATA[
perplexa is not on these forums, his/her script is not supported here<br><br>supported is <a href="http://forum.egghelp.org/viewtopic.php?t=10271" class="postlink">RSS news by demond</a>, get it at <a href="http://demond.net/rssnews.tcl" class="postlink">http://demond.net/rssnews.tcl</a><p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=5056">demond</a> — Mon Sep 05, 2005 6:13 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[Tye]]></name></author>
		<updated>2005-09-05T17:55:18-04:00</updated>

		<published>2005-09-05T17:55:18-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=55321#p55321</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=55321#p55321"/>
		<title type="html"><![CDATA[RSSNews.tcl by perplexa. enable cdata , HELP !]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=55321#p55321"><![CDATA[
Hello all,<br><br><br>I use this version of the perplexa's script :<br> <div class="codebox"><p>Code: </p><pre><code>## $Id: rssnews.tcl,v 4.5.0251 2005/01/04 9:12PM perpleXa Exp $## -------------------------------------------------------------##        ___           ___           ___##       /\  \         /\  \         /\  \##      /::\  \       /::\  \       /::\  \##     /:/\:\  \     /:/\ \  \     /:/\ \  \##    /::\~\:\  \   _\:\~\ \  \   _\:\~\ \  \##   /:/\:\ \:\__\ /\ \:\ \ \__\ /\ \:\ \ \__\##   \/_|::\/:/  / \:\ \:\ \/__/ \:\ \:\ \/__/##      |:|::/  /   \:\ \:\__\    \:\ \:\__\##      |:|\/__/     \:\/:/  /     \:\/:/  /##      |:|  |        \::/  /       \::/  /##       \|__|         \/__/         \/__/ feed parser#### http://perpleXa.net | http://dev.perpleXa.net## #perpleXa on QuakeNet## (C) 2004#### This script is approved to parse all valid RSS feeds.## If You discover any issues regarding installing or running## this script so feel free to contact me on QuakeNet.#### Enjoy.###### FAQ:#### Q. What are these weird characters in the layout?## A. You can use &lt;upfirstchar text&gt;, &lt;id&gt;, &lt;publisher&gt;, &lt;news&gt;, &lt;link&gt;,##    as well as control codes, to change the design to something you'd like##    Available colors and control codes are:##     \002 bold##     \003 [00-15] colors##     \017 reset control codes##     \026 reverse##     \037 underline#### Q. How do I control this script?## A. There isn't much to say, just type $news &lt;feed&gt; in a channel or /msg &lt;bot&gt; news &lt;feed&gt;##    All the other stuff works automatically. ie. When you set your feed like "set feed(ESReality) { ... }"##    you have to type $news ESReality or /msg &lt;bot&gt; news ESReality to receive news from that feed.#### Q. How do I setup my own feeds?## A. Look at the examples below, you should find all neccessary information in the first one.#### Q. Where can I find more feeds?## A. Try out http://www.feedroom.com and http://www.syndic8.com/#### Q. I've discovered a bug, what should I do?## A. Write an email, use the contact field on my website or contact me on #perpleXa (QuakeNet)#### -------------------------------------------------------------## Don't touch this line!array unset feed#### -------------------------------------------------------------## ---- Setup --------------------------------------------------set feed(3DGamers) {  URL=http://www.3dgamers.com:80/feeds/netscape/3dgamers.rss   /* The location of the news, in format http://domain.com:port/file.xml (port value is optional). */  DATABASE=scripts/dbase/rssnews/.3dgamers                     /* The file where the news are saved. */  CHANNELS=#resistless #Nitro-Clan                             /* On which channels is the feed activated? Set to ALL for all channels. */  POSTNEWS=1                                                   /* Post news if there are new ones? */  POSTLIMIT=3                                                  /* max. posted news */  PUBLIMIT=3                                                   /* How many news are posted on pub triggers? */  MSGLIMIT=10                                                  /* How many news are posted on msg triggers? */  /* Thats the design used for automated output. */  POSTLAYOUT=\00300,14\[\00309\002!\002\00300\] \00300www.\002\003093D\00300gamers\002.com \[\00309\002!\002\00300\] &lt;news&gt; \[\00309\002!\002\00300\] &lt;link&gt; \[\00309\002!\002\00300\]\003  /* And this one is for use on trigger events. */  TRIGLAYOUT=\00300,14\[\00309\002!\002\00300\] \00300www.\002\003093D\00300gamers\002.com \[\00309\002!\002\00300\] &lt;news&gt; \[\00309\002!\002\00300\] &lt;link&gt; \[\00309\002!\002\00300\]\003}## ---- End of Setup -------------------------------------------## -------------------------------------------------------------if {[package vcompare [info tclversion] 8.4] &lt; 0} {  putlog "You don't have TCL 8.4, you have to upgrade to version 8.4 or higher to use [file tail [info script]]."  return;}package require httpnamespace eval rss {  variable protect 60  variable timeout 20  variable pubbind {$news}  variable msgbind {news}  variable v_major 4  variable v_minor 5  variable v_build 0251  variable version $v_major.$v_minor.$v_build  variable client "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7) Gecko/20040803 Firefox/0.9.3"  bind PUB -|- $pubbind [namespace current]::public  bind MSG -|- $msgbind [namespace current]::private  bind TIME -|- {?0 * * * *} [namespace current]::check  namespace export public private check}proc rss::check {args} {  global feed  variable client  variable timeout  putquick "PING :[clock seconds]" -next  foreach id [array names feed] {    set url "0"    set database "0"    set channels "0"    set postnews "1"    set postlimit "3"    set publimit "3"    set msglimit "10"    set postlayout {\00314(\00307&lt;publisher&gt;\00314)\00307 &lt;news&gt; \00314&lt;\00307&lt;link&gt;\00314&gt;\003}    foreach line [split $feed($id) \n] {      regsub -all -- {/\*.*?\*/} $line {} line      regexp -nocase -- {^\s*URL=(.+?)\s*$} $line tmp url      regexp -nocase -- {^\s*DATABASE=(.+?)\s*$} $line tmp database      regexp -nocase -- {^\s*CHANNELS=(.+?)\s*$} $line tmp channels      regexp -nocase -- {^\s*POSTNEWS=(.+?)\s*$} $line tmp postnews      regexp -nocase -- {^\s*POSTLIMIT=(.+?)\s*$} $line tmp postlimit      regexp -nocase -- {^\s*PUBLIMIT=(.+?)\s*$} $line tmp publimit      regexp -nocase -- {^\s*MSGLIMIT=(.+?)\s*$} $line tmp msglimit      regexp -nocase -- {^\s*POSTLAYOUT=(.+?)\s*$} $line tmp postlayout    }    if {($url == 0) || ($database == 0) || ($channels == 0)} {      putlog "RSS: Warning: Couldn't load configuration for the \[$id\] feed."      continue    }    if {$postnews == 0} {      continue    }    if {![file isdirectory [file dirname $database]]} {      file mkdir [file dirname $database]    }    set count 0    set data {}    http::config -useragent $client    catch {http::geturl $url -command "[namespace current]::check:data {$database} {$channels} {$postlimit} {$postlayout}" -timeout [expr $timeout * 1000]}  }}proc rss::check:data {database channels postlimit postlayout token} {  upvar 0 $token state  if {![string equal -nocase $state(status) "ok"]} {    return 0  }  set latestnews "iddqd"  if {[file exists $database]} {    set temp [open $database r+]    set latestnews [gets $temp]    if {[string length $latestnews] &lt;= 1} {      set latestnews "iddqd"    }    close $temp  }  set data [http::data $token]  http::cleanup $token  set publisher [publisher $data]  set data [parse $data]  set temp [open $database w+]  set postlayout [join $postlayout { }]  foreach {item} $data {    regsub -all -- {&lt;id&gt;} $postlayout [lindex $item 0] output    regsub -all -- {&lt;publisher&gt;} $output $publisher output    regsub -all -- {&lt;link&gt;} $output [lindex $item 1] output    regsub -all -- {&lt;news&gt;} $output [lindex $item 2] output    regsub -all -- {&lt;upfirstchar\s(.*?)&gt;} [clean $output] {[upfirstchar "\1"]} output    puts $temp [decode [subst $output]]  }  close $temp  set count 0  set temp [open $database r+]  while {![eof $temp]} {    gets $temp headline    if {([string equal -nocase $latestnews $headline]) || ([string equal -nocase $latestnews "iddqd"]) || ($count == $postlimit)} {      break    }    incr count    msg $channels $headline  }  close $temp}proc rss::news {target id type} {  global feed  variable client  variable timeout  if {$type == 2} {    set msgtype PRIVMSG  } else {    set msgtype NOTICE  }  set url "0"  set publimit "3"  set msglimit "10"  set triglayout "\00314\[\00307&lt;id&gt;\00314\]\00307 &lt;news&gt; \00314&lt;\00307&lt;link&gt;\00314&gt;\003"  foreach item [split $feed($id) \n] {    regsub -all -- {/\*.*?\*/} $item {} item    regexp -nocase -- {^\s*URL=(.+?)\s*$} $item tmp url    regexp -nocase -- {^\s*PUBLIMIT=(.+?)\s*$} $item tmp publimit    regexp -nocase -- {^\s*MSGLIMIT=(.+?)\s*$} $item tmp msglimit    regexp -nocase -- {^\s*TRIGLAYOUT=(.+?)\s*$} $item tmp triglayout  }  if {($url == 0)} {    putquick "$msgtype $target :Warning: Couldn't load configuration for the \[$id\] feed."    return 0  }  if {$type == 1} {    set limit $msglimit  } elseif {$type == 2} {    set limit $publimit  } else {    return 0  }  http::config -useragent $client  catch {http::geturl $url -timeout [expr $timeout * 1000]} token  if {[regexp -nocase -- {^couldn\'t\sopen\ssocket:\s+?(.*)$} $token tmp state(status)]} {    putquick "$msgtype $target :Warning: Couldn't connect to the \[$id\] feed ($state(status))."    return 0  }  upvar 0 $token state  if {![string equal -nocase $state(status) "ok"]} {    putquick "$msgtype $target :Warning: Couldn't connect to the \[$id\] feed (connection $state(status))."    return 0  }  set data [http::data $token]  http::cleanup $token  set publisher [publisher $data]  set data [parse $data]  set count 0  set triglayout [join $triglayout { }]  foreach {item} $data {    incr count    regsub -all -- {&lt;id&gt;} $triglayout [lindex $item 0] output    regsub -all -- {&lt;publisher&gt;} $output $publisher output    regsub -all -- {&lt;link&gt;} $output [lindex $item 1] output    regsub -all -- {&lt;news&gt;} $output [lindex $item 2] output    regsub -all -- {&lt;upfirstchar\s(.*?)&gt;} [clean $output] {[upfirstchar "\1"]} output    set output [decode [subst $output]]    if {$type == 2} {      if {[regexp -- {c} [getchanmode $target]]} {        set output [stripcodes c $output]      }    }    puthelp "$msgtype $target :$output"    if {($count == $limit)} {      break    }  }}proc rss::publisher {content} {  set publisher {n/a}  regsub -all -- {\n+|\s+|\t+} $content { } content  regsub -all -- {([\\&amp;])} $content {\\\1} content  regexp -nocase -- {&lt;title&gt;(.+?)&lt;/title&gt;} $content tmp publisher  return $publisher}proc rss::parse {content} {  regsub -all -- {\n+|\s+|\t+} $content { } content  regsub -all -- {([\\&amp;])} $content {\\\1} content  set item 0  set news ""  while {[regexp -nocase -- {&lt;item(\s[^&gt;]*?)?&gt;(.+?)&lt;/item&gt;} $content -&gt; &amp; value]} {    incr item    set title {n/a}    regexp -nocase -- {&lt;title&gt;(.+?)&lt;/title&gt;} $value -&gt; title    regexp -nocase -- {\&lt;\!\[CDATA\[(.*?)\]\]\&gt;} $title -&gt; title    set link {n/a}    regexp -nocase -- {&lt;link&gt;(.+?)&lt;/link&gt;} $value -&gt; link    regexp -nocase -- {\&lt;\!\[CDATA\[(.*?)\]\]\&gt;} $link -&gt; link    regsub -nocase -- {&lt;item.*?&gt;.+?&lt;/item&gt;} $content {} content    lappend news "$item {$link} {$title}"  }  return [lsort -integer -unique -index 0 $news]}proc rss::decode {content} {  if {![regexp -- &amp; $content]} {    return $content  }  set escapes {      \x20 " \x22 &amp; \x26 &amp;apos; \x27 – \x2D &lt; \x3C &gt; \x3E ˜ \x7E € \x80 ¡ \xA1    ¢ \xA2 £ \xA3 ¤ \xA4 ¥ \xA5 ¦ \xA6 § \xA7 ¨ \xA8 © \xA9 ª \xAA « \xAB    ¬ \xAC ­ \xAD ® \xAE &amp;hibar; \xAF ° \xB0 ± \xB1 ² \xB2 ³ \xB3 ´ \xB4 µ \xB5    ¶ \xB6 · \xB7 ¸ \xB8 ¹ \xB9 º \xBA » \xBB ¼ \xBC ½ \xBD ¾ \xBE ¿ \xBF    À \xC0 Á \xC1 Â \xC2 Ã \xC3 Ä \xC4 Å \xC5 Æ \xC6 Ç \xC7 È \xC8 É \xC9    Ê \xCA Ë \xCB Ì \xCC Í \xCD Î \xCE Ï \xCF Ð \xD0 Ñ \xD1 Ò \xD2 Ó \xD3    Ô \xD4 Õ \xD5 Ö \xD6 × \xD7 Ø \xD8 Ù \xD9 Ú \xDA Û \xDB Ü \xDC Ý \xDD    Þ \xDE ß \xDF à \xE0 á \xE1 â \xE2 ã \xE3 ä \xE4 å \xE5 æ \xE6 ç \xE7    è \xE8 é \xE9 ê \xEA ë \xEB ì \xEC í \xED î \xEE ï \xEF ð \xF0 ñ \xF1    ò \xF2 ó \xF3 ô \xF4 õ \xF5 ö \xF6 ÷ \xF7 ø \xF8 ù \xF9 ú \xFA û \xFB    ü \xFC ý \xFD þ \xFE ÿ \xFF  }  set content [string map $escapes $content]  regsub -all -- {&amp;[a-zA-Z]+?;} [clean $content] {?} content  regsub -all -- {&amp;#(\d{1,3});} $content {[format %c [scan \1 %d]]} content  return [subst $content]}proc rss::private {nickname hostname handle arguments} { global feed variable spam variable protect  set arguments [clean $arguments]  set spewfeed [lindex $arguments 0]  if {![validfeed $spewfeed 1]} {    putquick "NOTICE $nickname :Please supply a valid feed: [join [lsort -dictionary [array names feed]] ",\x20"]"    return 0  }  set spewfeed [validfeed $spewfeed 2]  if {([info exists spam(flood,$spewfeed,$hostname)])} {    set s [expr [clock seconds] - $spam(flood,$spewfeed,$hostname)]    if {$s &lt; $protect} {      putquick "NOTICE $nickname :Sorry - This trigger has recently been used. It will be unlocked in [expr $protect - $s] seconds."      return 0    }  }  set spam(flood,$spewfeed,$hostname) [clock seconds]  news $nickname $spewfeed 1}proc rss::public {nickname hostname handle channel arguments} { global feed variable spam variable protect  set arguments [clean $arguments]  set spewfeed [lindex $arguments 0]  if {![validfeed $spewfeed 1]} {    putquick "PRIVMSG $channel :Please supply a valid feed: [join [lsort -dictionary -unique [array names feed]] ",\x20"]"    return 0  }  set spewfeed [validfeed $spewfeed 2]  if {([info exists spam(flood,$spewfeed,$channel)]) &amp;&amp; (![isop $nickname $channel])} {    set s [expr [clock seconds] - $spam(flood,$spewfeed,$channel)]    if {$s &lt; $protect} {      putquick "PRIVMSG $channel :Sorry - This trigger has recently been used. It will be unlocked in [expr $protect - $s] seconds."      return 0    }  }  set spam(flood,$spewfeed,$channel) [clock seconds]  set channels 0  foreach item [split $feed($spewfeed) \n] {    regsub -all -- {/\*.*\*/} $item {} item    regexp -nocase -- {^\s*CHANNELS=(.+?)\s*$} $item tmp channels  }  if {([lsearch -exact [string tolower $channels] [string tolower $channel]] == -1) &amp;&amp; (![string equal -nocase $channels "ALL"])} {    putquick "PRIVMSG $channel :The \[$spewfeed\] feed is not available on this channel. ($channels)"    return 0  }  news $channel $spewfeed 2}proc rss::msg {channels headline} {  if {[string equal -nocase $channels "ALL"]} {    foreach channel [channels] {      if {[regexp -- {c} [getchanmode $channel]] &amp;&amp; [regexp -- {\003} $headline]} {        lappend nocolors $channel      } else {        lappend colors $channel      }    }  } else {    foreach channel [channels] {      if {[lsearch -exact [string tolower $channels] [string tolower $channel]] &gt;= 0} {        if {[regexp -- {c} [getchanmode $channel]] &amp;&amp; [regexp -- {\003} $headline]} {          lappend nocolors $channel        } else {          lappend colors $channel        }      }    }  }  if {[info exists nocolors]} {    putquick "PRIVMSG [join $nocolors {,}] :[stripcodes c $headline]"  }  if {[info exists colors]} {    putquick "PRIVMSG [join $colors {,}] :$headline"  }}proc rss::validfeed {keyword type} { global feed  foreach id [array names feed] {    if {[string equal -nocase $id $keyword]} {      switch -exact -- $type {        {1} {          return 1        }        {2} {          return $id        }      }    }  }  return 0}proc rss::upfirstchar {content} {  regsub -all -- {((^|\s)([a-z]))} [clean $content] {[string toupper "\1"]} content  return [subst $content]}proc rss::clean {string} {  regsub -all -- {([\(\)\[\]\{\}\$\"\\])} $string {\\\1} string  return $string}putlog "Script loaded: RSS feed parser $rss::version (C) 2004 perpleXa."</code></pre></div>The script supports normally the CDATA feed, but, on the channel, when it is a question of CDATA feed, we can see <span style="color:red">n/a</span> replacing the news ...<br><br>please Help me !!!<br>thx<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=6689">Tye</a> — Mon Sep 05, 2005 5:55 pm</p><hr />
]]></content>
	</entry>
	</feed>
