This is the new home of the egghelp.org community forum.
All data has been migrated (including user logins/passwords) to a new phpBB version.


For more information, see this announcement post. Click the X in the top right-corner of this box to dismiss this message.

RSS Reader help.

Support & discussion of released scripts, and announcements of new releases.
Post Reply
s
sky6419
Voice
Posts: 23
Joined: Fri Jan 17, 2014 5:31 am

RSS Reader help.

Post by sky6419 »

Code: Select all

##############################################################################################
##  ##     rssreader.tcl for eggdrop by Ford_Lawnmower irc.geekshed.net #Script-Help    ##  ##
##############################################################################################
## .rss in the party line for commands and syntax. Example Feed Add Below:                  ##
##.rss add #Hawkee hawkee Hawkee http://www.hawkee.com/comment.rss.php?tool_type=snippet_id ##
##############################################################################################
##      ____                __                 ###########################################  ##
##     / __/___ _ ___ _ ___/ /____ ___   ___   ###########################################  ##
##    / _/ / _ `// _ `// _  // __// _ \ / _ \  ###########################################  ##
##   /___/ \_, / \_, / \_,_//_/   \___// .__/  ###########################################  ##
##        /___/ /___/                 /_/      ###########################################  ##
##                                             ###########################################  ##
##############################################################################################
##  ##                             Start Setup.                                         ##  ##
##############################################################################################
namespace eval rssreader {
## Edit textf to change the color/state of the text shown                               ##  ##
  variable textf "\017\00304"
## Edit linkf to change the color/state of the links                                    ##  ##
  variable linkf "\017\037"
## Change usetiny to shorten links with tinyurl. 1 = on , 0 = off                       ##  ##  
  variable usetiny 1
## Change useisgd to shorten links with is.gd. 1 = on , 0 = off                         ##  ##  
  variable useisgd 0
## Edit maxresults to the amount of results you want per query. This will not cause     ##  ##
## You to lose results. It will only spread them out over several querys.               ##  ##
  variable maxresults 2
## Edit checkdelay to change the frequency feed pages are checked. Delay is in minutes. ##  ##
  variable checkdelay 3
## Edit startupdelay to add delay to startup/restart. Delay is in minutes.              ##  ##
  variable startupdelay 2
##############################################################################################
##  ##                           End Setup.                                              ## ##
##############################################################################################   
  bind dcc - rss rssreader::settings
  bind evnt -|- init-server rssreader::loadhash
  bind evnt -|- prerehash rssreader::loadhash
  proc settings {hand idx text} {
    set choice [lindex $text 0]; set channel [lindex $text 1]
    set name [lindex $text 2]; set logo [lindex $text 3]
   set link [lindex $text 4]
   if {[string equal -nocase "add" $choice] && $link != ""} {
     set deleteinfo [string map {\[ ? \] ?} [hget "rssreader" $name]]
     if {[set indx [lsearch -glob [timers] "*$deleteinfo*"]] != -1 && $deleteinfo != "0"} {
       killtimer [lindex [lindex [timers] $indx] 2]
     }
     hadd "rssreader" "$name" "rssreader::main {$channel $logo $link}"
     savehash
     putdcc $idx "Added feed $name to $channel as $logo $link"
     rssreader::main "$channel $logo $link"
   } elseif {[string equal -nocase "addxml" $choice] && $link != ""} {
     set deleteinfo [string map {\[ ? \] ?} [hget "rssreader" $name]]
     if {[set indx [lsearch -glob [timers] "*$deleteinfo*"]] != -1 && $deleteinfo != "0"} {
       killtimer [lindex [lindex [timers] $indx] 2]
     }
     hadd "rssreader" "$name" "rssreader::type2 {$channel $logo $link}"
     savehash
     putdcc $idx "Added feed $name to $channel as $logo $link"
     rssreader::type2 "$channel $logo $link"
   } elseif {[string equal -nocase "addssl" $choice] && $link != ""} {
     set deleteinfo [string map {\[ ? \] ?} [hget "rssreader" $name]]
     if {[set indx [lsearch -glob [timers] "*$deleteinfo*"]] != -1 && $deleteinfo != "0"} {
       killtimer [lindex [lindex [timers] $indx] 2]
     }
     hadd "rssreader" "$name" "rssreader::type3 {$channel $logo $link}"
     savehash
     putdcc $idx "Added feed $name to $channel as $logo $link"
     rssreader::type3 "$channel $logo $link"     
   } elseif {[string equal -nocase "list" $choice]} {
     putdcc $idx "\[RSS list\]"
     set count [hfind "rssreader" "*" 0]; set counter 1
     while {$count >= $counter} {
       putdcc $idx "[hfind "rssreader" "*" $counter]"
      incr counter
     }
   } elseif {[string equal -nocase "info" $choice] && $channel != ""} {
     putdcc $idx "[hget "rssreader" $channel]"
   } elseif {[string equal -nocase "delete" $choice] && $channel != ""} {
     set deleteinfo [string map {\[ ? \] ?} [hget "rssreader" $channel]]
     hdel "rssreader" $channel
     savehash
     if {[set indx [lsearch -glob [timers] "*$deleteinfo*"]] != -1 && $deleteinfo != "0"} {
       killtimer [lindex [lindex [timers] $indx] 2]
      putdcc $idx "Removed $channel from RSS"
     } else {
       putdcc $idx "$channel not found"
     }
   } elseif {[string equal -nocase "timers" $choice]} {
     putdcc $idx [timers]
   } elseif {[string equal -nocase "rehash" $choice]} {
     putdcc $idx "rehashing rss...."
     hfree rsstempold
     hfree rsstempnew
     putdcc $idx "done"
   } else {
     putdcc $idx "\[RSS Syntax\]"
     putdcc $idx "Add Feed: .rss add <#chan1,#chan2,#chanetc> <name> <logo> <link>"
     putdcc $idx "Add Xml Feed: .rss addxml <#chan1,#chan2,#chanetc> <name> <logo> <link>"
     putdcc $idx "Add SSL Feed: .rss addssl <#chan1,#chan2,#chanetc> <name> <logo> <link>"
     putdcc $idx "Delete Feed: .rss delete <name>"
     putdcc $idx "Info Feed: .rss info <name>"
     putdcc $idx "List Feeds: .rss list"
     putdcc $idx "Help Feeds: .rss"
    }   
  }
  proc main {text} {
    set chan [lindex $text 0]; set logo [lindex $text 1]; set linker [lindex $text 2]
    set title ""; set link ""; set description ""; set maxcount 1; set json ""
    if {[set indx [lsearch -glob [timers] "*rssreader::main {$chan [string map {\[ ? \] ?} $logo] ${linker}}*"]] != -1} { 
      killtimer [lindex [lindex [timers] $indx] 2] 
    }
    timer $rssreader::checkdelay "rssreader::main {$chan $logo $linker}"
    set rssreaderurl "/ajax/services/feed/load?v=1.0&q=${linker}"
    set rssreadersite "ajax.googleapis.com"; set rssout ""
    if {[catch {set rssreadersock [socket -async $rssreadersite 80]} sockerr]} {
      return 0
    } else {
      puts $rssreadersock "GET $rssreaderurl HTTP/1.0"
      puts $rssreadersock "Host: $rssreadersite"
      puts $rssreadersock "User-Agent: Opera 9.6"
     puts $rssreadersock "Connection: close"
      puts $rssreadersock ""
      flush $rssreadersock
      while {![eof $rssreadersock]} {
        set rssreadervar " [string map {<![CDATA[ "" ]]> "" \$ \002\$\002 \[ \( \] \)} [gets $rssreadersock]] "
      if {[regexp {\"responseStatus\":\s?400} $rssreadervar]} {
        if {[set indx [lsearch -glob [timers] "*rssreader::main {$chan $logo ${linker}}*"]] != -1} { 
            killtimer [lindex [lindex [timers] $indx] 2] 
          }
        type2 "$chan $logo $linker"
        close $rssreadersock
        return
      } else {
        regexp {\:\[(\{.*)$} $rssreadervar match rssout
        set rssout [regexp -all -inline {\{(.*?)\}} $rssout]
        if {$rssout != ""} {
          set count 0
          foreach {match matched} $rssout {
           incr count
            set matched [regexp -all -inline {(".*?":".*?"\,)} $match]
              foreach {innermatch innermatched} $matched {
             regexp  {\"(.*?)\":\".*?\"\,} $innermatch match varname
                regexp  {\".*?\":\"(.*?)\"\,} $innermatch match value
            set value [string map {\$ \002\$\002 \] \002\]\002 \[ \002\[\002} $value]
             set $varname $value
           }
           if {[hfindexact "rsstempold" "${link}" 1] != $link} {
             if {$title == ""} { set title $description }
            set linked $link
            if {$rssreader::usetiny} { set linked [string trimright [tiny $link]] }
            if {$rssreader::useisgd} { set linked [string trimright [isgd $link]] }
            if {$maxcount <= $rssreader::maxresults} {
               putserv "PRIVMSG $chan :${logo} ${rssreader::textf}[dehex $title] ${rssreader::linkf}${linked}"
               incr maxcount
              hadd "rsstempnew" $link 1
            } 
           }
            }
          hfree rsstempold
          hcopy rsstempnew rsstempold
         rssreader::savetemphash
          }
      }
      }
     close $rssreadersock
    } 
  }
  proc type2 {text} {
    set chan [lindex $text 0]; set logo [lindex $text 1]; set linker [lindex $text 2]
    set title ""; set link ""; set description "" 
    if {[set indx [lsearch -glob [timers] "*rssreader::type2 {$chan [string map {\[ ? \] ?} $logo] ${linker}}*"]] != -1} { 
      killtimer [lindex [lindex [timers] $indx] 2] 
    }
    timer $rssreader::checkdelay "rssreader::type2 {$chan $logo $linker}"
    regexp -- {https?\:\/\/(.*?)(\/.*)$} $linker wholematch rsstype2site rsstype2url
    set itemfound 0 ; set maxcount 1
    if {[catch {set rsstype2sock [socket -async $rsstype2site 80]} sockerr]} {
      return 0
    } else {
      puts $rsstype2sock "GET $rsstype2url HTTP/1.0"
      puts $rsstype2sock "Host: $rsstype2site"
      puts $rsstype2sock "User-Agent: Opera 9.6"
      puts $rsstype2sock "Connection: close"
      puts $rsstype2sock ""
      flush $rsstype2sock
      while {![eof $rsstype2sock]} {
        set rsstype2var " [string map {<![CDATA[ "" ]]> "" \$ \002\$\002 \[ \( \] \)} [gets $rsstype2sock]] "   
        if {[string match {*<item>*} $rsstype2var]} { set itemfound 1 }
        if {[regexp {<title>(.*?)(?:<\/title>|$)} $rsstype2var match title]} { }
        if {[regexp {<link>(.*?)(?:<\/link>|$)} $rsstype2var match link]} { }
        if {[string match {*</item>*} $rsstype2var]} {
          if {[hfindexact "rsstempold" "${link}" 1] != $link} {
            if {$itemfound} {
              if {$maxcount <= $rssreader::maxresults} {
                set linked $link
                if {$rssreader::usetiny} { set linked [string trimright [tiny $link]] }
                if {$rssreader::useisgd} { set linked [string trimright [isgd $link]] }
                putserv "PRIVMSG $chan :${logo} ${rssreader::textf}[dehex $title] ${rssreader::linkf}${linked}"
                incr maxcount
                hadd "rsstempnew" $link 1
              } 
            }
          }
        }
     }
     set itemfound 0
     hfree rsstempold
     hcopy rsstempnew rsstempold
     rssreader::savetemphash
     close $rsstype2sock
    } 
  }
  proc type3 {text} {
    set chan [lindex $text 0]; set logo [lindex $text 1]; set linker [lindex $text 2]
    set title ""; set link ""; set description "" 
    if {[set indx [lsearch -glob [timers] "*rssreader::type3 {$chan [string map {\[ ? \] ?} $logo] ${linker}}*"]] != -1} { 
      killtimer [lindex [lindex [timers] $indx] 2] 
    }
    timer $rssreader::checkdelay "rssreader::type3 {$chan $logo $linker}"
    regexp -- {https?\:\/\/(.*?)(\/.*)$} $linker wholematch rsstype3site rsstype3url
    set itemfound 0 ; set maxcount 1 ; set count 1 ; set counter 1
    ::http::register https 443 tls::socket
    set type3searchtoken [::http::geturl "https://${rsstype3site}${rsstype3url}"]
    set type3searchdata [string map {<!\[CDATA\[ \"\" \]\]> "" \$ \\\$ \[ \\\[ \] \\\]} [::http::data $type3searchtoken]]
    ::http::cleanup $type3searchtoken
    ::http::unregister https
    set title [regexp -all -inline {<title>(.*?)<\/title>} $type3searchdata]
    set link [regexp -all -inline {<link>(.*?)<\/link>} $type3searchdata]
    while {$counter <= [llength $title]} {
      set thislink [lindex ${link} $counter]
      if {[hfindexact "rsstempold" "${thislink}" 1] != $thislink} {
        if {$maxcount <= $rssreader::maxresults} {
          set linked $thislink
          if {$rssreader::usetiny} { set linked [string trimright [tiny $thislink]] }
          if {$rssreader::useisgd} { set linked [string trimright [isgd $thislink]] }
          putserv "PRIVMSG $chan :${logo} ${rssreader::textf}[dehex [lindex $title $counter]] ${rssreader::linkf}${linked}"
          hadd "rsstempnew" $thislink 1
          incr maxcount 1
        }
        incr count 2
      }
      incr counter 2
    }
    hfree rsstempold
    hcopy rsstempnew rsstempold
    rssreader::savetemphash
  }  
  proc tiny {link} {
    set tinysite tinyurl.com
    set tinyurl /api-create.php?url=[urlencode ${link}]
    if {[catch {set tinysock [socket -async $tinysite 80]} sockerr]} {
      putlog "$tinysite $tinyurl $sockerr error"
      return $link
    } else {
      puts $tinysock "GET $tinyurl HTTP/1.0"
      puts $tinysock "Host: $tinysite"
      puts $tinysock "User-Agent: Opera 9.6"
     puts $tinysock "Connection: close"
      puts $tinysock ""
      flush $tinysock
      while {![eof $tinysock]} {
        set tinyvar " [gets $tinysock] "
        if {[regexp {(http:\/\/.*)} $tinyvar match tinyresult]} {
          close $tinysock
          return [string map {http:// https://} $tinyresult]
        }
      }
      close $tinysock
      return $link
    }
  }
  proc isgd {link} {
    set isgdsite is.gd
    set isgdurl /create.php?format=simple&url=[urlencode ${link}]
    if {[catch {set isgdsock [socket -async $isgdsite 80]} sockerr]} {
      putlog "$isgdsite $isgdurl $sockerr error"
      return $link
    } else {
      puts $isgdsock "GET $isgdurl HTTP/1.0"
      puts $isgdsock "Host: $isgdsite"
      puts $isgdsock "User-Agent: Opera 9.6"
      puts $isgdsock "Connection: close"
      puts $isgdsock ""
      flush $isgdsock
      while {![eof $isgdsock]} {
        set isgdvar " [gets $isgdsock] "
        if {[regexp {(http:\/\/.*)} $isgdvar match isgdresult]} {
          close $isgdsock
          return $isgdresult
        }
      }
      close $isgdsock
      return $link
    }
  }
  proc hex {decimal} { return [format %x $decimal] }
  proc decimal {hex} { return [expr 0x$hex] }
  proc dehex {string} {
    regsub -all {^\{|\}$} $string "" string
    set string [subst [regsub -nocase -all {\\u([a-f0-9]{4})} $string {[format %c [decimal \1]]}]]
    set string [subst [regsub -nocase -all {\%([a-f0-9]{2})} $string {[format %c [decimal \1]]}]]
    set string [subst [regsub -nocase -all {\&#([0-9]{4});} $string {[format %c \1]}]]
    set string [subst [regsub -nocase -all {\&#x([0-9]{2});} $string {[format %c [decimal \1]]}]]
    set string [string map {" \" · · & & <b> \002 </b> \002 – – » \
    » « « Ü Ü ü ü Á Á á á É É é é Í Í í \
    í Ó Ó ó ó Ñ Ñ ñ ñ Ú Ú ú ú æ æ   " " &apos; \' \
   \( \002\(\002 \) \002\)\002 \{ \002\{\002 \} \002\}\002} $string]
    return $string
  }
  proc urlencode {string} {
    regsub -all {^\{|\}$} $string "" string
    return [subst [regsub -nocase -all {([^a-z0-9\+])} $string {%[format %x [scan "\\&" %c]]}]]
  }
  proc hadd {hashname hashitem hashdata } {
    global $hashname
    set ${hashname}($hashitem) $hashdata
  }
  proc hget {hashname hashitem} {
    upvar #0 $hashname hgethashname
   if {[info exists hgethashname($hashitem)]} {
     return $hgethashname($hashitem)
   } else {
     return 0
   }
  }
  proc hfind {hashname search value} {
    upvar #0 $hashname hfindhashname
   if {[array exists hfindhashname]} {
     if {$value == 0} {
       return [llength [array names hfindhashname $search]]
      } else {
        set value [expr $value - 1]
       return [lindex [array names hfindhashname $search] $value]
     }
   }
  }
  proc hfindexact {hashname search value} {
    upvar #0 $hashname hfindhashname
   if {[array exists hfindhashname]} {
     if {$value == 0} {
       return [llength [array names hfindhashname -exact $search]]
      } else {
        set value [expr $value - 1]
       return [lindex [array names hfindhashname -exact $search] $value]
     }
   }
  }
  proc hsave {hashname filename} {
    upvar #0 $hashname hsavehashname
   if {[array exists hsavehashname]} {
     set hsavefile [open $filename w]
     foreach {key value} [array get hsavehashname] {
       puts $hsavefile "${key}=${value}"
     }
     close $hsavefile
   }
  }
  proc hload {hashname filename} {
    upvar #0 $hashname hloadhashname
   hfree $hashname
   set hloadfile [open $filename]
   set linenum 0
   while {[gets $hloadfile line] >= 0} {
     if {[regexp -- {([^\s]+)=(.*)$} $line wholematch item data]} {
       set hloadhashname($item) $data
     }
    }
   close $hloadfile
  }
  proc hfree {hashname} {
    upvar #0 $hashname hfreehashname
   if {[array exists hfreehashname]} {
      foreach key [array names hfreehashname] { 
       unset hfreehashname($key) 
     }
   }
  }
  proc hdel {hashname hashitem} {
    upvar #0 $hashname hdelhashname
   if {[info exists hdelhashname($hashitem)]} {
     unset hdelhashname($hashitem)
   }
  }
  proc hcopy {hashfrom hashto} {
   upvar #0 $hashfrom hashfromlocal $hashto hashtolocal
   array set hashtolocal [array get hashfromlocal]
  } 
  proc savetemphash {} {
    #hsave "rsstempnew" "${::network}rsstemp.hsh"
  }
  proc savehash {} {
    hsave "rssreader" "${::network}rssreader.hsh"
  }
  proc loadhash {type} {
    if {[file exists "${::network}rssreader.hsh"]} { 
     rssreader::hload "rssreader" "${::network}rssreader.hsh" 
   }
   if {[file exists "${::network}rsstemp.hsh"]} { 
     #rssreader::hload "rsstempnew" "${::network}rsstemp.hsh"
     #rssreader::hload "rsstempold" "${::network}rsstemp.hsh"     
   }
    set count $rssreader::startupdelay
    foreach {key value} [array get ::rssreader] {
      if {[set indx [lsearch -glob [timers] "*$value*"]] != -1} {
       killtimer [lindex [lindex [timers] $indx] 2]
      }
      timer $count $value
      incr count
    }
  }  
}
putlog "\002*Loaded* \017\00304\002RSS Reader\017 \002by \
Ford_Lawnmower irc.GeekShed.net #Script-Help .rss for help"
Hi everyone, this tcl loads correctly but it doesn't write the news in the channel, can anyone find the error?
Online
User avatar
CrazyCat
Revered One
Posts: 1242
Joined: Sun Jan 13, 2002 8:00 pm
Location: France
Contact:

Post by CrazyCat »

I think that the google's api "feed reader" doesn't exist anymore.
You'd better try rss-synd.tcl (https://scripts.eggdrop.fr/details-Rss-Synd+%22tinyurl%22-s135.html) wichi works like a charm
a
aut
Voice
Posts: 5
Joined: Wed Oct 25, 2023 6:14 am

Post by aut »

edit : thank u crazy cat work flawlessly
s
sky6419
Voice
Posts: 23
Joined: Fri Jan 17, 2014 5:31 am

Post by sky6419 »

Thanks CrazyCat it works great. :D
a
aut
Voice
Posts: 5
Joined: Wed Oct 25, 2023 6:14 am

Post by aut »

i have problem on dalnet server
each time rss tcl load bot killed with msg

--------------------------------------------------

[05:46:50] RSS Syndication Script v0.5b1 (2007-12-17): Loaded.
[05:46:50] Userfile loaded, unpacking...
[05:47:01] * Last context: tclhash.c/749 []
[05:47:01] * Please REPORT this BUG!
[05:47:01] * Check doc/BUG-REPORT on how to do so.
[05:47:01] * Wrote DEBUG
[05:47:01] * SEGMENT VIOLATION -- CRASHING!

---------------------------------------------------
this from other network with same eggdrop ver ,config and tcl

Image
Online
User avatar
CrazyCat
Revered One
Posts: 1242
Joined: Sun Jan 13, 2002 8:00 pm
Location: France
Contact:

Post by CrazyCat »

The trouble is independant from network, can you try with another rss feed ?
Peharps the feed you use contains emojis or extended utf-8 chars, and eggdrop dislikes it.

Can you also give us the url of the feed you try to get ?
s
simo
Revered One
Posts: 1082
Joined: Sun Mar 22, 2015 2:41 pm

Post by simo »

if the feed indeed contains emojis try to remove

[string tolower

dont forget the ] as well

from the tcl
a
aut
Voice
Posts: 5
Joined: Wed Oct 25, 2023 6:14 am

Post by aut »

CrazyCat wrote:The trouble is independant from network, can you try with another rss feed ?
Peharps the feed you use contains emojis or extended utf-8 chars, and eggdrop dislikes it.

Can you also give us the url of the feed you try to get ?
this my rss feeds and setup

https://file.io/s6hD9skX5Jjl

edit: i remove 2 rss feeds now is good,let see till tomorow
ty for responding
Last edited by aut on Fri Oct 27, 2023 2:01 pm, edited 1 time in total.
a
aut
Voice
Posts: 5
Joined: Wed Oct 25, 2023 6:14 am

Post by aut »

simo wrote:if the feed indeed contains emojis try to remove

[string tolower

dont forget the ] as well

from the tcl
other network work fine
dalnet hate me i guess :roll:
s
sky6419
Voice
Posts: 23
Joined: Fri Jan 17, 2014 5:31 am

Post by sky6419 »

15:27:38] RSS Error: Unable to find tls package required for https, unloaded feed "Ansa".
with the .status command it tells me.... TLS support is enabled.
21:28:50 [STS-135] TLS library: OpenSSL 1.1.1w 11 Sep 2023 (header version OpenSSL 1.1.1n 15 Mar 2022).
Could it be a shell problem?
Post Reply