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

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

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

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

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

 
Task budget: 0.00 SM
 
(0)
 
Subscribe to updates (2)
 

Other tasks by the author

Интегрировать экшены гугл асистента
Получение баланса МТС
Получение оценок школьника в сетевом городе ИРТЕХ
Отправка уведомлений и ссылок медиа-контента на dnla телевизоры (dnla шаринг)