gnu-social/plugins/Irc/extlib/phergie/Phergie/Plugin/Tld/db.php

69 lines
1.7 KiB
PHP
Raw Normal View History

2010-08-05 00:02:24 +01:00
<?php
$dbFile = 'tld.db';
if (file_exists($dbFile)) {
exit;
}
$db = new PDO('sqlite:' . dirname(__FILE__) . '/' . $dbFile);
$query = '
CREATE TABLE tld (
2010-07-18 14:28:15 +01:00
tld VARCHAR(20),
type VARCHAR(20),
description VARCHAR(255)
2010-08-05 00:02:24 +01:00
)
';
$db->exec($query);
$insert = $db->prepare('
INSERT INTO tld (tld, type, description)
VALUES (:tld, :type, :description)
');
$contents = file_get_contents(
'http://www.iana.org/domains/root/db/'
);
libxml_use_internal_errors(true);
$doc = new DOMDocument;
$doc->loadHTML($contents);
libxml_clear_errors();
$descriptions = array(
'com' => 'Commercial',
'info' => 'Information',
'net' => 'Network',
'org' => 'Organization',
'edu' => 'Educational',
'name' => 'Individuals, by name'
);
$xpath = new DOMXPath($doc);
$rows = $xpath->query('//tr[contains(@class, "iana-group")]');
foreach (range(0, $rows->length - 1) as $index) {
$row = $rows->item($index);
$tld = strtolower(ltrim($row->childNodes->item(0)->textContent, '.'));
$type = $row->childNodes->item(1)->nodeValue;
if (isset($descriptions[$tld])) {
$description = $descriptions[$tld];
} else {
$description = $row->childNodes->item(2)->textContent;
$regex = '{(^(?:Reserved|Restricted)\s*(?:exclusively\s*)?'
. '(?:for|to)\s*(?:members of\s*)?(?:the|support)?'
. '\s*|\s*as advised.*$)}i';
$description = preg_replace($regex, '', $description);
$description = ucfirst(trim($description));
}
$data = array_map(
'html_entity_decode',
array(
'tld' => $tld,
'type' => $type,
'description' => $description
)
);
$insert->execute($data);
}