Умный дом говорит баланс карты. А также, если выполнять в Cron, к примеру, каждые 15 минут (чаще не рекомендую, могут быть претензии от банка), с параметром "change=1", будет сообщать сколько денег было потрачено/пополнено.
Данные получает из Интернет-банка с сайта stb24.by
Версия сырая, могут быть ошибки. Возможно не будет работать, если у вас несколько карт в этом банкинге, либо у вас какая-то другая карта, тестировалось на "Статускарте", других у меня нет от этого банка.
Если есть мысли как оптимизировать улучшить код, пишите в теме.
Предварительно нужно создать объект Balance. В свойствах объекта можно хранить историю, затем строить графики ваших расходов.
Код сценария getBalanceStatusBank:
Код: Выделить всё
if (isset($params["level"])) $level = $params["level"]; else $level = 1;
if (!isOnline('Internet')) { say("Нет доступа в Интернет!", $level); return; }
if (isset($params["change"])) $change = $params["change"];
$login = "*********"; //ваш логин
$password = "**********"; //ваш пароль
function browser_get_contents($url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie_stb24_by.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie_stb24_by.txt');
curl_setopt($ch, CURLOPT_REFERER, 'https://stb24.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);
$info_arr = curl_getinfo($ch);
//print_r($info_arr);
if ($info_arr['redirect_url']) {
$html = $info_arr['redirect_url'];
}
curl_close($ch);
return $html;
}
@unlink('../cookie_evroopt_by.txt'); //удаляем куки
//делаем до 3 запросов, т.к. сайт иногда не отвечает с первого раза
for ($i = 0; $i <= 3; $i++) {
if (!$page_cont) {
$url = "https://stb24.by/ipwd/!iSOU.Authentication?aMode=A&sso_p_Login=" . $login . "&sso_p_Password=" . $password . "&auth_login_type=PWD&btn_submit101=ok";
browser_get_contents($url);
$url = "https://stb24.by/ipwd/!iSOU.ShowPage";
browser_get_contents($url);
$url = "https://stb24.by/ipwd/!iSOU.AccActionParam?acc_type=1&acc_idx=1&act_idx=3&aMode=A&opt=1";
$page_cont = browser_get_contents($url);
}
}
if ($page_cont) {
preg_match_all("/<br>(.*?)BYN/", $page_cont, $match);
//print_r($match);
$balance = $match[1][0];
$balance = preg_replace('/[^0-9,]/', '', $balance);
$balance = str_replace(',', '.', $balance);
}
$ret = "Статускарта. ";
if ($balance) {
if ($change) {
if (gg("Balance.StatusbankBalance") !== $balance) {
$now_balance = round($balance - gg("Balance.StatusbankBalance"), 2);
if ($now_balance > 0) {
$ret .= "Только что пополнено: " . abs($now_balance) . " р.! Итого: ". $balance . " р.. ";
}
if ($now_balance < 0) {
$ret .= "Только что потрачено: " . abs($now_balance) . " р.. Остаток баланса: ". $balance . " р.. ";
}
} else {
$ret = "";
}
sg("Balance.StatusbankBalance", $balance);
} else {
sg("Balance.StatusbankBalance", $balance);
$ret .= "На счету: " . $balance . " р.. ";
$rate_min = getHistoryMax("Balance.StatusbankBalance", strtotime('now 00:00:00'));
$rate_now = round($balance - $rate_min, 2);
if ($rate_now < 0) {
$ret .= "Сегодня потрачено: " . abs($rate_now) . " р.. ";
}
if ($rate_now > 0) {
$ret .= "Сегодня пополнено: " . $rate_now . " р.. ";
}
if ($rate_now == 0) {
$ret .= "Сегодня не было расходов. ";
}
}
} else {
$ret .= "Баланс не получен. ";
$ret .= "Повторный запрос. ";
runScript("getBalanceStatusBank");
}
$ret = trim($ret);
if ($ret) {
say($ret, $level);
echo "<br>" . $ret;
}
Код для Cron (Рекомендую выполнять не чаще 15 минут):
Crontab: */15 * * * *
Код: Выделить всё
runScript("getBalanceStatusBank", array("change"=>"1"));
P/S. Модераторы. Если я опубликовал не в тот раздел тему, пожалуйста перенесите, поправьте.Статускарта. На счету: 1372.32 р.. Сегодня потрачено: 43.21 р..