All pastes #2107086 Raw Edit

Miscellany

public text v1 · immutable
#2107086 ·published 2012-01-28 14:47 UTC
rendered paste body
;TITLE IMDB
;AUTHOR entropy
;COMMANDS imdb(0)
;VERSION: 1.1
;HELP imdb [movie]|Defines movies found for [movie] on channel.|none

;============================== ALIASES


alias imdb {
  sockclose imdb
  sockopen imdb imdb.com 80
  sockmark imdb $1-
}

alias -l destroyimdb {
  hdel $1 imdbvalue
  hdel $1 imdbword
  hdel $1 imdbchannel
  hdel $1 imdbnick
  hdel $1 imdbword
  hdel $1 imdbfinish
  hdel $1 imdbcontinue
  unset %found
  unset %caught
  unset %answer
  unset %cont
}
alias -l striphtml {
  var %p = 1, %b = $replace($mid($1-,1,420),$chr(38),$+($chr(32),$chr(38)),;,$+(;,$chr(32)),>,$+(>,$chr(32)),<,$+($chr(32),<,)), %c
  while ($gettok(%b,%p,32)) {
    %c = $ifmatch
    if (*<* iswm %c || *&*; iswm %c || *</* iswm %c || *solid* iswm %c || *px* iswm %c || *:* iswm %c && $remove(%c,:) !isnum || */* iswm %c || *'* iswm %c || *;* iswm %c || *&* iswm %c || *<*>* iswm %c || *=* iswm %c || *"* iswm %c || *>* iswm %c || $+(*,$chr(40),*) iswm %c || $+(*,$chr(41),*) iswm %c || $+(*,$chr(123),*) iswm %c || $+(*,$chr(125),*) iswm %c) { %b = $remove(%b,%c) | %p = 0 }
    inc %p
  }
  return %b
}
alias -l cgsbsock { return $hget(cgsb,socket) | halt }

;============================== EVENTS
on *:signal:imdb:{
  var %i = $hget(cgsb,buffer), %p = $hget(cgsb,$+($cgsbsock,.prefix))
  var %t = $gettok($hget(cgsb,$+($cgsbsock,.colors)),1,32), %u = $gettok($hget(cgsb,$+($cgsbsock,.colors)),2,32)
  var %a = $hget($cgsbsock,access)
  tokenize 32 %i
  if ($+(:,%p,imdb) == $4) {
    if (%a < $getcom(imdb)) { sockwrite -n $cgsbsock notice $gettok($mid($1,2,$len($1)),1,33) $+(:,$iif(%u || %t,$+($chr(3),%t,$chr(44),%u,$chr(32)))) $+ You do not posses enough access for this command. $chr(3) | return }
    elseif (!$5) { sockwrite -n $cgsbsock notice $gettok($mid($1,2,$len($1)),1,33) $+(:,$iif(%u || %t,$+($chr(3),%t,$chr(44),%u,$chr(32)))) $+ No movie specified. $chr(3) }
    else {
      hadd $cgsbsock imdbnick $gettok($mid($1,2,$len($1)),1,33)
      hadd $cgsbsock imdbchannel $3
      hadd $cgsbsock imdbword $5-
      imdb $cgsbsock $5-
    }
    sockwrite -n $cgsbsock silence $+(+,$gettok($mid($1,2,$len($1)),1,33))
    .timer -o 1 2 sockwrite -n $cgsbsock silence $+(-,$gettok($mid($1,2,$len($1)),1,33))
  }
}
on *:sockopen:imdb:{
  var %t = $gettok($hget(cgsb,$+($sockname,.colors)),1,32), %u = $gettok($hget(cgsb,$+($sockname,.colors)),2,32)
  if ($sockerr > 0) { sockwrite -n $gettok($sock($sockname).mark,1,32) notice $hget($gettok($sock($sockname).mark,1,32),imdbnick) $+(:,$iif(%u || %t,$+($chr(3),%t,$chr(44),%u,$chr(32)))) $+ Socket error(s). Try again later. $chr(3) | return }
  sockwrite -n $sockname GET $+(http://www.imdb.com/find?s=all&q=,$replace($gettok($sock($sockname).mark,2-,32),$chr(32),+)) HTTP/1.1
  sockwrite -n $sockname Host: $+(www.imdb.com,$str($crlf, 2))
}
on *:sockread:imdb:{
  var %t = $gettok($hget(cgsb,$+($sockname,.colors)),1,32), %u = $gettok($hget(cgsb,$+($sockname,.colors)),2,32)
  if ($sockerr > 0) { sockwrite -n $gettok($sock($sockname).mark,1,32) notice $hget($gettok($sock($sockname).mark,1,32),imdbnick) $+(:,$iif(%u || %t,$+($chr(3),%t,$chr(44),%u,$chr(32)))) $+ Socket error(s). Try again later. $chr(3) | return }
  var %a, %b
  sockread -f %a
  %a = $mid(%a,1,420)
  %b = %a
  %a = $iif($findtok(%a,$wildtok(%a,$+(*,/title/,*),1,32),1,32),$gettok(%a,$ifmatch,32),%a)
  %a = $replace(%a,=,$chr(32),>,$chr(32),",$chr(32),/,$chr(32))
  %a = $wildtok(%a,*tt*,1,32) $iif(</html* iswm %a,</html>)
  tokenize 32 %a
  if (*tt* iswm $1- && $remove($1-,tt) isnum && %found != Y) { %found = Y | %caught = $1- | imdb2 $gettok($sock($sockname).mark,1,32) $1- | sockclose $sockname | return }
  if (*</html>* iswm %b && !%caught) { sockwrite -n $gettok($sock($sockname).mark,1,32) notice $hget($gettok($sock($sockname).mark,1,32),imdbnick) $+(:,$iif(%u || %t,$+($chr(3),%t,$chr(44),%u,$chr(32)))) $+ Nothing found. $chr(3) }
}

alias imdb2 {
  sockclose imdb2
  sockopen imdb2 www.imdb.com 80
  sockmark imdb2 $1-
}

on *:sockopen:imdb2:{
  var %t = $gettok($hget(cgsb,$+($sockname,.colors)),1,32), %u = $gettok($hget(cgsb,$+($sockname,.colors)),2,32)
  if ($sockerr > 0) { sockwrite -n $gettok($sock($sockname).mark,1,32) notice $hget($gettok($sock($sockname).mark,1,32),imdbnick) $+(:,$iif(%u || %t,$+($chr(3),%t,$chr(44),%u,$chr(32)))) $+ Socket error(s). Try again later. $chr(3) | return }
  sockwrite -n $sockname GET $+(http://www.imdb.com/title/,$replace($gettok($sock($sockname).mark,2-,32),$chr(32),+),/) HTTP/1.1
  sockwrite -n $sockname Host: $+(www.imdb.com,$str($crlf, 2))
}
on *:sockread:imdb2:{
  var %t = $gettok($hget(cgsb,$+($sockname,.colors)),1,32), %u = $gettok($hget(cgsb,$+($sockname,.colors)),2,32)
  if ($sockerr > 0) { sockwrite -n $gettok($sock($sockname).mark,1,32) notice $hget($gettok($sock($sockname).mark,1,32),imdbnick) $+(:,$iif(%u || %t,$+($chr(3),%t,$chr(44),%u,$chr(32)))) $+ Socket error(s). Try again later. $chr(3) | return }
  var %a, %b
  sockread -f %a
  %a = $mid(%a,1,420)
  tokenize 32 %a

  if (*<title>* iswm $1-) { %answer = %answer Title: $remove($1-,<title>,</title>) }
  if (*<b>*/10</b>* iswm $1-) { %answer = %answer Rating: $remove($1-,<b>,</b>) }
  if (*href="/chart/top?*">Top *: #*</a>* iswm $1-) { %answer = %answer $striphtml($1-) }
  if (*<h5>*</h5>* iswm $1-) { %cont = Y | %answer = %answer $+($chr(2),$remove($iif(< !isin $2,$1-2,$1),:,<h5>,</h5>,<a),:,$chr(2)) }
  elseif (%cont == Y) { %cont = N | %answer = $mid(%answer $remove($striphtml($1-),more),1,420) }
  elseif (*</html>* iswm $1- && %answer) { sockwrite -n $gettok($sock($sockname).mark,1,32) privmsg $hget($gettok($sock($sockname).mark,1,32),imdbchannel) $+(:,$iif(%u || %t,$+($chr(3),%t,$chr(44),%u,$chr(32)))) $+ $iif($len(%answer) == 420,$+(%answer,...),%answer) $chr(3) | destroyimdb $gettok($sock($sockname).mark,1,32) }
}