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