Вход Регистрация
Файл: vigre/votes_bot.php
Строк: 198
s<?php
/**
 * Данный  робот отсылает http запрос на сервер vigre.su получает список проголосовавших за игру 
 * и пишет полученные данные в базу данных. 
 * Для настройки робота откройте файл config.php и установите следующие параметры:
 * 1. VGR_INT_GAME_ID: Идентификатор игры в системе vigre.su. 
 * Целое число, смотри в личном кабинете на сайте vigre.su
 * 2. VGR_INT_SEC_KEY: Секретный ключ игры, смотри в личном кабинете на сайте vigre.su
 * 3. VGR_INT_VOTES_SQL_SERVER_HOST: IP адрес mysql сервера для хранения голосов 
 * 4. VGR_INT_VOTES_SQL_SERVER_DB: База данных для хранения голосов 
 * 5. VGR_INT_VOTES_SQL_SERVER_USER: Имя пользователя для доступа к базе голосов. 
 * Должен иметь права на выполнение select, insert, update, create table.
 * 6. VGR_INT_VOTES_SQL_SERVER_PASS: Пароль для доступа к базе голосов
 * 
 * Все данные о голосовании сохраняются на mysql сервере в базе данных в кодировке UTF-8. 
 * Запуск робота возможен не чаще, чем один раз в 5 минут. 
 * Для запуска робота предлагается использовать cron (Linux) или планировщик задач (Windows). 
 * 2 и более робота votes_bot.php одновременно работать не могут. 
 * Робот votes_bot.php может одновременно работать с роботом bonus_bot.php.
 */
error_reporting(E_ALL);
ini_set("display_errors"1);

require_once(
'common.php');
require_once(
'config.php');

/**
 * Вызываемая функция робота
 *
 */
function vgrInt_Main()
{
    global 
$vgrInt_SQLLink;
    
header("Content-type: text/plain;charset=utf-8");
    
define('TAG''Робот получения голосов');
    
$botType VGR_CORE_INT_BOT_TYPE_VOTES;
    
$botType intval($botType);
    
vgrInt_printMessage(TAGVGR_INT_MESSAGE_INFO'Начало работы');
    try
    {
        try
        {
            
vgrInt_openVotesSQLConnection();
        }
        catch (
Exception $e)
        {
            
vgrInt_printMessage(TAGVGR_INT_MESSAGE_INFO$e->getMessage());
            
vgrInt_printMessage(TAGVGR_INT_MESSAGE_INFO'Окончание работы');
            return;
        }
        
vgrInt_createSQLTables();
        
vgrInt_rawMain();
    }
    catch (
Exception $e)
    {
        
vgrInt_printMessage(TAGVGR_INT_MESSAGE_INFO$e->getMessage());
    }
    
$query "update vigre_votes_bot set running = 0, last_run=now() where type=$botType";
    
mysql_query($query$vgrInt_SQLLink);
    
vgrInt_closeVotesSQLConnection();
    
vgrInt_printMessage(TAGVGR_INT_MESSAGE_INFO'Окончание работы');
}

function 
vgrInt_rawMain()
{
    global 
$vgrInt_SQLLink;
    
$botType VGR_CORE_INT_BOT_TYPE_VOTES;
    
$botType intval($botType);
    
$query "select
    running, 
    date_add(last_run, INTERVAL 5 MINUTE) < now()  as can_run_bot 
    from vigre_votes_bot where type=
$botType";
    
$res mysql_query($query$vgrInt_SQLLink) or vgrInt_throwMySQLError();
    
$numRows mysql_num_rows($res);
    switch (
$numRows)
    {
        case 
0:
            {
                
$query "insert into vigre_votes_bot (running, last_run, type) values (1, now(), $botType)";
                
mysql_query($query$vgrInt_SQLLink) or vgrInt_throwMySQLError();
                
vgrInt_getVotes();
                break;
            }
        case 
1:
            {
                
$row mysql_fetch_array($res);
                
$running $row['running'];
                if(
$running)
                {
                    
vgrInt_printMessage(TAGVGR_INT_MESSAGE_ERROR'Предыдущий робот еще работает');
                    return;
                }
                else
                {
                    
$canRunBot $row['can_run_bot'];
                    if(
$canRunBot)
                    {
                        
vgrInt_getVotes();
                    }
                    else
                    {
                        
vgrInt_printMessage(TAGVGR_INT_MESSAGE_ERROR'Не прошло достаточно времени с предыдущего запуска робота');
                        return;
                    }
                }
                break;
            }
        default:
            {
                
vgrInt_printMessage(TAGVGR_INT_MESSAGE_ERROR'Неверное число записей в таблице vigre_votes_bot');
                return;
            }
    }
}


function 
vgrInt_getVotes()
{
    global 
$vgrInt_SQLLink;
    
$gameId VGR_INT_GAME_ID;
    
$url "http://vigre.su/xml/index.php?command=votes&game_id=$gameId&vote_id=";
    
$sign $gameId;
    
$query "select max(id) as id from vigre_votes";
    
$res mysql_query($query$vgrInt_SQLLink) or vgrInt_throwMySQLError();
    
$row mysql_fetch_array($res);
    
$maxId $row['id'];
    
$maxId intval($maxId);
    
$url .= $maxId;
    
$sign .= $maxId;
    
$sign .= VGR_INT_SEC_KEY;
    
$sign sha1($sign);
    
$url .= "&sign=$sign";
    
vgrInt_printMessage(TAGVGR_INT_MESSAGE_INFO"Отправка запроса: $url");
    
$content vgrInt_getFileContentByURL($url);
    if(
$content === FALSE)
    {
        
vgrInt_printMessage(TAGVGR_INT_MESSAGE_ERROR'Не удалось получить данные с сервера vigre.su');
    }
    else
    {
        
$vals null;
        
$index null;
        
$p xml_parser_create();
        
xml_parse_into_struct($p$content$vals$index);
        
xml_parser_free($p);
        
$votes = array();
        
$errorObject = array();
        
$voteData null;
        
$xmlId null;
        foreach (
$vals as $value)
        {
            
$array $value;
            
$tagName $array['tag'];
            
$tagName strtolower($tagName);
            switch(
$tagName)
            {
                case 
"error":
                    {
                        
$errorObject[$tagName] = $array['value'];
                        break;
                    }
                case 
"comment":
                    {
                        
$errorObject[$tagName] = $array['value'];
                        break;
                    }
                case 
"vote":
                    {
                        if(
$voteData != null)
                        {
                            
$votes[$xmlId] = $voteData;
                        }
                        
$voteData = array();
                        break;
                    }
                case 
"sms":
                    {
                        
$sms $array['value'];
                        
$sms intval($sms);
                        
$voteData[$tagName] = $sms;
                        break;
                    }
                case 
"id":
                    {
                        
$xmlId $array['value'];
                        
$xmlId intval($xmlId);
                        
$voteData[$tagName] = $xmlId;
                        break;
                    }
                case 
"date":
                    {
                        
$voteData[$tagName] = $array['value'];
                        break;
                    }
                case 
"ip":
                    {
                        
$voteData[$tagName] = $array['value'];
                        break;
                    }
                case 
"char":
                    {
                        
$xmlChar null;
                        
$x 'value';
                        if(
array_key_exists($x$array))
                        {
                            
$xmlChar $array[$x];
                        }
                        
$voteData['char'] = $xmlChar;
                        break;
                    }
                default:
                    {
                        break;
                    }
            }
        }
        
$x "error";
        if(
array_key_exists($x$errorObject))
        {
            
$errorCode $errorObject[$x];
            switch (
$errorCode)
            {
                case 
VGR_CORE_XML_API_ERROR_SUCCESS:
                    {
                        
$count count($votes);
                        
vgrInt_printMessage(TAGVGR_INT_MESSAGE_INFO"Получено $count голосов");
                        
$processedCount 0;
                        foreach (
$votes as $value)
                        {
                            
$sms  $value['sms'];
                            
$sms intval($sms);                    
                            
$id  $value['id'];
                            
$id intval($id);
                            
$date  $value['date'];
                            
$date intval($date);
                            
$dateString date("d.m.y H:i:s"$date);
                            
$character  $value['char'];
                            
$characterSQL mysql_real_escape_string($character$vgrInt_SQLLink);
                            
$ip  $value['ip'];
                            
$info "$id $dateString $ip $character";
                            
vgrInt_printMessage(TAGVGR_INT_MESSAGE_INFO$info);
                            
$ipSQL mysql_real_escape_string($ip$vgrInt_SQLLink);
                            
$query "insert into vigre_votes (id, date, charname, ip, sms)
                            values(
$id, FROM_UNIXTIME($date), '$characterSQL', '$ipSQL', $sms)";
                            if(
mysql_query($query$vgrInt_SQLLink))
                            {
                                
$processedCount++;
                            }
                            else
                            {
                                
vgrInt_printMessage(TAGVGR_INT_MESSAGE_ERROR"Голосование с ID $id уже есть в БД");
                            }
                        }
                        
vgrInt_printMessage(TAGVGR_INT_MESSAGE_INFO"Добавленно $processedCount голосов");
                        break;
                    }
                default:
                    {
                        
$x "comment";
                        
$comment null;
                        if(
array_key_exists($x$errorObject))
                        {
                            
$comment $errorObject[$x];
                        }
                        
vgrInt_printMessage(TAGVGR_INT_MESSAGE_ERROR"Cервер vigre.su вернул код ошибки $errorCode, описание ошибки: $comment");
                        break;
                    }
            }
        }
        else
        {
            
vgrInt_printMessage(TAGVGR_INT_MESSAGE_ERROR'Неверный формат ответа от сервера vigre.su');
        }
    }
}

/**
 * Вызов робота
 */
vgrInt_Main();
?>
Онлайн: 2
Реклама