Advertisement
mruno

!EP (TVmaze) v0.3 15OCT17

Sep 14th, 2015
550
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
mIRC 26.70 KB | None | 0 0
  1. ;tvmaze 0.3 by mruno
  2. ;uses tvmaze.com for tv show info
  3. ;usage !EP <show>
  4. ;---------------------------------------------------------------
  5. ;set max results when searching (!EP -s blah)
  6. alias TVMaze.Query.Results return 3
  7.  
  8. ;set 1 for colors and 0 for no colors
  9. alias TVMaze.Colors return 1
  10. ;---------------------------------------------------------------
  11. ;v0.3 added network info
  12. ;v0.2 fixed Airing time
  13. ;v0.1 initial release
  14. ;
  15. ;01,10TVMAZE
  16. ;
  17. on *:TEXT:!EP*:#:{
  18.   if (Reply from TVmaze.com has timed out isin $1-) return
  19.   if ($chr(124) isin $1-) || ($chr(37) isin $1-) || ($chr(36) isin $1-) return
  20.  
  21.   if ($timer(TVMaze)) || ($hget(TVMaze)) return
  22.   else .timerTVMaze 1 10 noop
  23.   if ($timer(TVMaze.Timeout)) { .notice $nick Please wait for me to complete the other !EP request. | return }
  24.   .timerTVMaze.Timeout 1 45 TVMaze.Timeout
  25.   if (-s == $2) && ($3) {
  26.     ;search multiple shows
  27.     var %text $replace($strip($3-),.,$chr(32))
  28.     .timer 1 0 hadd TVMaze query.type multiple
  29.     .timer 1 0 TVMaze.Query.Multiple $chan $nick %text
  30.   }
  31.   elseif (-ID == $2) && ($3 isnum) {
  32.     ;get results o' an exact show by ID code
  33.     var %text $replace($strip($3-),.,$chr(32))
  34.     .timer 1 0 hadd TVMaze query.type id
  35.     .timer 1 0 TVMaze.Query.Single $chan $nick %text
  36.   }
  37.   elseif ($2) && (-id != $2) {
  38.     ;single query results
  39.     var %text $replace($strip($2-),.,$chr(32))
  40.     .timer 1 0 hadd TVMaze query.type single
  41.     .timer 1 0 TVMaze.Query.Single $chan $nick %text
  42.   }
  43.   else {
  44.     ;display help
  45.     .notice $nick TVmaze script by mruno Usage: !EP <show>
  46.     .notice $nick Options -s Search for shows with up to $TVMaze.Query.Results results. -ID Returns the results with an ID from TVmaze.com
  47.     .notice $nick Option Examples: !EP -s walking dead or !EP -id 240
  48.     return
  49.   }
  50.   .notice $nick Querying TVmaze...
  51.   hmake TVMaze
  52.   hadd TVMAZE chan $chan
  53. }
  54. alias TVMaze.Timeout {
  55.   $iif($hget(TVMaze,chan),msg $hget(TVMaze,chan),noop) !EP - Either no shows matched the query, or tvmaze.com is down :(
  56.   if ($hget(tvmaze)) hfree tvmaze
  57.   .timerTVMaze* off
  58.   jsonclose TVMaze*
  59. }
  60. alias TVMaze.Complete {
  61.   ;end o' json queries!
  62.   ;output the info to the channel or user
  63.   .timerTVMaze* off
  64.   var %action
  65.   if ($hget(TVMaze,query.type) == single) || ($hget(TVMaze,query.type) == id) {
  66.     if $hget(TVMaze,nick) && ($hget(TVMaze,chan)) {
  67.       set %action msg $hget(TVMaze,chan)
  68.       %action $iif($TVMaze.Colors,12) $+ $hget(TVMaze,title) $+  $paren($hget(TVMaze,country) $+ / $+ $hget(TVMaze,network)) - $iif($hget(TVMaze,NextEP.airtime),$iif($hget(TVMaze,NextEP.Name),$date($ctime($remove($replace($hget(TVMaze,NextEP.airdate),-,/),$chr(44))),dddd) @ $meridiemhour($hget(TVMaze,NextEP.airtime)) $iif($hget(TVMaze,country) == us, EST) -)) $paren($hget(TVMaze,status))
  69.       %action $iif($TVMaze.Colors,12) $+ $remove($hget(TVMaze,url),http://) $+ 
  70.       var %a $gettok($replace($hget(TVMaze,NextEP.airstamp),-,/),1,84) $hget(TVMaze,NextEP.airtime)
  71.       set %a $timeleft($calc($ctime($remove(%a,$chr(44))) - 86400))
  72.       ;set %a $timeleft($ctime($remove(%a,$chr(44))))
  73.       var %airing $iif(sec isin $gettok(%a,$gettok(%a,0,32),32),$gettok(%a,1 - $calc($gettok(%a,0,32) - 1),32),%a)
  74.       if (- isin %airing) unset %airing
  75.       if ($hget(TVMaze,PrevEP.name)) %action Last Episode: $date($ctime($remove($replace($hget(TVMaze,PrevEP.airdate),-,/),$chr(44))),mmm/dd/yyyy) S $+ $hget(TVMaze,PrevEP.season) $+ E $+ $hget(TVMaze,PrevEP.number) $quo($hget(TVMaze,PrevEP.name))
  76.       if ($hget(TVMaze,NextEP.name)) %action Next Episode: $date($ctime($remove($replace($hget(TVMaze,NextEP.airdate),-,/),$chr(44))),mmm/dd/yyyy) S $+ $hget(TVMaze,NextEP.season) $+ E $+ $hget(TVMaze,NextEP.number) $quo($hget(TVMaze,NextEP.name)) $iif(%airing,- Airing in: %airing)
  77.       elseif ($hget(TVMaze,status) == running) %action Next Episode: TBA
  78.       .notice $hget(TVMaze,nick) Not the right show? Try !EP -s $replace($hget(TVMaze,query),$chr(37) $+ 20,$chr(32)) - Search for the last episode: !Search $hget(TVMaze,title) S $+ $hget(TVMaze,PrevEP.season) $+ E $+ $hget(TVMaze,PrevEP.number) 
  79.     }
  80.   }
  81.   else {
  82.     set %action .notice $hget(TVMaze,nick)
  83.     if $hget(TVMaze,nick) {
  84.       var %i 0
  85.       while (%i < $TVMaze.Query.Results) {
  86.         %action $iif($TVMaze.Colors,12) $+ $hget(TVMaze,$+(Query.,%i,.name)) $+  $paren($hget(TVMaze,$+(Query.,%i,.country)) $hget(TVMaze,$+(Query.,%i,.network)))  Status: $hget(TVMaze,$+(Query.,%i,.status))   Airs on: $hget(TVMaze,$+(Query.,%i,.network)) $iif($hget(TVMaze,$+(Query.,%i,.genres)), Genres: $hget(TVMaze,$+(Query.,%i,.genres)))  ID: $hget(TVMaze,$+(Query.,%i,.id))
  87.         inc %i
  88.       }
  89.       %action Select the one you want with !EP -id <id number>
  90.     }
  91.   }
  92.   unset %TVMaze*
  93.   .timerTVMaze* off
  94.   jsonclose TVMaze*
  95.   .timer 1 1 if ($hget(tvmaze)) hfree tvmaze
  96. }
  97.  
  98.  
  99. alias TVMaze.Query.Single {
  100.   ;/TVMaze.Query.Single channel nickname query
  101.   ;this returns a single show's results
  102.  
  103.   var %chan $1
  104.   var %nick $2
  105.   var %query $3-
  106.  
  107.   hadd TVMaze chan %chan
  108.   hadd TVMaze nick %nick
  109.   set %query $replace(%query,$chr(32),$chr(37) $+ 20)
  110.   hadd TVMaze query %query
  111.   var %name TVMaze.Query
  112.   if ($hget(TVMaze,query.type) == id) TVMaze.Json -u %name http://api.tvmaze.com/shows/ $+ %query
  113.   else TVMaze.Json -u %name http://api.tvmaze.com/singlesearch/shows?q= $+ %query
  114.   .timerTVMaze.Waiting.to.Query 0 1 TVMaze.Get.Single.Query %name %query
  115. }
  116. alias TVMaze.Get.Single.Query {
  117.   ; called by TVMaze.Query.Single to record a single search show's information
  118.  
  119.   if (!%TVMaze.num) set %TVMaze.num 1
  120.   else inc %TVMaze.num
  121.   if (%TVMaze.num > 3) {
  122.     unset %TVMaze.num
  123.     if ($hget(TVMaze,query.type) == id) .timerTVMaze.repeat -m 1 500 TVMaze.Json -u $1 http://api.tvmaze.com/shows/ $+ $2-
  124.     else .timerTVMaze.repeat -m 1 500 TVMaze.Json -u $1 http://api.tvmaze.com/singlesearch/shows?q= $+ $2-
  125.   }
  126.   var %name TVMaze.Query, %id $json(%name,id), %network.type network
  127.   if (%id) {
  128.     hadd TVMaze id %id
  129.     hadd TVMaze title $json(%name,name)
  130.     hadd TVMaze url $json(%name,url)
  131.     hadd TVMaze type $json(%name,type)
  132.     hadd TVMaze language $json(%name,language)
  133.     hadd TVMaze status $json(%name,status)
  134.     hadd TVMaze runtime $json(%name,runtime)
  135.     hadd TVMaze rating $json(%name,rating,average)
  136.     if ($json(%name,webChannel,id)) && (!$json(%name,%network.type,name)) {
  137.       set %network.type webChannel
  138.       ;hadd TVMaze country $json(%name,%network.type,country,code)
  139.     }
  140.     hadd TVMaze network.type %network.type
  141.     hadd TVMaze country $json(%name,%network.type,country,code)
  142.     hadd TVMaze network $json(%name,%network.type,name)
  143.     hadd TVMaze timezone $json(%name,%network.type,country,timezone)
  144.     hadd TVMaze summary $remove($json(%name,summary),<p>,</p>)
  145.     var %genres
  146.     var %i 0
  147.     while (%i < 5) {
  148.       if ($json(%name,genres,%i)) set %genres $addtok(%genres,$ifmatch,44)
  149.       inc %i
  150.     }
  151.     hadd TVMaze genres %genres
  152.     var %prevep $json(%name,_links,previousepisode,href)
  153.     if (%prevep) {
  154.       TVMaze.Json -u TVMaze.PrevEP %prevep
  155.       hadd TVMaze PrevEP %prevep
  156.       .timerTVMaze.Waiting.to.Complete.PrevEP -m 0 500 TVMaze.Get.PrevEP $1-
  157.       hinc TVMaze Waiting
  158.     }
  159.     var %nextep $json(%name,_links,nextepisode,href)
  160.     if (%nextep) {
  161.       TVMaze.Json -u TVMaze.NextEP %nextep
  162.       hadd TVMaze NextEP %nextep
  163.       .timerTVMaze.Waiting.to.Complete.NextEP -m 0 500 TVMaze.Get.NextEP $1-
  164.       hinc TVMaze Waiting
  165.     }
  166.     .timerTVMaze.Waiting.to.Query off
  167.     if (!$hget(TVMaze,Waiting)) TVMaze.Complete
  168.   }
  169. }
  170. alias TVMaze.Json JSONOpen $1-
  171. alias TVMaze.Query.Multiple {
  172.   ;/TVMaze.Query.Multiple channel nickname query
  173.   ;this returns multiple show results
  174.  
  175.   var %chan $1
  176.   var %nick $2
  177.   var %query $3-
  178.  
  179.   hadd TVMaze chan %chan
  180.   hadd TVMaze nick %nick
  181.   set %query $replace(%query,$chr(32),$chr(37) $+ 20)
  182.   hadd TVMaze query %query
  183.   var %name TVMaze.Query
  184.   TVMaze.Json -u %name http://api.tvmaze.com/search/shows?q= $+ %query
  185.   .timerTVMaze.Waiting.to.Query -m 0 500 TVMaze.Get.Query TVMaze.Query %query
  186. }
  187.  
  188. alias TVMaze.Get.Query {
  189.   ; called by TVMaze.Query.Multiple to record multiple show information
  190.  
  191.   if (!%TVMaze.Query.num) set %TVMaze.Query.num 1
  192.   else inc %TVMaze.Query.num
  193.   if (%TVMaze.Query.num > 6) {
  194.     unset %TVMaze.Query.num
  195.     .timerTVMaze.Query.Repeat 1 1 TVMaze.Json -u $1 http://api.tvmaze.com/search/shows?q= $+ $2-
  196.   }
  197.   var %name TVMaze.Query
  198.   if ($json(%name,0,show,name)) {
  199.     .timertvmaze.waiting.to.query off
  200.     var %total
  201.     var %i 0
  202.     while (%i < $TVMaze.Query.Results) {
  203.  
  204.       if ($json(%name,%i,show,name)) {
  205.         hadd TVMaze Query. $+ %i $+ .name $json(%name,%i,show,name)
  206.         hadd TVMaze Query. $+ %i $+ .url $json(%name,%i,show,url)
  207.         hadd TVMaze Query. $+ %i $+ .type $json(%name,%i,show,type)
  208.         hadd TVMaze Query. $+ %i $+ .language $json(%name,%i,show,language)
  209.  
  210.         var %genres
  211.         var %a 0
  212.         while (%a < 5) {
  213.           if ($json(%name,%i,show,genres,%a)) set %genres $addtok(%genres,$ifmatch,44)
  214.           inc %a
  215.         }
  216.         hadd TVMaze Query. $+ %i $+ .genres %genres
  217.  
  218.         hadd TVMaze Query. $+ %i $+ .status $json(%name,%i,show,status)
  219.         hadd TVMaze Query. $+ %i $+ .premiered $json(%name,%i,show,premiered)
  220.         hadd TVMaze Query. $+ %i $+ .network $json(%name,%i,show,network,name)
  221.         hadd TVMaze Query. $+ %i $+ .country $json(%name,%i,show,network,country,code)
  222.         hadd TVMaze Query. $+ %i $+ .id $gettok($json(%name,%i,show,_links,self,href),$gettok($json(%name,%i,show,_links,self,href),0,47),47)
  223.       }
  224.       else break
  225.       inc %i
  226.     }
  227.     jsonclose %name
  228.     .timerTVMaze.Complete 1 1 TVMaze.Complete
  229.   }
  230. }
  231.  
  232. alias TVMaze.Get.PrevEP {
  233.   ;called from another alias to get the previous episode's information
  234.  
  235.   var %name TVMaze.PrevEP
  236.   if (!%TVMaze.PrevEP.num) set %TVMaze.PrevEP.num 1
  237.   else inc %TVMaze.PrevEP.num
  238.   if (%TVMaze.PrevEP.num > 6) {
  239.     unset %TVMaze.PrevEP.num
  240.     .timerTVMaze.PrevEP.Repeat -m 1 500 TVMaze.Json -u TVMaze.PrevEP $hget(TVMaze,PrevEP)
  241.   }
  242.   if ($json(%name,id)) {
  243.     .timerTVMaze.PrevEP.Repeat off
  244.     .timerTVMaze.Waiting.to.Complete.PrevEP off
  245.     .timer 1 0 jsonclose %name
  246.  
  247.     hadd TVMaze PrevEP.Name $json(%name,name)
  248.     hadd TVMaze PrevEP.Season $iif($len($json(%name,season)) == 1,0 $+ $json(%name,season),$json(%name,season))
  249.     hadd TVMaze PrevEP.number $iif($len($json(%name,number)) == 1,0 $+ $json(%name,number),$json(%name,number))
  250.     hadd TVMaze PrevEP.airdate $json(%name,airdate)
  251.     hadd TVMaze PrevEP.summary $remove($json(%name,summary),<p>,</p>)
  252.  
  253.     hdec TVMaze Waiting
  254.     .timer 1 0 if (!$hget(TVMaze,Waiting)) .timerTVMaze.Complete 1 1 TVMaze.Complete
  255.   }
  256. }
  257. alias TVMaze.Get.NextEP {
  258.   ;;called from another alias to get the next episode's information
  259.  
  260.   var %name TVMaze.NextEP
  261.   if (!%TVMaze.NextEP.num) set %TVMaze.NextEP.num 1
  262.   else inc %TVMaze.NextEP.num
  263.   if (%TVMaze.NextEP.num > 6) {
  264.     unset %TVMaze.NextEP.num
  265.     .timerTVMaze.NextEP.Repeat 1 1 TVMaze.Json -u TVMaze.NextEP $hget(TVMaze,NextEP)
  266.   }
  267.   if ($json(%name,id)) {
  268.     .timerTVMaze.NextEP.Repeat off
  269.     .timerTVMaze.Waiting.to.Complete.NextEP off
  270.     .timer 1 0 jsonclose %name
  271.  
  272.     hadd TVMaze NextEP.Name $json(%name,name)
  273.     hadd TVMaze NextEP.Season $iif($len($json(%name,season)) == 1,0 $+ $json(%name,season),$json(%name,season))
  274.     hadd TVMaze NextEP.number $iif($len($json(%name,number)) == 1,0 $+ $json(%name,number),$json(%name,number))
  275.     hadd TVMaze NextEP.airdate $json(%name,airdate)
  276.     hadd TVMaze NextEP.airtime $json(%name,airtime)
  277.     hadd TVMaze NextEP.airstamp $json(%name,airstamp)
  278.     hadd TVMaze NextEP.summary $remove($json(%name,summary),<p>,</p>)
  279.  
  280.     hdec TVMaze Waiting
  281.     .timer 1 0 if (!$hget(TVMaze,Waiting)) .timerTVMaze.Complete 1 1 TVMaze.Complete
  282.   }
  283. }
  284. alias -l quo if ($1-) return " $+ $1- $+ "
  285. alias -l paren {
  286.   if ($3) return $2 $+ $1 $+ $3
  287.   elseif ($2) return $2 $+ $1 $+ $2
  288.   elseif ($1 != $null) return ( $+ $1- $+ )
  289. }
  290. alias -l meridiemhour {
  291.   ;converts 24 hour into 12 hour
  292.   if ($1) {
  293.     var %h $gettok($1,1,58)
  294.     var %m $gettok($1,2,58)
  295.     if (%h < 13) return $+($1,am)
  296.     else return $+($calc(%h - 12),:,%m,pm)
  297.   }
  298. }
  299. alias -l timeleft {
  300.   if (!$1) { return 0 }
  301.   if ($1) && ($1 !isnum) { return 0 }
  302.   var %s = $nduration($calc($1 - $ctime))
  303.   return %s
  304.   var %s = $replacex(%s,wks,$chr(32) weeks.,wk,$chr(32) week.)
  305.   var %s = $replacex(%s,days,$chr(32) days.,day,$chr(32) day.)
  306.   if (*min* iswm %s) { var %s = $replacex(%s,hrs,$chr(32) hours.,hr,$chr(32) hour.) }
  307.   if (*min* !iswm %s) { var %s = $replacex(%s,hrs,$chr(32) hours,hr,$chr(32) hour) }
  308.   if (*sec* iswm %s) { var %s = $replacex(%s,mins,$chr(32) minutes.,min,$chr(32) minute.) }
  309.   if (*sec* !iswm %s) { var %s = $replacex(%s,mins,$chr(32) minutes,min,$chr(32) minute) }
  310.   var %s = $replacex(%s,secs,$chr(32) seconds,sec,$chr(32) second)
  311.   var %s = $replace(%s,$chr(46),$chr(44))
  312.   if (%s) { return %s }
  313.   else { return 0 }
  314. }
  315. alias -l nduration {
  316.   if (!$1) { return 0 }
  317.   if ($1) && ($1 !isnum) { return 0 }
  318.   if ($1 >= 31557600) {
  319.     var %y = $floor($calc($1 / 31557600))
  320.     return %y year $+ $iif(%y != 1,s) $+ $chr(44) $duration($calc($1 % 31557600))
  321.   }
  322.   if ($1 >= 2629800) {
  323.     var %m = $floor($calc($1 / 2629800))
  324.     if (%m > 1) return over %m months
  325.     else return %m month $+ $iif(%m != 1,s) $+ $chr(44) $duration($calc($1 % 2629800))
  326.   }
  327.   else { return $duration($1) }
  328. }
  329.  
  330.  
  331.  
  332. ;http://hawkee.com/snippet/10194/
  333. alias -l JSONOpen {
  334.   var %switches = -
  335.   if (-* iswm $1) {
  336.     %switches = $1
  337.     tokenize 32 $2-
  338.   }
  339.   var %com = JSONHandler:: $+ $1, %error, %file, %rem
  340.   var %init = function init(a,b){errortext="";data="";url=b ? b : "";method="GET";headers=[];parsedJSON={};status=a;fso=new ActiveXObject("Scripting.FileSystemObject")}
  341.   var %read = function readFile(filename){var ado=new ActiveXObject("ADODB.Stream");ado.CharSet="utf-8";ado.Open();ado.LoadFromFile(filename);if(!ado.EOF){data=ado.ReadText();}ado.close()}
  342.   var %json = "object"!==typeof JSON&&(JSON={});(function(){function m(a){return 10>a?"0"+a:a}function t(a){p.lastIndex=0;return p.test(a)?'"'+a.replace(p,function(a){var c=u[a];return"string"===typeof c?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+a+'"'}function q(a,l){var c,d,h,r,g=e,f,b=l[a];b&&"object"===typeof b&&"function"===typeof b.toJSON&&(b=b.toJSON(a));"function"===typeof k&&(b=k.call(l,a,b));switch(typeof b){case "string":return t(b);case "number":return isFinite(b)?String(b):"null";case "boolean":case "null":return String(b);case "object":if(!b)return"null";e+=n;f=[];if("[object Array]"===Object.prototype.toString.apply(b)){r=b.length;for(c=0;c<r;c+=1)f[c]=q(c,b)||"null";h=0===f.length?"[]":e?"[\n"+e+f.join(",\n"+e)+"\n"+g+"]":"["+f.join(",")+"]";e=g;return h}if(k&&"object"===typeof k)for(r=k.length,c=0;c<r;c+=1)"string"===typeof k[c]&&(d=k[c],(h=q(d,b))&&f.push(t(d)+(e?": ":":")+h));else for(d in b)Object.prototype.hasOwnProperty.call(b,d)&&(h=q(d,b))&&f.push(t(d)+(e?": ":":")+h);h=0===f.length?"{}":e?"{\n"+e+f.join(",\n"+e)+"\n"+g+"}":"{"+f.join(",")+"}";e=g;return h}}"function"!==typeof Date.prototype.toJSON&&(Date.prototype.toJSON=function(){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+m(this.getUTCMonth()+1)+"-"+m(this.getUTCDate())+"T"+m(this.getUTCHours())+":"+m(this.getUTCMinutes())+":"+m(this.getUTCSeconds())+"Z":null},String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(){return this.valueOf()});var s,p,e,n,u,k;"function"!==typeof JSON.stringify&&(p=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,u={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},JSON.stringify=function(a,l,c){var d;n=e="";if("number"===typeof c)for(d=0;d<c;d+=1)n+=" ";else"string"===typeof c&&(n=c);if((k=l)&&"function"!==typeof l&&("object"!==typeof l||"number"!==typeof l.length))throw Error("JSON.stringify");return q("",{"":a})});"function"!==typeof JSON.parse&&(s=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,JSON.parse=function(a,e){function c(a,d){var g,f,b=a[d];if(b&&"object"===typeof b)for(g in b)Object.prototype.hasOwnProperty.call(b,g)&&(f=c(b,g),void 0!==f?b[g]=f:delete b[g]);return e.call(a,d,b)}var d;a=String(a);s.lastIndex=0;s.test(a)&&(a=a.replace(s,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)}));if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return d=eval("("+a+")"),"function"===typeof e?c({"":d},""):d;throw new SyntaxError("JSON.parse");})})();
  343.   var %xhr = function xhr(){var a,b=['MSXML2.XMLHTTP.6.0','MSXML2.XMLHTTP.3.0','Microsoft.XMLHTTP'],c;for(a=0;a<b.length;a++){try{c=new ActiveXObject(b[a]);break}catch(e){}}if(typeof c==="undefined"){errortext = "Unable to locate an XMLHTTP object for use"}else{c.open(method,url,false);for(a=0;a<headers.length;a++){c.setRequestHeader(headers[a][0],headers[a][1])}c.send(data);if(c.status!==200){errortext="Unable to retrieve data - Server Error: " + c.status}else{status="Parsed";try{parsedJSON=JSON.parse(c.responseText)}catch(ee){errortext="Unable to parse Retrieved Data"}}}}
  344.   if (!$regex(%switches, /^-[ufbwd]*$/)) {
  345.     %error = Invalid switches specified
  346.   }
  347.   elseif ($regex(%switches, /([ufbwd])\1/)) {
  348.     %error = Duplicate switch specified ( $+ $regml(1) $+ )
  349.   }
  350.   elseif ($regex(%switches, /([ufb])/g) > 1) {
  351.     %error = Conflicting switches specified (- $+ $regml(1) $+ , - $+ $regml(2) $+ $iif($regml(3), $chr(44) - $+ $v1) $+ )
  352.   }
  353.   elseif (w isin %switches && u !isin %switches) {
  354.     %error = Invalid switch (-w is only for use with -u)
  355.   }
  356.   elseif ($0 < 2) {
  357.     %error = Required parameters missing
  358.   }
  359.   elseif (!$regex($1,/^[a-z\d_.-]+$/i)) {
  360.     %error = Invalid name specified (Can only contant letters, numbers, _, ., and -)
  361.   }
  362.   elseif ($com(%com)) {
  363.     %error = Specified name in use
  364.   }
  365.   elseif (u isin %switches && $0 > 2) {
  366.     %error = Invalid URL specified. (Contains Spaces: $2-)
  367.   }
  368.   elseif (f isin %switches && !$isfile($2-)) {
  369.     %error = File not found: $2-
  370.   }
  371.   elseif (b isin %switches && &* !iswm $2) {
  372.     %error = Invalid binary variable specified (No '&' Prefix)
  373.   }
  374.   elseif (b isin %switches && $0 > 2) {
  375.     %error = Invalid binary variable specified (Contains Spaces: $2-)
  376.   }
  377.   elseif (b isin %switches && $bvar($2, 0) < 1) {
  378.     %error = Invalid binary variable specified (No content)
  379.   }
  380.   elseif (!$JSON::ComOpen(%com, MSScriptControl.ScriptControl) || $comerr) {
  381.     %error = Unable to create an instance o' MSScriptControl.ScriptControl
  382.   }
  383.   elseif (!$com(%com, language, 4, bstr, jscript) || $comerr) {
  384.     %error = Unable to set ScriptControl's language to Javascript
  385.   }
  386.   elseif (!$com(%com, addcode, 1, bstr, %init) || $comerr) {
  387.     %error = Unable to add init() to ScriptControl
  388.   }
  389.   elseif (!$com(%com, addcode, 1, bstr, %xhr) || $comerr) {
  390.     %error = Unable to add xhr() to ScriptControl
  391.   }
  392.   elseif (!$com(%com, addcode, 1, bstr, %read) || $comerr) {
  393.     %error = Unable to add readFile() to ScriptControl
  394.   }
  395.   elseif (!$com(%com, ExecuteStatement, 1, bstr, %JSON) || $comerr) {
  396.     %error = Unable to Initalize the JSON parser object
  397.   }
  398.   elseif (!$com(%com, ExecuteStatement, 1, bstr, $iif(u isin %switches, $+(init,$chr(40), "XHR", $chr(44), $qt($JSON::Escape($2)),$chr(41)), $+(init,$chr(40), "Parsed", $chr(44), "", $chr(41)))) || $comerr) {
  399.     %error = Unable to initalize variables for ScriptControl
  400.   }
  401.   else {
  402.     if (u isin %switches) {
  403.       if (w !isin %switches) {
  404.         var %i = $com(%com, ExecuteStatement, 1, bstr, $+(xhr,$chr(40),$chr(41)))
  405.         if (!%i || $comerr) {
  406.           %error = Unable to retrieve data from $2 :: $com(%com).error :: $com(%com).errortext
  407.         }
  408.         elseif (!$com(%com, eval, 1, bstr, errortext) || $com(%com).result) {
  409.           %error = Unable to retrieve data $+ $iif($v1,: $v1,)
  410.         }
  411.       }
  412.     }
  413.     else {
  414.       %file = $JSON::File($1)
  415.       if (f isin %switches) {
  416.         %file = $longfn($2)
  417.       }
  418.       elseif (b isin %switches) {
  419.         bwrite $qt(%file) 0 -1 $2
  420.         %rem = $true
  421.       }
  422.       else {
  423.         write -n $qt(%file) $2-
  424.         %rem = $true
  425.       }
  426.       if (!$com(%com, ExecuteStatement, 1, bstr, $JSON::Funct(readFile, $qt($JSON::Escape(%file)))) || $comerr) {
  427.         %error = Unable to read contents o' data-passing file
  428.       }
  429.       elseif (!$com(%com, ExecuteStatement, 1, bstr, $JSON::Funct(parsedJSON=JSON.parse,data)) || $comerr) {
  430.         %error = Unable to parse data into valid JSON
  431.       }
  432.     }
  433.     if (d isin %switches) {
  434.       $+(.timer,%com) 1 0 JSONClose $1
  435.     }
  436.   }
  437.   :error
  438.   %error = $iif($error, $v1, %error)
  439.   if (%rem && %file && $isfile(%file)) {
  440.     .remove $qt(%file)
  441.   }
  442.   if (%error) {
  443.     if ($timer(%com)) { $+(.timer,%com) off }
  444.     if ($com(%com)) {
  445.       set -eu0 $+(%,%com,::error) %error
  446.       .comclose $v1
  447.     }
  448.     else {
  449.       set -eu0 %JSONError %error
  450.     }
  451.   }
  452. }
  453. alias -l JSONURLOption {
  454.   var %com = JSONHandler:: $+ $1, %error, %head, %value, %x = 2
  455.  
  456.   if (!$com(%com)) {
  457.     return
  458.   }
  459.   unset % [ $+ [ %com ] $+ ] ::error
  460.   if ($0 < 3) {
  461.     %error = Missing parameters
  462.   }
  463.   elseif (!$com(%com, eval, 1, bstr, status) || $com(%com).result != XHR) {
  464.     %error = HTTP Request already completed or wasn't specified
  465.   }
  466.   elseif ($2 == method) {
  467.     if (!$regex($3-, /^(?:GET|POST|PUT|DELETE)$/i)) {
  468.       %error = Invalid HTTP Request method Specified: $3-
  469.     }
  470.     elseif (!$com(%com, ExecuteStatement, 1, bstr, method=" $+ $3 $+ ") || $comerr) {
  471.       %error = Unable to set HTTP Request method
  472.     }
  473.   }
  474.   else {
  475.     if (!$com(%com, ExecuteStatement, 1, bstr, $JSON::Funct(headers.push,[ $+ $qt($JSON::Escape($2)), $qt($JSON::Escape($3-)) $+ ])) || $comerr) {
  476.       %error = Unable to set HTTP Header: %head $+ : $+ %value
  477.     }
  478.   }
  479.   :error
  480.   %error = $iif($error, $v1, %error)
  481.   if (%error) {
  482.     reseterror
  483.     set -e $+(%,%com,::Error) %error
  484.   }
  485. }
  486. alias -l JSONGet {
  487.   var %switches -
  488.   if (-* iswm $1) {
  489.     %switches = $1
  490.     tokenize 32 $2-
  491.   }
  492.   var %com = JSONHandler:: $+ $1
  493.   var %file = $JSON::File($1)
  494.   var %error
  495.   var %rem
  496.   if ($com(%com)) {
  497.     if ($com(%com, eval, 1, bstr, status) && $com(%com).result !== XHR) {
  498.       %error = HTTP Request already completed or wasn't specified
  499.     }
  500.     elseif (!$regex(%switches, /^-[bf]*$/)) {
  501.       %error = Invalid switches specified
  502.     }
  503.     elseif ($regex(%switches, /([bf])\1/)) {
  504.       %error = Duplicate switch specified ( $+ $regml(1) $+ )
  505.     }
  506.     elseif ($regex(%switches, /([bf])/g) > 1) {
  507.       %error = Conflicting switches specified (- $+ $regml(1) $+ , - $+ $regml(2) $+ )
  508.     }
  509.     elseif (b isin %switches && &* !iswm $2) {
  510.       %error = Invalid binary variable specified (No '&' Prefix)
  511.     }
  512.     elseif (b isin %switches && $0 > 2) {
  513.       %error = Invalid binary variable specified (Contains Spaces: $2-)
  514.     }
  515.     elseif (f isin %switches && !$isfile($2-)) {
  516.       %error = File not found: $2-
  517.     }
  518.     else {
  519.       if (b isin %switches && $bvar($2,0)) {
  520.         bwrite $qt(%file) 0 -1 $2
  521.         %rem = $true
  522.       }
  523.       elseif (f isin %switches) {
  524.         %file = $2-
  525.       }      
  526.       elseif ($2-) {
  527.         write -n $qt(%file) $2-
  528.         %rem = $true
  529.       }
  530.       %file = $longfn(%file)
  531.       if ($isfile(%file) && (!$com(%com, ExecuteStatement, 1, bstr, $JSON::Funct(readFile,$qt($JSON::Escape(%file)))) || $comerr)) {
  532.         %error = Unable to pass data to JSON Handler
  533.       }
  534.       elseif (!$com(%com, ExecuteStatement, 1, bstr, xhr $+ $chr(40) $+ $chr(41)) || $comerr) {
  535.         %error = Unable to retrieve data from specified URL :: $com(%com).error :: $com(%com).errortext    
  536.       }
  537.       elseif (!$com(%com, eval, 1, bstr, errortext) || $com(%com).result) {
  538.         %error = $v1
  539.       }
  540.       if (%rem && $isfile(%file)) { .remove %file }
  541.     }
  542.   }
  543.   :error
  544.   %error = $iif($error, $v1, %error)
  545.   if (%error) {
  546.     reseterror
  547.     set -eu0 $+(%,%com,::Error) %error
  548.   }
  549. }
  550. alias -l JSON {
  551.   var %com, %x = 1, %i = 0, %get = parsedJSON, %tok, %res
  552.   if ($regex($1,/^\d+$/) && $0 === 1) {
  553.     while ($com(%x)) {
  554.       if (JSONHandler::* iswm $v1) {
  555.         %com = $v2
  556.         inc %i
  557.         if (%i === $1) { return %com }
  558.       }
  559.       inc %x
  560.     }
  561.     return $iif($1 == 0, %i)
  562.   }
  563.   elseif ($regex($1, /^JSONHandler::CHILD::([^:]+)::(.*)$/)) {
  564.     %com = $regml(1)
  565.     %get = $regml(2)
  566.   }
  567.   else {
  568.     %com = JSONHandler:: $+ $1
  569.   }
  570.   if ($com(%com)) {
  571.     if ($0 == 1) {
  572.       if ($prop == isChild) {
  573.         return $iif($regex($1, /^JSONHandler::CHILD::([^:]+)::(.*)$/), $true, $false)
  574.       }
  575.       elseif ($prop == error) {
  576.         return $iif($(,$+(%,%com,::error)), $true,$false)
  577.       }
  578.       elseif ($prop == errortext) {
  579.         return $(,$+(%,%com,::error))
  580.       }
  581.       elseif ($com($1)) {
  582.         return $1
  583.       }
  584.     }
  585.     elseif (!$com(%com, eval, 1, bstr, status) || $com(%com).result != parsed) {
  586.       set -eu0 $+(%,%com,::error) JSON Handler waiting for HTTP Request
  587.     }
  588.     else {
  589.       %x = 2
  590.       while (%x <= $0) {
  591.         %tok = $(,$ $+ %x)
  592.         if (!$regex(%tok, /^\d+$/)) {
  593.           %tok = $qt($replace(%tok,\,\\,",\"))
  594.         }
  595.         %get = $+(%get,[,%tok,])
  596.         inc %x
  597.       }
  598.       if (!$com(%com, eval, 1, bstr, %get) || $comerr) {
  599.         set -e $+(%,%com,::error) Invalid Item|index specified
  600.       }
  601.       else {
  602.         %res = $com(%com).result
  603.         if (%res == [object]) {
  604.           return JSONHandler::CHILD:: $+ $1 $+ :: $+ %get
  605.         }
  606.         else {
  607.           return %res
  608.         }
  609.       }
  610.     }
  611.   }
  612. }
  613. alias -l JSONClose {
  614.   var %com = JSONHandler:: $+ $1
  615.   unset % [ $+ [ %com ] $+ ] ::*
  616.   if ($com(%com)) { .comclose $v1 }
  617.   if ($timer(%com)) { $+(.timer,%com) off }
  618. }
  619. alias -l JSONList {
  620.   var %x = 1, %i = 0
  621.   while ($com(%x)) {
  622.     if (JSONHandler::* iswm $v1) {
  623.       inc %i
  624.       echo $color(info text) -a * # $+ %i : $regsubex($v2, /^JSONHandler::/,)
  625.     }
  626.     inc %x
  627.   }
  628.   if (!%i) {
  629.     echo $color(info text) -a * No active JSON handlers
  630.   }  
  631. }
  632. on *:Start: unset %JSONHandler::*
  633. alias -l JSON::ComOpen { .comopen $1- | if ($com($1) && !$comerr) { return $true } | :error | reseterror | if ($com($1)) { .comclose $1 } }
  634. alias -l JSON::Escape { return $replace($1,\,\\,",\") }
  635. alias -l JSON::File { var %a = 1 | while ($isfile(JSON $+ $1 $+ %a $+ .json)) { inc %a } | return $+(JSON, $1, %a, .json) }
  636. alias -l JSON::Funct { var %a = $1 $+ $chr(40), %i = 1 | while (%i < $0) { inc %i | %a = $+(%a,$iif(%i > 2,$chr(44)),$(, $ $+ %i)) } | return %a $+ $chr(41) }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement