Актуально для драйверов Яндекс.Такси. Может кому-то будет полезно.
Умный дом получает и сообщает баланс на счету водителя в Таксометре, сколько заработано за сегодня, за неделю/месяц (как настроете). А также, если выполнять в Cron, к примеру, каждые 5 минут (чаще не рекомендую), с параметром "change=1", будет сообщать сколько денег было только что заработано/списано.
Данные получает из Яндекс.Таксометра с сайта lk.taximeter.yandex.ru
Версия сырая, могут быть ошибки.
Внимание!
Пока работает через костыль, потому как не могу решить вопрос с OAuth авторизацией в Яндексе средствами PHP.
Костыль самописная программа Yandex.taximeter (прикреплена к теме) под Windows работающая в фоне на сервере, в каталоге "C:\_majordomo\htdocs\taximeter\taximeter.exe", в которой сначала нужно авторизироваться ручками, авторизация держится несколько дней (2-4 дня), затем нужно повторить процедуру.
Если Алиса начала говорить: "Работа в Яндекс Такси. Данные не получены.", вероятно нужна повторная авторизация.
Предварительно в файле settings.ini нужно отредактировать параметр url = "https://lk.taximeter.yandex.ru/driver/?????????????????????????????" на ID водителя в системе.
Программа получает страницу https://lk.taximeter.yandex.ru/driver/????????????????????????????? каждые 5 минут и записывает содержимое в файл C:\_majordomo\htdocs\taximeter\driver.html ничего более она не делает, не вирус не волнуйтесь.
Затем сценарий yandexTaximeter занимается дальнейшей обработкой этого файла.
Если есть мысли как оптимизировать улучшить код, пишите в теме.
Особенно, если знаете как авторизироваться в Яндексе средствами PHP, без костыля.
Предварительно нужно создать объект "toyota_prius" (можете переименовать по-своему в скрипте, если у вас другой авто). В свойствах объекта можно хранить историю, затем строить графики дохода.
Код сценария yandexTaximeter:
Код: Выделить всё
if (isset($params["level"])) $level = $params["level"]; else $level = 1;
if (!isOnline('Internet')) { say("Нет доступа в Интернет!", $level); return; }
if (isset($params["change"])) $change = $params["change"];
$page_url = "https://lk.taximeter.yandex.ru/driver/?????????????????????????????";
$page_url = "c:/_majordomo/htdocs/taximeter/driver.html"; //КОСТЫЛЬ!
$page_cont = file_get_contents($page_url);
$ret = "Работа в Яндекс Такси. ";
if ($page_cont) {
//<div><input type="text" readonly="readonly" value="(.*?)"></div>
preg_match_all("/<div><input type=\"text\" readonly=\"readonly\" value=\"(.*?)\"><\/div>/ui", $page_cont, $match);
$status = $match[1][0];
if ($status) {
$ret .= "Сейчас водитель: " . $status . ". ";
} else {
$ret .= "Данные не получены.";
}
//<input type="text" readonly="readonly" value="(.*?)" data-placement="left" data-original-title="Формат LAT, LON" rel="tooltip">
preg_match_all("/<input type=\"text\" readonly=\"readonly\" value=\"(.*?)\" data-placement=\"left\"/ui", $page_cont, $match);
$сoordinates = $match[1][0];
//<a href="/driver/c858b200e95a01b73d06824a2bb23471/balance">(.*?)</a>
preg_match_all("/<a href=\"\/driver\/c858b200e95a01b73d06824a2bb23471\/balance\">(.*?)<\/a>/ui", $page_cont, $match);
$balance = $match[1][0];
$balance = str_replace(' ', '', $balance);
$balance = str_replace(' ', '', $balance);
$balance = intval($balance);
if ($balance) {
$ret .= "На счету: " . $balance . " р.. ";
/*
$fuel = round($balance * 22 / 100);
$ret .= "Оплата топлива: " . $fuel . " р.. ";
$nalog = round($balance * 5 / 100);
$ret .= "Налог МНС: " . $nalog . " р.. ";
$bank = round($balance * 1.5 / 100);
$ret .= "Комиссия банка: " . $bank . " р.. ";
$driver = round(($balance - $fuel - $nalog - $bank) * 70 / 100);
$ret .= "Зароботок водителя: " . $driver . " р.. ";
$morja = round(($balance - $fuel - $nalog - $bank) * 30 / 100);
$ret .= "Прибыль: " . $morja . " р.. ";
*/
$rate_min = getHistoryMin("toyota_prius.TaximeterBalance", strtotime('now 00:00:00'));
$rate_now = $balance - $rate_min;
if ($rate_now < 0) {
$ret .= "Сегодня списано: " . $rate_now . " р.. ";
}
if ($rate_now > 0) {
$ret .= "Сегодня заработано: " . $rate_now . " р.. ";
}
if ($rate_now == 0) {
$ret .= "Сегодня ничего не заработано.";
}
$rate_min = getHistoryMin("toyota_prius.TaximeterBalance", strtotime("-7 day"));
$rate_now = $balance - $rate_min;
if ($rate_now < 0) {
$ret .= "За неделю списано: " . $rate_now . " р.. ";
}
if ($rate_now > 0) {
$ret .= "За неделю: " . $rate_now . " р.. ";
}
if ($rate_now == 0) {
$ret .= "За неделю ничего не заработано.";
}
}
if ($change && $status && $balance) {
$ret = "";
if ($status && gg("toyota_prius.TaximeterStatus") !== $status) {
$ret .= "Водитель Yandex Такси изменил статус на: " . $status;
sg("toyota_prius.TaximeterStatus", $status);
}
if ($balance && gg("toyota_prius.TaximeterBalance") !== $balance) {
$now_balance = $balance - gg("toyota_prius.TaximeterBalance");
if ($now_balance > 0) {
$ret = "Только что в Yandex Такси заработано: " . $now_balance . " р.! Итого: ". $balance . " р..";
}
if ($now_balance < 0) {
$ret = "Только что в Yandex Такси списано: " . $now_balance . " р.. Остаток баланса: ". $balance . " р..";
}
sg("toyota_prius.TaximeterBalance", $balance);
}
if (gg("toyota_prius.TaximeterCoordinates") !== $сoordinates) {
sg("toyota_prius.TaximeterCoordinates", $сoordinates);
}
}
} else {
$ret .= "Данные не получены.";
}
if ($ret) {
say($ret, $level);
say2s0($ret, $level);
echo "<br>" . $ret;
}
Crontab */5 * * * *
Код: Выделить всё
runScript("yandexTaximeter", array("change"=>"1"));
P/S. Модераторы. Если я опубликовал не в тот раздел тему, пожалуйста перенесите, поправьте.Работа в Яндекс Такси. Сейчас водитель: На заказе. На счету: 1868 р.. Сегодня заработано: 47 р.. За неделю: 260 р..