All pastes #1612600 Raw Edit

RSS CompletosBR

public text v1 · immutable
#1612600 ·published 2009-10-11 15:10 UTC
rendered paste body
; rss reader v2
; LtGuide (ltguide  xscripters.com)
; 11 January 2006

;                        msg channel
alias -l rss.chan return #completosbr

;                        site to connect to
alias -l rss.site return www.completosbr.org

;                        file you want to retrieve
alias -l rss.page return /rss.php

;                        notifies of update to rss
;                        (1 for on, 0 for off)
alias -l rss.achk return 1

;                        displays X chars of description
;                        (integer >1 for on, 0 for off)
alias -l rss.desc return 0

; you can trigger the auto check (msgs if there is a new update) with /rss #chan 0
; or you can send the last two updates with /rss #chan 2



on $*:text:/^!rss( [1-15])?$/:#:{
  if (!%rss_spam) && ($chan == $rss.chan) {
    set -u10 %rss_spam 1
    rss $chan $2
  }
}

on me:*:join:#:{
  if ($chan == $rss.chan) && ($rss.achk) rss $rss.chan 0
}

on *:unload:{ unset %rss_latest %rss_desc }

on *:sockopen:rss:{
  if (!$sockerr) {
    var %s sockwrite -n rss
    %s GET / $+ $rss.page HTTP/1.0
    %s Host: $rss.site
    %s
  }
  else rss.msg $gettok($sock(rss).mark,1,32) unable to retrieve rss feed, $sock(rss).wsmsg
}

on *:sockread:rss:{
  var %r
  sockread %r
  if ($sockerr) return

  tokenize 32 $sock(rss).mark
  if (<item> isin %r) || (</item> isin %r) {
    tokenize 32 $1-2 $calc($3 +1) $4
    sockmark rss $1-
  }
  if (!$3) halt

  if ($calc($3 % 2)) {

    if ($4) {
      if (</description> isin %r) {
        rss.msg $1 %rss_desc
        unset %rss_desc
        sockmark rss $1-3 0
      }
      elseif ($len(%rss_desc) < $calc($rss.desc + $4)) {
        %rss_desc = %rss_desc $iif($calc($v1 + $len(%r)) > $v2,$left(%r,- $+ $calc($v1 - $v2)) $+ ...,%r)
      }
    }

    .echo -q $regex(%r,/<title>(.*)</)
    if ($regml(1)) {
      var %i $v1
      if (!%rss_latest) %rss_latest = %i
      if ($3 == 1) && (%rss_latest != %i) {
        rss.msg $1 14Novo Post 4.::. 14www.Completos10BR14.org
        %rss_latest = %i
      }
      elseif (!$2) {
        sockclose rss
        halt
      }
      rss.msg $1 $+(,%i,)
    }
    if ($rss.desc) {
      .echo -q $regex(%r,/<description>(.*)</)
      if ($regml(1)) {
        var %i $v1
        rss.msg $1 %rss_desc $iif($len(%i) > $rss.desc,$left(%i,$v2) $+ ...,%i)
        unset %rss_desc
      }
      elseif (<description> isin %r) sockmark rss $1-3 $calc($len(%rss_desc) +1)
    }
    .echo -q $regex(%r,/<peers>(.*)</)
    if ($regml(1)) %rss_desc = $replacecs($v1,EE,ee,ERS,ers,D,d,CH,ch,$chr(40),$null,$chr(41),$null) /
    .echo -q $regex(%r,/<link>(.*)</)
    if ($regml(1)) rss.msg $1 $replace(4[15 $v1 4],&amp;,&)

  }
  elseif (!$2) || ($3 == $calc($2 *2)) sockclose rss
}

on *:sockclose:rss:{
  rss.msg $gettok($sock(rss).mark,1,32) unable to retrieve rss feed, $sock(rss).wsmsg (socket closed prematurely)
}

alias -l rss.msg {
  if ($me ison $1) msg $1-
  elseif ($1 == $rss.chan) .timerrss.achk off
}

alias rss {
  if ($rss.achk) .timerrss.achk 0 300 rss $rss.chan 0
  else .timerrss.achk off
  if (!$sock(rss)) && ($me ison $1) {
    sockopen rss $$rss.site 80
    sockmark rss $1 $iif($2 isnum 0-5,$2,3) 0 0
  }
}