Op Wikipedia staat een Lijst van Nederlandse gemeenten per provincie.
Het artikel van Wikipedia willen we kunnen uitlezen, en alle gemeenten en of nieuwe gemeenten kunnen inlezen in de database :
- 1. Inlezen van alle URL's;
- 2. Selectie op index maken van de URL's (alleen de provincies en gemeenten);
- 3. Import van gemeenten in de database;
- 4. Overzicht ingelezen gemeenten (groen), geweigerde gemeenten (rood), provincies (zwart).
Het opvragen van de HTML pagina :
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://nl.wikipedia.org/wiki/Nederlandse_gemeenten_per_provincie"); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); $html = curl_exec($ch); curl_close($ch);
De HTML content parsen naar een DOMDocument (Document Object Model) :
$dom = new DOMDocument(); @$dom->loadHTML($html);
Leuk truukje met xpath :
$xpath = new DOMXPath($dom); $hrefs = $xpath->evaluate("/html/body//a");
Het href attribuut van de gemeenten hebben allemaal de prefix "/wiki/" :
for ( $i = 0; $i < $hrefs->length; $i++ ) { $href = $hrefs->item($i); if ( substr($href->getAttribute('href'), 0, 6) == "/wiki/" ) $array_gemeenten[$i] = $href->nodeValue; }
Helaas zijn er nog er nog een paar url's maar die kunnen we handmatig via de index selectie uitsluiten :
Het totaal aantal gemeenten van het artikel op Wikipedia is op dit moment 430.
Charter Encoding
Sommige gemeenten hebben speciale tekens, we willen de gemeente opslaan met een UTF-8 Charter Encoding :
mysql_query("SET NAMES 'utf8'");
Een provincie niet inlezen als gemeente
In de index selectie staan provincies (e.g. Drenthe, Flevoland, Friesland etc.) deze willen we niet inlezen :
if ( ! in_array($value, $array_provincies) ) {}
Een gemeente met een naam gelijk aan de provincie wel inlezen
Hebben we net gezegd dat we de provincie niet inlezen, zijn er gemeenten met een naam gelijk aan de provincie (e.g. Groningen, Utrecht) :
if ( $previous_provincie_id == $provincie_id ) {}
Inlezen van "dubbele" gemeenten
Er zijn gemeenten die meerdere keren voorkomen. (e.g. de gemeente Bergen in Limburg en Noord-Holland)
Door de combinatie van description en provincie_id in de gemeenten tabel wordt deze gemeente toch als uniek beschouwd.
CREATE TABLE `gemeenten` ( `id` int(11) NOT NULL AUTO_INCREMENT, `provincie_id` int(11) NOT NULL, `description` varchar(255) CHARACTER SET utf8 NOT NULL, PRIMARY KEY (`id`), KEY `province_id` (`provincie_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;CREATE TABLE
provincies
(id
int(11) NOT NULL AUTO_INCREMENT,description
varchar(255) CHARACTER SET utf8 NOT NULL, PRIMARY KEY (id
) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;INSERT INTO
provincies
VALUES(1, 'Drenthe'); INSERT INTOprovincies
VALUES(2, 'Flevoland'); INSERT INTOprovincies
VALUES(3, 'Friesland'); INSERT INTOprovincies
VALUES(4, 'Gelderland'); INSERT INTOprovincies
VALUES(5, 'Groningen'); INSERT INTOprovincies
VALUES(6, 'Limburg'); INSERT INTOprovincies
VALUES(7, 'Noord-Brabant'); INSERT INTOprovincies
VALUES(8, 'Noord-Holland'); INSERT INTOprovincies
VALUES(9, 'Overijssel'); INSERT INTOprovincies
VALUES(10, 'Utrecht'); INSERT INTOprovincies
VALUES(11, 'Zeeland'); INSERT INTOprovincies
VALUES(12, 'Zuid-Holland');
Download : import_lijst_van_nederlandse_gemeenten_per_provincie.php
Meer informatie : Lijst van Nederlandse gemeenten - Wikipedia
Zie ook : Database van Nederlandse plaatsen