Практически любая форма представляет собой отправку запроса методом POST на определённый адрес с определёнными параметрами и после этого информация о том, что пользователь зашёл, хранится в так называемой "сессии", которая реализована может быть по-разному, но обычно идентификатор её сохраняется в cookie нашего браузера. Так что задача сводится к тому, чтобы войти через форму с сохранением сессии, тем самым иммитируя браузер пользователя, а затем перейти на нужную страницу с этой сессией, чтобы раздобыть интересующую нас информацию.
Итак, имеем форму входа: https://issa.diallog.by/cgi-bin/cgi.exe ... =is_newlog
Смотрим исходник страницы и видем как устроена эта форма:

После входа мы попадаем на страницу, где как раз есть нужная нам информация. Эту страницу мы обрабатываем шаблоном поиска, прямо как в модуле веб-переменные. В самом коде в виде комментариев я расскажу про некоторые особенности. Из кода делаем сценарий и через метод onNewHour запускаем его каждый час (если чаще, то через onNewMinute)
Итак код сценария:
Код: Выделить всё
$cookie_file=ROOT.'cached/dialog_cookie.txt'; //в этом файле будет храниться сессия
// STEP 1 -- LOGIN
$url='https://issa.diallog.by/cgi-bin/cgi.exe?function=is_login'; // ссылка, по которой нам надо зайти
// задаём поля, которые будут отправлены при логине
$fields = array(
'Lang' => 2,
'mobnum' => '0987654321', // номер телефона
'Password' => '123'); // пароль
foreach($fields as $key=>$value) { $fields_string .= $key.'='.urlencode($value).'&'; }
rtrim($fields_string, '&');
$ch = curl_init();
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, count($fields));
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
$result = curl_exec($ch);
curl_close($ch);
// STEP 2 -- GET DATA
$url='https://issa.diallog.by/cgi-bin/cgi.exe?function=is_account'; // это собственно страница, на которую нам надо заходить уже залогинившись
$ch = curl_init();
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
$result = curl_exec($ch);
curl_close($ch);
SaveFile(ROOT.'cached/dialog_result.txt',$result); // сохранять в файл не обязательно, это я делаю просто для того чтобы посмотреть что внутри
@unlink($cookie_file);
$result=win2utf($result); // эта строчка нужна только в том случае, если кодировка страницы не UTF, а Windows-1251. иначе просто удаляем эту строчку
if (preg_match('/Актуальный баланс:<\/td>.+?([\.\d]+) р/is',$result,$m)) { // здесь как раз ищем нужную нам информацию
$balance=$m[1];
setGlobal('MyCell.balance',$balance); // сохраняем найденный баланс в нужный нам объект
}