Сырые данные выборов-2012 на Украине (по участкам)

от автора

Сразу прошу прощения за сумбурность. Просто кое-где шило закололо, захотелось данных по участкам (в нормальном виде).

Думаю, ни для кого не секрет, что сейчас у нас (на Украине) идут выборы (точнее, подсчет результатов); идут туго. Лень ждать окончательного результата, потому решил заняться этим сейчас. С сайта центризбиркома простым php-скриптом данные льются в БД, откуда их можно вытащить и делать все, что захочется.

Тут данные (экспортированные в SQL через PMA)
Тут шаблон для БД (если вы будете сами сливать).

Код скрипта:

Простите быдлокодера

#!/usr/bin/php <?php $num = 225; $url = 'http://www.cvk.gov.ua/vnd2012/wp336pt001f01=900pf7331=%s.html'; $doc = new \DOMDocument;  $pdo = new PDO('mysql:host=localhost;dbname=vybory', 'vybory', 'vybory');  for ($i = 1; $i <= $num; $i++) { 	echo 'Округ ' . $i . "\n"; 	$page = sprintf($url, $i);  	$code = file_get_contents($page); 	$doc->loadHTML($code);  	$xpath = new \DOMXpath($doc); 	$table = $xpath->query('//div[@id="restab"]/table')->item(0); 	foreach ($table->childNodes as $node) { 		$id = trim($node->childNodes->item(0)->nodeValue); 		if (!is_numeric($id)) { 			continue; 		} 		$perc = trim($node->childNodes->item(2)->nodeValue) / 		        trim($node->childNodes->item(1)->nodeValue); 		$pdo->exec('insert into uchastok (perc, num, okrug) values ("' . $perc . '", "' . $id . '", "' . $i . '")'); 		$id = $pdo->lastInsertId();  		$pdo->beginTransaction(); 		for ($j = 3; $j < $node->childNodes->length; $j++) { 			$c = $node->childNodes->item($j)->nodeValue; 			$c = (int)trim($c); 			$pdo->exec('insert into data (id_uchastok, id_party, data) values ("' . $id . '", "' . ($j - 2) . '", "' . $c . '")'); 		} 		$pdo->commit(); 	} }  echo "\n"; exit(0); 

Да, код стрёмный. Да, таблицы вроде «uchastok» режут глаза. Просто хотелось начать, а там, может, кто-нибудь по-нормальному оформит. Само-собой, любые дополнения приветствуются.

ссылка на оригинал статьи http://habrahabr.ru/post/157185/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *