доработать сценарий импорта с сайте starline-online.ru

Task owner: directman, Екатеринбург - Россия
Current state: New Development

тема на форуме http://majordomo.smartliving.ru/forum/viewtopic.php?f=4&t=4835&p=76169&hilit=starline&sid=6a4f284adfa84b183b804c502f501ac9#p76169

Код требует небольшой доработки, так как второму запросу пришлось прикрутить кукисы из браузерного запроса. Код работает, но иногда выводится капча.

Для интеграции требуется установленная сигнализация или охранный маяк, подключеные к сервису 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);
}

//////////////

Tags: majordomo,старлайн starline автозапуск
 
Task budget: 180.82 SM
 
(2)
 
Subscribe to updates (6)
 

Recent supporters

directman 154.85 SM
directman ) 21.16 SM
directman Сколько есть )) 4.81 SM

Task ideas

You can help with project improvement by sharing your ideas or by voting for ideas already added.

Other tasks by the author

Создание плагина для устройств Itead Sonoff без модификации стоковых прошивок
Интегрировать экшены гугл асистента
Получение баланса МТС
Получение оценок школьника в сетевом городе ИРТЕХ