Владелец задачи: directman, Екатеринбург - Россия
Текущий статус:
Отмена выполнения (архив)
тема на форуме http://majordomo.smartliving.ru/forum/viewtopic.ph...
Код требует небольшой доработки, так как второму запросу пришлось прикрутить кукисы из браузерного запроса. Код работает, но иногда выводится капча.
Для интеграции требуется установленная сигнализация или охранный маяк, подключеные к сервису starline телематика (starline-online.ru). Список сигнализаций можно узнать на сайте производителя. У меня сигнализация A93+CAN2LIN+GSM+установка вышли примерно в 17 т.р.
Работает: получение координат, статуса работы двигателя, охраны, напряжения, в общем всех параметров, что есть на сайте:
Скрипт сам создает объекты класса starline-online (его требуется создать предварительно), которые он получает с сайта.
Если кто доработает скрипт, добавлю бюджет проекта.
$cookie_file = ROOT . 'cached/starline_cookie.txt'; //в этом файле будет храниться сессия
//$cookie_file = 'dialog_cookie.txt'; //в этом файле будет храниться сессия
// STEP 1 -- LOGIN
$url = 'https://starline-online.ru/user/login'; // ссылка, по которой нам надо зайти
// задаём поля, которые будут отправлены при логине
$fields = array(
'LoginForm[login]' => gg('balance.StarlineLogin'), // номер телефона
'LoginForm[rememberMe]' => 'on',
'LoginForm[pass]' => gg('balance.StarlinePass')
);
//print_r($fields);
echo "<br>";
$fields_string = '';
foreach ($fields as $key => $value) {
$fields_string .= urlencode($key) . '=' . urlencode($value) . '&';
}
rtrim($fields_string, '&');
///echo $fields_string;
//echo "<br>";
echo $data;
echo "<br>";
echo "<br>";
$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_POST, $data);
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);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0',
'Accept: application/json, text/javascript, /; q=0.01',
'Content-Type: application/x-www-form-urlencoded; charset=UTF-8',
'X-Requested-With: XMLHttpRequest'
));
$result = curl_exec($ch);
curl_close($ch);
echo $result;
echo "<br>";
echo "-------------------------";
echo "<br>";
echo $cookie_file;
//print_r($_COOKIE);
echo "<br>";
//STEP 2 -- GET DATA
echo "<br>";
echo "-------------------------";
echo "<br>";
$url = 'https://starline-online.ru/device?tz=300&_=1512134458324';
// это собственно страница, на которую нам надо заходить уже залогинившись
$ch = curl_init();
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
// curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
//curl_setopt($ch, CURLOPT_POST, count($fields));
//curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
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);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
//'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0',
//'Accept: application/json, text/javascript, /; q=0.01',
//'Content-Type: application/x-www-form-urlencoded; charset=UTF-8',
//'X-Requested-With: XMLHttpRequest'
':authority:starline-online.ru',
':method:GET',
':path:/device?tz=300&_=1513105401911',
':scheme:https',
'accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8',
'accept-encoding:gzip, deflate, br',
'accept-language:ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
'cookie:uechat_34028_first_time=1513103119079; _ym_uid=1513103122184396845; utmc=219212379; utmz=219212379.1513103122.1.1.utmcsr=(direct)|utmccn=
тут вставить из из отладчика браузера Гугл хром, нужно найти запрос по адресу и отуда выкусить код для вставки
'upgrade-insecure-requests:1',
'user-agent:Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Mobile Safari/537.36'
));
$result = curl_exec($ch);
curl_close($ch);
//SaveFile(ROOT . 'cached/dialog_result.txt', $result); // сохранять в файл не обязательно, это я делаю просто для того чтобы посмотреть что внутри
@unlink($cookie_file);
echo $result;
echo "<br>";
echo "-------------------------";
echo "<br>";
$data=json_decode($result,true);
//$objn=$data[0]['id'];
//print_r($data);
//$objn=$data[0]['answer']['devices']['alias'];
//echo $ctemp;
//echo $etemp;
//echo $imei;
//echo $name;
//echo $objn.'----------------';
//addClassObject('livegpstracks',$objn);
//$src=$data[0];
echo "<br>";
echo "-------------------------";
echo "<br>";
$names=$data['answer']['devices'];
foreach ($names as $key=> $value ) {
// echo $key.':'.$value. "<br>";
foreach ($value as $key2=> $value2 ) {
if ($key2=='alias' ) {
echo $key2.':'.$value2. "<br>";
//$devicename=strreplace(" ","",$value2);
$devicename=$value2;
if (gg($devicename."."."alias")<>$devicename) {
echo "добавляем новое устройство ".$devicename;
addClassObject('starline-online',$devicename);}
}
if (is_array($value2))
{echo "это массив";
echo "<br>";
foreach ($value2 as $key3=> $value3 ) {
echo $key3.':'.$value3. "<br>";
sg($devicename.'.'.$key3,$value3);
///
if (is_array($value3))
{echo "это массив";
echo "<br>";
foreach ($value3 as $key4=> $value4 ) {
echo $key4.':'.$value4. "<br>";
sg($devicename.'.'.$key4,$value4);
}}
///
}
} else {
echo $devicename.'.'.$key2."::::".$value2;
echo "<br>";
sg($devicename.'.'.$key2,$value2);
sg($devicename.'.updated',date('d.m.Y H:i:s'));
}
}
$url = BASE_URL . '/gps.php?latitude=' . gg($devicename.'.y')
. '&longitude=' . gg($devicename.'.x')
. '&altitude=' . gg($devicename.'.altitude')
. '&accuracy=' . gg($devicename.'.gpsaccuracy')
. '&provider=' . gg($devicename.'.gsm_lvl')
. '&speed=' .gg($devicename.'.speed')
. '&battlevel=' . gg($devicename.'.battery')
. '&charging=' . gg($devicename.'.charging')
. '&deviceid=' .gg($devicename.'.imei') ;
getURL($url, 0);
$pars= array(
'imei' => gg($devicename.'.imei'),
'x' => gg($devicename.'.y'),
'y' => gg($devicename.'.x'),
'speed' => gg($devicename.'.speed'),
'vysota' => gg($devicename.'.altitude')
);
print_r($pars);
runScript('livegpsupdate',$pars);
}
//////////////
Вы можете помочь в развитии проекта, сообщив об ошибках, поделившись своими идеями или проголосовав за уже добавленные. В случае добавления ошибок, обязательно указывайте детали окружения (ОС, версия ПО и т.п.), сообщения об ошибках без деталей будут игнорироваться.