<?php /** * Here is the ianacclister class DocBlock * @package IANATools * @author Kevin Hagel <khote@mminternet.com> * @version $Revision: 2.0 $ * @since January 23, 2002 Rewritten: April 27, 2004 * * Goes to the iana country code listing page, reads in all the data and builds * a hash keyed on the two-letter country code. * * This class was originally designed to output an actual html table, but that's not * all that MVC is it? Now it just loads the information from IANA and builds a * country-code keyed hash. You decide yourself what to do with it. * * Modification History: * Apr 30, 2004 - Added 'code' => $code to the hash, some PHP functions don't like * or aren't as easy to use when keyed by the code, I decided to include it in * the record for each ccode to allow foreach($has as $cc=>$data).. $code=$data['code'] * * Example Usages: * * include_once ('$wherever/class.ianacclister.php'); * $lister = new ianacclister(); * $hash =& $lister->getHash(); * * $hash =& ianacclister::getHash(); */ require_once 'PEAR.php'; if (!defined(IANACCLISTER_CONSTANTS)) { define("IANACCLISTER_CONSTANTS", true); // Location of source define("IANACCLISTER_URL", "http://www.iana.org/cctld/cctld-whois.htm"); // Used to fix whois links define("IANACCLISTER_IANA_HOME", "http://www.iana.org/");
// Errors define("IANACCLISTER_ERROR", -1); define("IANACCLISTER_ERROR_URLFAILED", -10); } class ianacclister extends PEAR { /** * @access private * @var containing generated output */ var $_hash = NULL; var $error = NULL;
/** * Constructor * @param bool causes me to build the has on construction. * defaults to false; */ function ianacclister($autoload = FALSE) { $this->PEAR(); if($autoload) $this->_buildHash(); }
/** * builds the country codes hash, stores it in the class variable. * @access private */ function _buildHash() {
$this->_hash = array(); $fix = IANACCLISTER_IANA_HOME."root-whois"; $page = join('',file(IANACCLISTER_URL)); if(!$page) { $this->error = PEAR::raiseError("Unable To Access " . IANACCLISTER_URL); return; }
$search = array( "'[\n|\r|\n\r|\r\n]'", // dump all newlines NOW "'.*<BLOCKQUOTE>'i", // everything before <BLOCKQUOTE> inclusive "'<\/BLOCKQUOTE>.*'i", // everything after </BLOCKQUOTE> inclusive "'\s+'", // mult spaces "'&(nbsp|#160);'i", // &#nbsp; spaces to one actual space "'\s+&(nbsp|#150);\s+'i", // code for '-' to actual '-', dump lead/trail space "'<BR>'i", // Dump them all "'<A NAME=\".\"><\/A>'i", // internal links we don't want "'(<FONT FACE=\"Arial\">|<\/FONT>)'i", // dump the font stuff "'(<P>|</P>)'i", // should just be one "'\/root-whois'i", // fix to full URL "'<A HREF=\"(.*)\">'i", // extract the actual link "'\.(.{2})-'i", // extract country code itself "'<\/A>'i", // more garbage );
$replace= array( "", // newlines "", // before <BLOCKQUOTE> "", // after </BLOCKQUOTE> " ", // mult spaces to one space " ", // &#nbsp to space "-", // " – " to "-" "\n", // <BR> "", // name = "", // font stuff "", // <p> $fix, // from /root-whois/etc.htm to full url "\\1\n", // just keep the link part "\\1\n", // just keep the country code "%", // country name followed by extra newline and '%' for splitting ); $page = preg_replace($search,$replace,$page);
// // Ok, at this point the individual records are all stashed in the string, separated // by a '%' character, which we're going to split on. //
$prerecords = explode("%",$page); for($i=0;$i<count($prerecords);$i++) { $record = explode("\n",trim($prerecords[$i])); if(empty($record)) continue; $whoisurl = trim($record[0]); $ccode = trim($record[1]); $name = trim($record[2]); if(!empty($whoisurl)&&!empty($ccode)&&!empty($name)) $this->_hash[$ccode] = array("code" => $ccode, "name"=>$name, "whois"=>$whoisurl); } return $this->_hash; }
/** * Returns the hash, auto-creating it if * not currently set. */ function &getHash() { // are we being used as ianacclister::getHash() ? if (!isset($this) or get_class($this) != 'ianacclister') { $this = & new ianacclister(TRUE); return $this->_hash; } // check to see if hash has been build. if($this->_hash == NULL) $this->_buildHash(); return $this->_hash; }
} // class ianacclister ?>
|