Данные получает из старой версии issaold.beltelecom.by личного кабинета работа которого будет прекращена в ближайшее время, но на данное время еще работает и его проще парсить.
Новая версия my.beltelecom.by уже более наворочена и с ней не все так просто.
Предварительно нужно создать объект Balance.
Код сценария getBalanceBTK:
Код: Выделить всё
if (isset($params["level"])) $level = $params["level"]; else $level = 1;
if (!isOnline('Internet')) { say("Нет доступа в Интернет!", $level); return; }
if (isset($params["change"])) $change = $params["change"];
if (isset($params["oper_user"])) $oper_user = $params["oper_user"];
if (isset($params["passwd"])) $passwd = $params["passwd"];
if (!$oper_user) $oper_user = "000000000000000"; //номер договора 15 цифр
if (!$passwd) $passwd = "**********"; //пароль
function browser_get_contents($url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie_beltelecom_by.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie_beltelecom_by.txt');
curl_setopt($ch, CURLOPT_REFERER, 'http://wmtransfer.by');
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
$html = curl_exec($ch);
curl_close($ch);
return $html;
}
function browser_post_contents($url, $param) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie_beltelecom_by.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie_beltelecom_by.txt');
curl_setopt($ch, CURLOPT_REFERER, 'http://wmtransfer.by');
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
$html = curl_exec($ch);
curl_close($ch);
return $html;
}
function parse_form($page_cont) {
if ($page_cont) {
$page_cont = str_replace("\r" , "", $page_cont);
$page_cont = str_replace("\n" , "", $page_cont);
//print_r($page_cont);
preg_match_all("/<FORM(.*?)<\/FORM>/i", $page_cont, $matchForm);
//print_r($matchForm);
//$page_cont = $matchForm[0][0];
preg_match_all("/<INPUT(.*?)>/i", $page_cont, $matchInput);
//print_r($matchInput[1]);
foreach($matchInput[1] as $key => $value) {
preg_match_all("/NAME=\"(.*?)\"/i", $value, $matchName);
//print_r($matchName[1][0]);
preg_match_all("/VALUE=\"(.*?)\"/i", $value, $matchValue);
//print_r($matchValue[1][0]);
$param_arr[$matchName[1][0]] = $matchValue[1][0];
}
//$param_arr = array_filter($param_arr);
unset($param_arr['']);
//print_r($param_arr);
}
return $param_arr;
}
$ret = "Белтелеком. ";
//делаем до 3 запросов, т.к. сайт иногда не отвечает с первого раза
for ($i = 0; $i <= 3; $i++) {
if (!$matchBalance[1][0]) {
$url = "https://issaold.beltelecom.by/main.html";
$page_cont = browser_get_contents($url);
//print_r($page_cont);
$param_arr = parse_form($page_cont);
//print_r($param_arr);
$param_arr['oper_user'] = $oper_user;
$param_arr['passwd'] = $passwd;
$url = "https://issaold.beltelecom.by/?";
foreach($param_arr as $key => $value) {
$param .= "&" . $key . "=" . $value;
}
//print_r($url);
//print_r($param);
$page_cont = browser_post_contents($url, $param);
//print_r($page_cont);
$url = "https://issaold.beltelecom.by/choice.html";
$page_cont = browser_get_contents($url);
//print_r($page_cont);
preg_match_all("/Баланс (.*?) р./", $page_cont, $matchBalance);
//print_r($matchBalance);
preg_match_all("/ \((.*?)\)<\/strong>/", $page_cont, $matchName);
//print_r($matchName);
}
}
if ($matchBalance[1][0]) {
for ($i=0; $i<=count($matchBalance); $i++) {
$tarif = $matchName[1][$i];
$balance = number_format(round($matchBalance[1][$i], 2), 2);
sg("Balance.BTKNameTarif" . $i, $tarif);
sg("Balance.BTKBalanceTarif" . $i, $balance);
$ret .= "Тариф " . $tarif . ", баланс " . $balance . "р.. ";
}
} else {
$ret .= "Данные не получены. ";
//runScript("getBalanceBTK");
}
$ret = trim($ret);
if ($ret) {
say($ret, $level);
echo "<br>" . $ret;
}
Результат выполнения:
P/S. Модераторы. Если я опубликовал не в тот раздел тему, пожалуйста перенесите, поправьте.Белтелеком. Тариф Ясна 75, баланс 32.10р.. Тариф Телефон IMS в составе пакета, баланс 0.00р.. Тариф Умный дом, баланс 0.00р.