From 545419e3649fc79878b63b13e95cd7da0320e160 Mon Sep 17 00:00:00 2001 From: deuce <> Date: Fri, 15 Jun 2012 02:15:41 +0000 Subject: [PATCH] Move callsign lookups into a separate library... --- exec/ircbots/ham/ham.js | 157 ++++------------------------------------ exec/load/callsign.js | 122 +++++++++++++++++++++++++++++++ 2 files changed, 137 insertions(+), 142 deletions(-) create mode 100644 exec/load/callsign.js diff --git a/exec/ircbots/ham/ham.js b/exec/ircbots/ham/ham.js index 7868c2e2ff..5fc1eec0c3 100644 --- a/exec/ircbots/ham/ham.js +++ b/exec/ircbots/ham/ham.js @@ -1,5 +1,7 @@ if(!js.global || js.global.HTTPRequest==undefined) - load("http.js"); + js.global.load("http.js"); +if(!js.global || js.global.USCallsign==undefined) + js.global.load("callsign.js"); // Comment these... //Bot_Commands={}; @@ -169,173 +171,44 @@ Bot_Commands["CALLSIGN"].command = function (target,onick,ouh,srv,lvl,cmd) { return true; } - function USCallsign(callsign, srv, target) { - var i; - var CookieRequest=new HTTPRequest(); - var m=CookieRequest.Get('http://wireless2.fcc.gov/UlsApp/UlsSearch/searchLicense.jsp'); - var jsess=''; - var cookies=['refineIndex=0']; - for(i in CookieRequest.response_headers) { - if(CookieRequest.response_headers[i].search(/^Set-Cookie:/i)!=-1) { - if(m=CookieRequest.response_headers[i].match(/^Set-Cookie:\s*(.*?);/)) { - cookies.push(m[1]); - if(m[1].search(/JSESSIONID_/)==0) - jsess=m[1]; - } - } - } - req=new HTTPRequest(); - req.SetupPost('http://wireless2.fcc.gov/UlsApp/UlsSearch/results.jsp;'+jsess, undefined, undefined, 'fiUlsSearchByType=uls_l_callsign++++++++++++++++&fiUlsSearchByValue='+callsign+'&fiUlsExactMatchInd=Y&hiddenForm=hiddenForm&jsValidated=true&x=0&y=0'); - req.request_headers.push("Cookie: "+cookies.join('; ')); - req.request_headers.push("Referer: http://wireless2.fcc.gov/UlsApp/UlsSearch/searchLicense.jsp"); - req.SendRequest(); - req.ReadResponse(); - - m=req.body.match(/license.jsp\?licKey=[^\s]*/g); - - if(m && m.length) { - var response=new HTTPRequest().Get('http://wireless2.fcc.gov/UlsApp/UlsSearch/'+m[m.length-1]); - m=response.match(/In the case of City, state and zip[^-]*?-->([\s\S]*?)<\/td>/); - if(m) { - var info=callsign+':'; - m[1]=m[1].replace(/<[^>]*>/g,''); - m[1]=m[1].replace(/[\r\n]/g,' '); - m[1]=m[1].replace(/\s+/g,' '); - info += m[1]; - - m=response.match(/>Type<\/td>[\s\S]*?>([^<&]*)[<&]/); - if(m) { - m[1]=m[1].replace(/<[^>]*>/g,''); - m[1]=m[1].replace(/[\r\n]/g,' '); - m[1]=m[1].replace(/\s+/g,' '); - info += ' - Type: '+m[1]; - } - - m=response.match(/<!--Example: Amateur Extra -->([^&<]*?)[&<]/); - if(m) { - m[1]=m[1].replace(/<[^>]*>/g,''); - m[1]=m[1].replace(/[\r\n]/g,' '); - m[1]=m[1].replace(/\s+/g,' '); - info += ' - Class: '+m[1]; - } - - m=response.match(/>Status<\/td>[\s\S]*?>([^<&]*)[<&]/); - if(m) { - m[1]=m[1].replace(/<[^>]*>/g,''); - m[1]=m[1].replace(/[\r\n]/g,' '); - m[1]=m[1].replace(/\s+/g,' '); - info += ' ('+m[1]+')'; - } - srv.o(target,info); - return true; - } - else { - return false; - } - } - else { - return false; - } - } - - function CanadaCallsign(callsign, srv, target) { - var result=new HTTPRequest().Post('http://apc-cap.ic.gc.ca/pls/apc_anon/query_amat_cs$callsign.actionquery','P_CALLSIGN='+callsign+'&P_SURNAME=&P_CITY=&P_PROV_STATE_CD=&P_POSTAL_ZIP_CODE=&Z_ACTION=QUERY&Z_CHK=0'); - var re=new RegExp("<a href=\"(query_amat_cs\\$callsign\\.QueryViewByKey\\?P_CALLSIGN="+callsign.toUpperCase()+"&Z_CHK=[0-9]+)\">"+callsign.toUpperCase()+"</a>"); - var m=result.match(re); - if(m!=null) { - result=new HTTPRequest().Get('http://apc-cap.ic.gc.ca/pls/apc_anon/'+m[1].replace(/&/g, '&')); - m=result.match(/Call Sign:[\s\S]*?\<td>([^<]+)<[\s\S]*?Amateur Name:[\s\S]*?\<td>([^<]+)<[\s\S]*?Address:[\s\S]*?\<td>([^<]+)<[\s\S]*?City:[\s\S]*?\<td>([^<]+)<[\s\S]*?Province:[\s\S]*?\<td>([^<]+)<[\s\S]*?Postal Code:[\s\S]*?\<td>([^<]+)<[\s\S]*?Qualifications:[\s\S]*?\<td>([^<]+)</); - if(m!=null) { - srv.o(target, (m[1]+": "+m[2]+", "+m[3]+", "+m[4]+", "+m[5]+" "+m[6]+". "+m[7]).replace(/ /g,'')); - return true; - } - else { - return false; - } - } - else { - return false; - } - } - - function HamcallCallsign(callsign, srv, target) { - var req=new HTTPRequest(); - var config = new File(system.ctrl_dir + js.global.config_filename); - if(!config.open('r')) { - log("Unable to open config!"); - return false; - } - - req.SetupGet('http://hamcall.net/call?callsign='+callsign); - req.request_headers.push("Cookie: callsign="+config.iniGetValue("module_Ham", 'callsign')+'; password='+config.iniGetValue("module_Ham", 'password')); - req.SendRequest(); - req.ReadResponse(); - - config.close(); - - var m=req.body.match(/Tell them you found it on HamCall.net, the world's largest callsign database!.*?<BR>([\s\S]*?)(<font size|<\/td>)/); - if(m) { - m[1]=m[1].replace(/<[^>]*>/g,' '); - m[1]=m[1].replace(/[\r\n]/g,' '); - m[1]=m[1].replace(/\s+/g,' '); - m[1] += ' (Found on HamCall.net)'; - srv.o(target, m[1]); - return true; - } - else { - return false; - } - } - - function USSpecialEvent(callsign,src,target) { - var result=new HTTPRequest().Post('http://www.arrl.org/special-event-stations', '_method=POST&data%5BSearch%5D%5Bcall_sign%5D='+callsign+'&data%5BSearch%5D%5Bkeywords%5D=&data%5BLocation%5D%5Bzip%5D=&data%5BLocation%5D%5Barea%5D=&data%5BLocation%5D%5Bcity%5D=&data%5BLocation%5D%5Bstate%5D=&data%5BLocation%5D%5Bdivision_id%5D=&data%5BLocation%5D%5Bsection_id%5D=&data%5BLocation%5D%5Bcountry%5D=&data%5BDate%5D%5Bstart%5D=&data%5BDate%5D%5Bend%5D='); - var m=result.match(/<h3>\s*([\s\S]*?)<\/p/); - if(m!=null) { - m[1]=m[1].replace(/<[^>]*>/g,''); - m[1]=m[1].replace(/[\r\n]/g,' '); - m[1]=m[1].replace(/\s+/g,' '); - srv.o(target, m[1]); - return true; - } - else { - return false; - } - } - - var matched=false; - if(!matched && callsign.search(/(C[F-K]|C[Y-Z]|V[A-GOXY]|X[J-O])/)==0) { + var matched; + if(matched==undefined && callsign.search(/(C[F-K]|C[Y-Z]|V[A-GOXY]|X[J-O])/)==0) { try { - matched=CanadaCallsign(callsign, srv, target); + matched=CanadaCallsign(callsign); + srv.o(target, (matched.callsign+": "+matched.name+", "+matched.address+", "+matched.city+", "+matched.province+" "+matched.postalzip+". "+matched.qualifications)); } catch(e) { srv.o(target, "Failed to look up Canadian Callsign: "+e); } } - if(!matched && callsign.search(/^\s*(K|N|W)[0-9].\s*$/)==0) { + if(matched==undefined && callsign.search(/^\s*(K|N|W)[0-9].\s*$/)==0) { try { matched=USSpecialEvent(callsign,srv,target); + srv.o(target, matched.string); } catch(e) { srv.o(target, "Failed to look up US Special Event Callsign: "+e); } } - if(!matched && callsign.search(/(A[A-L]|K|N|W)/)==0) { + if(matched==undefined && callsign.search(/(A[A-L]|K|N|W)/)==0) { try { - matched=USCallsign(callsign,srv,target); + matched=USCallsign(callsign); + srv.o(target, matched.callsign+':'+matched.address+' - Type: '+matched.type+' - Class: '+matched.class+' ('+matched.status+')'); } catch(e) { srv.o(target, "Failed to look up US Callsign: "+e); } } - if(!matched) { + if(matched==undefined) { try { matched=HamcallCallsign(callsign, srv, target); + srv.o(target, matched.string); } catch(e) { srv.o(target, "Failed to look up Callsign on HamCall: "+e); } } - if(!matched) { + if(matched==undefined) { srv.o(target, "Unable to match callsign in any databases."); } diff --git a/exec/load/callsign.js b/exec/load/callsign.js new file mode 100644 index 0000000000..16498e1d37 --- /dev/null +++ b/exec/load/callsign.js @@ -0,0 +1,122 @@ +function USCallsign(callsign) { + var ret={callsign:callsign}; + var i; + var CookieRequest=new HTTPRequest(); + var m=CookieRequest.Get('http://wireless2.fcc.gov/UlsApp/UlsSearch/searchLicense.jsp'); + var jsess=''; + var cookies=['refineIndex=0']; + for(i in CookieRequest.response_headers) { + if(CookieRequest.response_headers[i].search(/^Set-Cookie:/i)!=-1) { + if(m=CookieRequest.response_headers[i].match(/^Set-Cookie:\s*(.*?);/)) { + cookies.push(m[1]); + if(m[1].search(/JSESSIONID_/)==0) + jsess=m[1]; + } + } + } + req=new HTTPRequest(); + req.SetupPost('http://wireless2.fcc.gov/UlsApp/UlsSearch/results.jsp;'+jsess, undefined, undefined, 'fiUlsSearchByType=uls_l_callsign++++++++++++++++&fiUlsSearchByValue='+callsign+'&fiUlsExactMatchInd=Y&hiddenForm=hiddenForm&jsValidated=true&x=0&y=0'); + req.request_headers.push("Cookie: "+cookies.join('; ')); + req.request_headers.push("Referer: http://wireless2.fcc.gov/UlsApp/UlsSearch/searchLicense.jsp"); + req.SendRequest(); + req.ReadResponse(); + + m=req.body.match(/license.jsp\?licKey=[^\s]*/g); + + if(m && m.length) { + var response=new HTTPRequest().Get('http://wireless2.fcc.gov/UlsApp/UlsSearch/'+m[m.length-1]); + m=response.match(/In the case of City, state and zip[^-]*?-->([\s\S]*?)<\/td>/); + if(m) { + m[1]=m[1].replace(/<[^>]*>/g,''); + m[1]=m[1].replace(/[\r\n]/g,' '); + m[1]=m[1].replace(/\s+/g,' '); + ret.address=m[1]; + + m=response.match(/>Type<\/td>[\s\S]*?>([^<&]*)[<&]/); + if(m) { + m[1]=m[1].replace(/<[^>]*>/g,''); + m[1]=m[1].replace(/[\r\n]/g,' '); + m[1]=m[1].replace(/\s+/g,' '); + ret.type=m[1]; + } + + m=response.match(/<!--Example: Amateur Extra -->([^&<]*?)[&<]/); + if(m) { + m[1]=m[1].replace(/<[^>]*>/g,''); + m[1]=m[1].replace(/[\r\n]/g,' '); + m[1]=m[1].replace(/\s+/g,' '); + ret.class=m[1]; + } + + m=response.match(/>Status<\/td>[\s\S]*?>([^<&]*)[<&]/); + if(m) { + m[1]=m[1].replace(/<[^>]*>/g,''); + m[1]=m[1].replace(/[\r\n]/g,' '); + m[1]=m[1].replace(/\s+/g,' '); + } + return ret; + } + } + throw("No ULS results"); +} + +function CanadaCallsign(callsign) { + var result=new HTTPRequest().Post('http://apc-cap.ic.gc.ca/pls/apc_anon/query_amat_cs$callsign.actionquery','P_CALLSIGN='+callsign+'&P_SURNAME=&P_CITY=&P_PROV_STATE_CD=&P_POSTAL_ZIP_CODE=&Z_ACTION=QUERY&Z_CHK=0'); + var re=new RegExp("<a href=\"(query_amat_cs\\$callsign\\.QueryViewByKey\\?P_CALLSIGN="+callsign.toUpperCase()+"&Z_CHK=[0-9]+)\">"+callsign.toUpperCase()+"</a>"); + var m=result.match(re); + if(m!=null) { + var ret={callsign:callsign}; + result=new HTTPRequest().Get('http://apc-cap.ic.gc.ca/pls/apc_anon/'+m[1].replace(/&/g, '&')); + result=result.replace(/ /g,' '); + result=result.replace(/\s+/g,' '); + m=result.match(/Call Sign:[\s\S]*?\<td>([^<]+)<[\s\S]*?Amateur Name:[\s\S]*?\<td>([^<]+)<[\s\S]*?Address:[\s\S]*?\<td>([^<]+)<[\s\S]*?City:[\s\S]*?\<td>([^<]+)<[\s\S]*?Province:[\s\S]*?\<td>([^<]+)<[\s\S]*?Postal Code:[\s\S]*?\<td>([^<]+)<[\s\S]*?Qualifications:[\s\S]*?\<td>([^<]+)</); + if(m!=null) { + ret.callsign=m[1]; + ret.name=m[2]; + ret.address=m[3]; + ret.city=m[4]; + ret.province=m[5]; + ret.postalzip=m[6]; + ret.qualifications=m[7]; + return ret; + } + } + throw("No IC results"); +} + +function HamcallCallsign(callsign) { + var req=new HTTPRequest(); + var config = new File(system.ctrl_dir + js.global.config_filename); + if(!config.open('r')) { + throw("Unable to open config!"); + } + + req.SetupGet('http://hamcall.net/call?callsign='+callsign); + req.request_headers.push("Cookie: callsign="+config.iniGetValue("module_Ham", 'callsign')+'; password='+config.iniGetValue("module_Ham", 'password')); + req.SendRequest(); + req.ReadResponse(); + + config.close(); + + var m=req.body.match(/Tell them you found it on HamCall.net, the world's largest callsign database!.*?<BR>([\s\S]*?)(<font size|<\/td>)/); + if(m) { + m[1]=m[1].replace(/<[^>]*>/g,' '); + m[1]=m[1].replace(/[\r\n]/g,' '); + m[1]=m[1].replace(/\s+/g,' '); + m[1] += ' (Found on HamCall.net)'; + return {callsign:callsign,string:m[1]}; + } + throw("No match"); +} + +function USSpecialEvent(callsign) { + var result=new HTTPRequest().Post('http://www.arrl.org/special-event-stations', '_method=POST&data%5BSearch%5D%5Bcall_sign%5D='+callsign+'&data%5BSearch%5D%5Bkeywords%5D=&data%5BLocation%5D%5Bzip%5D=&data%5BLocation%5D%5Barea%5D=&data%5BLocation%5D%5Bcity%5D=&data%5BLocation%5D%5Bstate%5D=&data%5BLocation%5D%5Bdivision_id%5D=&data%5BLocation%5D%5Bsection_id%5D=&data%5BLocation%5D%5Bcountry%5D=&data%5BDate%5D%5Bstart%5D=&data%5BDate%5D%5Bend%5D='); + var m=result.match(/<h3>\s*([\s\S]*?)<\/p/); + if(m!=null) { + m[1]=m[1].replace(/<[^>]*>/g,''); + m[1]=m[1].replace(/[\r\n]/g,' '); + m[1]=m[1].replace(/\s+/g,' '); + return {callsign:callsign,string:m[1]}; + } + throw("No match"); +} -- GitLab