// Copyright (c) 2007 Legendum LLC // This code may be used for free, // provided this notice is included. var thisAPI = null; function API(token) { this.token = token; this.request = 1; this.transport = 'http://www.net-filter.com/api/'; this.callbacks = []; // Call an external JavaScript file to get JSON data this.script = function(file) { thisAPI = this; var element = document.createElement('SCRIPT'); element.src = this.transport + file; element.type = 'text/javascript'; var head=document.getElementsByTagName('HEAD')[0]; head.appendChild(element); } // Get the API token this.getToken = function() { return this.token; } // Get the API token for a username and password (async) this.getTokenForUser = function(args) { var username = args.username; var password = args.password; var request = this.request++; this.callbacks[request] = args.callback; this.script('token.cgi?callback=thisAPI.onToken&request=' + request + '&format=json&username=' + username + '&password=' + password); } // Send JSON token data to any callback function this.onToken = function(json) { this.token = json.token.text; var request = json.stats.request; if (this.callbacks[request]) this.callbacks[request].call(this, this.token); } // Get site channel report data for an API token (async) this.getChannelReports = function(caller, args, secs) { var site = args.site; var channel = args.channel ? args.channel : 0; var date = args.date ? args.date : 0; var start_date = args.start_date ? args.start_date : 0; var end_date = args.end_date ? args.end_date : 0; var group_by = args.group_by ? args.group_by : ''; var report = args.report; var request = this.request++; this.callbacks[request] = [args.callback, caller]; var url = 'sitester.cgi?callback=thisAPI.onJSON&request=' + request + '&format=json&token=' + this.token + '&site=' + site + '&channel=' + channel + '&date=' + date + '&start_date=' + start_date + '&end_date=' + end_date + '&group_by=' + group_by + '&report=' + report; this.script(url); if (secs) setInterval("thisAPI.script('" + url + "')", secs * 1000); } // Get site traffic data for an API token (async) this.getChannelTraffic = function(caller, args, secs) { var site = args.site; var date = args.date ? args.date : 0; var limit = args.limit ? args.limit : 100; var request = this.request++; this.callbacks[request] = [args.callback, caller]; var url = 'traffic.cgi?callback=thisAPI.onJSON&request=' + request + '&format=json&token=' + this.token + '&site=' + site + '&date=' + date + '&limit=' + limit; this.script(url); if (secs) setInterval("thisAPI.script('" + url + "')", secs * 1000); } // Return a JSON object to the calling object this.onJSON = function(json) { // Get the callback from the request ID var request = json.stats.request; var callback = this.callbacks[request]; if (callback) { // Call the callbback with the JSON data object callback[0].call(callback[1], json.site.channel); } } };