#!/opt/local/bin/php time(), 'eneded_job' => time(), 'pid' => getmypid(), 'good_results' => 0, 'bad_results' => 0, 'queue_size' => 0, 'last_request' => '' ); // Устанавливаем коннект с БД $db = Db::getInstance(); // Бот работает все время while (true) { // Получаем список песен для загрузки, помечаем в очереди, что мы их взяли в работу $db->q('BEGIN'); $queue = $db->getRows($db->q("SELECT * FROM beathaven.queue WHERE status=0 OR status=2 ORDER BY priority DESC, times_failed ASC LIMIT ". QUEUE_PACK)); $ids = array(); foreach ($queue as $t) { $ids[] = $t['track_id']; } $db->q('UPDATE beathaven.queue SET status=1 WHERE track_id IN('. implode(',', $ids) .')'); $db->q('COMMIT'); if (!$queue || count($queue) == 0) { sleep(EMPTY_QUEUE_TIMEOUT); } else { $stats['queue_size'] = count($queue); foreach ($queue as $t) { $t1 = microtime(true); echo "#{$t['track_id']} {$t['track_title']} -- "; $ok = $vk->getTracks($t['track_title']); if (strpos($vk->getHtml(), 'searchOffset') === false) { echo "Session kaput!\n"; die; } if ($ok) { echo "OK\n"; $db->q("UPDATE beathaven.queue SET status=3 WHERE track_id=". $t['track_id']); $file_name = Config::get('app:Parser:good_html_dir'). $t['track_id'] .'.html'; $stats['good_results']++; } else { echo "FAILED\n"; $db->q("UPDATE beathaven.queue SET status = 2, times_failed = times_failed + 1 WHERE track_id=". $t['track_id']); $file_name = Config::get('app:Parser:bad_html_dir'). $t['track_id'] .'.html'; $stats['bad_results']++; } file_put_contents($file_name, $vk->getHtml()); chmod($file_name, 0777); $stats['last_request'] = $t['track_title']; $stats['queue_size']--; $stats['eneded_job'] = time(); $bot_stats_file_name = Config::get('app:Parser:bot_stats_dir'). $bot_name .'.json'; file_put_contents($bot_stats_file_name, json_encode($stats)); chmod($bot_stats_file_name, 0777); $t2 = microtime(true); if ($t2 - $t1 < VKTIMEOUT) { sleep(ceil(VKTIMEOUT - ($t2 - $t1))); } } } }