Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Следим за голосованием на «Россия 10»

Anna | 31.05.2014 | нет комментариев

Как и многие россияне, в последнее время я всякий день захожу проголосовать на сайт 10russia.ru. Если кто не в курсе, Россия 10 — всероссийский план, в рамках которого всякий может проголосовать за свой любимый географический либо архитектурный объект в России. Задача плана – выбор десяти новых визуальных символов России.
Мне показались необычными цифры в ТОП2 в голосовании, и я решил посмотреть, как они меняются. Было немного времени, и на скорую руку написал небольшой парсер, тот, что сберегает раз в 2-3 секунды данные по числу голосов на сайте и sms. Для отображения этих данных сотворил сайт (За основу был взят дизайн и основа графика отсель habrahabr.ru/post/176547/. Верю, автор будет не вопреки ). Денег не хотелось тратить, а в распоряжении был только индивидуальный слабенький VDS, тот, что бы стремительно лёг, если бы данные генерировались динамически. Следственно решено было обойтись статическим html и генерацией по крону json файлов. Увлекательно будет посмотреть, какую нагрузку выдержит VDS без метаморфозы нынешней конфигурации (CPU 300MHz, RAM 128 Mb), рассматривая, что там вертится два маленьких обслуживания и один малопосещаемый сайт. В конце голосования выложу, если кому нужно, все полученные данные голосования.

Листинг парсера

 

<?php
set_time_limit(0);
function handleError($errno, $errstr, $errfile, $errline, array $errcontext) {
    if (0 === error_reporting()) {
        return false;
    }
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler('handleError');
mysql_connect('localhost', 'login', 'password');
mysql_select_db('10russia');

function addNewData($html, $key) {
    $site = $sms = 0;
    if( preg_match('/<span id="count_votes_site">([^<] )/iu', $html, $match) ) {
        $site = (int)str_replace(' ', '', $match[1]);
    }
    if( preg_match('/<span id="count_votes_sms">([^<] )/iu', $html, $match) ) {
        $sms = (int)str_replace(' ', '', $match[1]);
    }
    if($site && $sms) {
        $all = $sms   $site;
        mysql_query("INSERT INTO stat(`key`, смс, site, `all`) VALUES('$key', $sms, $site, $all)");
    }
}

$urls = array(
    'object_31' => 'http://10russia.ru/object_31',
    'object_61' => 'http://10russia.ru/object_61'
);
while(true) {
    foreach($urls as $key => $url) {
        try {
            $result = file_get_contents($url);
            addNewData($result, $key);
            sleep(1);
        } catch(Exception $e) {}
    }
}

Листинг скрипта для создания по крону json файлов

 

<?php
mysql_connect('localhost', 'login', 'password');
mysql_select_db('10russia');

$keys = array(
    'object_31' => 'object31.json',
    'object_61' => 'object61.json'
);

foreach($keys as $key => $file) {
    $filename = dirname(__FILE__) . '/' . $file . '.tmp';
    $fLink = fopen($filename, 'w');
    if($fLink) {
        $result = mysql_query("SELECT `date`, `all` FROM stat WHERE `key`='$key' ORDER BY id ASC");
        fwrite($fLink, "[n");
        $row = mysql_fetch_assoc($result);
        $first = true;
        do {
            $str = '';
            if(!$first){
                $str = ",";
            } else {
                $first = false;
            }
            fwrite($fLink, $str . '['.strtotime($row['date']) . "000,{$row['all']}]" );
        } while($row = mysql_fetch_assoc($result));
        fwrite($fLink, "]");
        fclose($fLink);
        rename($filename, dirname(__FILE__) . '/' . $file);
    }
}

Увлекательный момент – я вначале генерирую .tmp файл, а потом им перезаписываю файл сгенерированный час назад, тем самым дозволено избежать обстановки, когда файл не существует либо не всецело сгенерирован.

Увлекательные моменты на графиках

Наивысший приход за 30 минут
Максимальный прирост за 30 минут

Всеобщая динамика за всё время мониторинга
Общая динамика за всё время мониторинга

ВГТРК

Я верю что не сотворил для вас крупных задач, рассматривая огромную знаменитость плана, вы, думаю, были готовы к огромному потоку посетителей. Кстати, если кто ищет в Москве работу системного менеджера, то создатели сайта ищут себе работников, теснее не вовсе подлинным, но редким методом:
Работа

Ссылки

Посмотреть, что у меня получилось, ознакомиться с детальной статистикой голосования и сделать итоги:http://10russia.miningdata.ru/

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB