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

в 14:14, , рубрики: php, Украина, метки: ,

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

Думаю, ни для кого не секрет, что сейчас у нас (на Украине) идут выборы (точнее, подсчет результатов); идут туго. Лень ждать окончательного результата, потому решил заняться этим сейчас. С сайта центризбиркома простым 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» режут глаза. Просто хотелось начать, а там, может, кто-нибудь по-нормальному оформит. Само-собой, любые дополнения приветствуются.

Мелкое уточнение. В таблице «uchastok» поле perc — явка по участку. в data — ссылки на строки партий и участков, и количество голосов.

Автор: nick4fake

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js