Страница 1 из 5

Время пути до работы

Добавлено: Пт фев 02, 2018 3:54 pm
webms
Было бы здорово утром пока чищу зубы услышать сколько мне ехать на работу.
Например сценарий:
Открываю дверь ванны, срабатывает датчик и Алиса говорит: Доброе утро Максим, сегодня путь до работы займет дольше обычного на 15 мин. Время пути приблизительно 58 минут. На улице гололед, погода минус 16 и....."

Мб у кого-то уже так реализовано?
Если нет, давайте попробуем вместе, здорово же будет :)

PS: Где то в коннекте я видел скрипт, но он не заработал у меня =( автор не ответил на сообщение.

UPDATE: Готовый код https://majordomo.smartliving.ru/forum/ ... =10#p71161

Re: Время пути до работы

Добавлено: Пт фев 02, 2018 3:59 pm
webms
Нашел

Код: Выделить всё

$from = gg('home.adress');
$to = gg('work.adress');;
$route = getDurationInGoogle($from, $to);

$res = '';
$duration = $route['in_traffic'] - $route['duration'];
if ($duration > 0) {
    $res .= 'Путь от дома до работы, c учетом пробок займет примерно ' . chti($route['in_traffic'], 'минута', 'минуты', 'минут') . '. ';
     $res .= 'Что на ' . chti($duration, 'минута', 'минуты', 'минут') . ' дольше обычного.';
     if ($duration > 10) {
        $res .= ' Лучше пойти пешком!';
    }
} else {
    $res .= 'Путь от дома до работы займет примерно ' . chti($route['duration'], 'минута', 'минуты', 'минут') . '.';
}

say($res); 
Пользователь: https://majordomo.smartliving.ru/forum/ ... file&u=506

Re: Время пути до работы

Добавлено: Пт фев 02, 2018 7:23 pm
slgeo
В идеале, конечно, лучше Яндекс-пробки учитывать, но там по словам nickmail затык и так просто не выдернуть.

Ну, и самое главное по коду выше - не хватает функции getDurationInGoogle

Re: Время пути до работы

Добавлено: Пт фев 02, 2018 11:49 pm
igoryan
Немного переделанный скрипт геокодер от directman66, за что ему спасибо.
Гугл карты

Код: Выделить всё

$from="";//Откуда, можно координаты или название улицы 
$to="";//Куда, можно координаты или название улицы 
$start_time="now";// Время отправления, можно использовать now, время как целое число в секундах с полуночи 1 января 1970 г. по UTC
//$api_key=""; апи ключ гугл
$URL = "https://maps.googleapis.com/maps/api/directions/json?origin=".$from."&destination=".$to."&departure_time=".$start_time."&trafficmodel=bestguess&mode=driving&language=ru&key=".$api_key;
$data = getUrl( $URL );
$json = json_decode( $data );
$distance = $json->routes[0]->legs[0]->distance->text;// Расстояние
$duration = $json->routes[0]->legs[0]->duration->text;// Продолжительность маршрута
//$duration_in_traffic=$json->routes[0]->legs[0]->duration_in_traffic->text; Продолжительность маршрута с учетом дорожной обстановки
sayReply($distance);
sayReply($duration);
//sayReply($duration_in_traffic);
 
$url привести к виду одной строки

Получить ключ можно : https://developers.google.com/maps/docu ... -key?hl=ru

Продолжительность маршрута с учетом дорожной обстановки (duration_in_traffic) будет отображаться только если есть валидный апи ключ.

Если ключа нету, тогда удалите "&key=".$api_key".
Ссылка будет : $URL = "https://maps.googleapis.com/maps/api/di ... anguage=ru";

Подробнее о параметрах можно почитаться тут: https://developers.google.com/maps/docu ... ntro?hl=ru

Re: Время пути до работы

Добавлено: Сб фев 03, 2018 1:47 am
slgeo
Подскажите, как достать значение summary из такого ответа:
SPOILERSPOILER_SHOW

Код: Выделить всё

{
  "routes" : [
    {
      "bounds" : {
        "northeast" : {
          "lat" : 55.79283659999999,
          "lng" : 49.2216592
        },
        "southwest" : {
          "lat" : 55.73007759999999,
          "lng" : 49.1309371
        }
      },
      "copyrights" : "Картографические данные © 2014 Google",
      "legs" : [ ],
      "overview_polyline" : {
        "points" : "qffsIk{zjHEwKpKcAvGo@bFk@bGg@vFg@hEIxFQHcTL{a@FkCF_AFm@L_@Zs@Pa@f@cB|@gDb@aBbAuDrByIrAqIhB{LTaDFoA?uAK_B]gEe@oEKk@]]}@u@AGCIEEkEsCgAy@o@o@mBwBmCyCyAaBSQiAg@iBq@aAWmGaA_AKUFm@MiACU@i@Jj@sAVW^YbAs@T_@Nq@?_@Eu@g@iCuBcHq@yCIy@Aq@Fq@He@nCmGhC{FnGcNbA}BNa@TeAPqAZmDzBiWJ}@Da@cA_CiFmLc@aAkBkEqBiEcP__@oHmPaE}IgD}HaCiFcGyM}H{PcFeLyKqV_BuDyA}CaCqF{HgQsCuGyAiDsAoCk@cAe@u@iAmAq@k@m@]aA_@oA]m@IuCK_C@yMGwUO_M@{B?yUSuEAqG?aD@cM@qFDoFEs@?iPGiDEgA?yAEoFAoDCo@?mGEmGE_JEsGAq@BaCHsAJKqAHcBn@HEsDBADEJ]FIPEZ?LJTB"
      },
      "summary" : "пр.  Победы",
      "warnings" : [],
      "waypoint_order" : []
    }
  ],
  "status" : "OK"
}

Re: Время пути до работы

Добавлено: Сб фев 03, 2018 11:06 am
igoryan
Если из кода выше, то :

Код: Выделить всё

$summary=$json->routes[0]->summary;
 

Re: Время пути до работы

Добавлено: Сб фев 03, 2018 12:09 pm
slgeo
igoryan писал(а):Если из кода выше, то :

Код: Выделить всё

$summary=$json->routes[0]->summary;
 
Спасибо, точно утро вечера мудренее.

Re: Время пути до работы

Добавлено: Сб фев 03, 2018 1:27 pm
slgeo
Чуть допилил скрипт для работы с шаблонами:
Создаем скрипт GetRouteToAddress с кодом:

Код: Выделить всё

$from=<сюда вбиваем адрес дома или постоянное место отправления>; //координаты или название улицы, вместо пробелов ставим %20                                                                                                                                                              
$to=gg("admin.GEO_toAddress"); // в свойство объекта будем сохранять адрес куда едем
if ($to == "работы") {
   $to=<сюда вбиваем адрес работы>;//Куда, вместо пробелов ставим %20   
}
else
{ 
$to = $to."<желательно дополнить названием города и области/края>";
// подменяем пробелы, иначе не обрабатывается
$to = str_replace(' ','%20',$to);
}
$start_time="now";// Время отправления, можно использовать now, время как целое число в секундах с полуночи 1 января 1970 г. по UTC
$api_key=gg("admin.GEO_api_key"); //апи ключ гугл желательно хранить в свойстве объекта, а не в коде
$URL = "https://maps.googleapis.com/maps/api/directions/json?origin=".$from."&destination=".$to."&departure_time=".$start_time."&trafficmodel=bestguess&mode=driving&language=ru&key=".$api_key;
$data = getUrl( $URL );
$json = json_decode( $data );
$distance = $json->routes[0]->legs[0]->distance->text;// Расстояние
sg("admin.GEO_distance",$distance);
$duration = $json->routes[0]->legs[0]->duration->text;// Продолжительность маршрута
sg("admin.GEO_duration",$duration);
$duration_in_traffic=$json->routes[0]->legs[0]->duration_in_traffic->text; //Продолжительность маршрута с учетом дорожной обстановки
sg("admin.GEO_duration_in_traffic",$duration_in_traffic);
//$summary = $json->routes[0]->summary[0]->text;// Ключевая точка маршрута
$summary=$json->routes[0]->summary;
DebMes("Маршрут до ".gg("admin.GEO_toAddress"));
DebMes("Расстояние ".$distance);
DebMes("Конечный адрес ".$json->routes[0]->legs[0]->end_address);
DebMes("Через - ".$summary); // все DebMes после отладки можно закомментировать
say("Маршрут с учетом пробок до ".gg("admin.GEO_toAddress")." займет ".$duration_in_traffic." через ".$summary,1);
 
Ну, и сам код шаблона
Маршрут до(.+)|Поехали на(.+)

Код: Выделить всё

sg("admin.GEO_toAddress",trim($matches[1]));
RunScript("GetRouteToAddress");

Re: Время пути до работы

Добавлено: Пн фев 05, 2018 8:13 am
webms
igoryan, slgeo спасибо вам ОГРОМНОЕ

Re: Время пути до работы

Добавлено: Пн фев 05, 2018 9:43 am
EvgenyG
хотел что-то подобное
причём в виде графика
Например, если выехать в 6-30, то время до работы будет составлять столько-то
потом в 6-35 и так далее