данные из приложения Moves

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

данные из приложения Moves

Сообщение sergejey » Чт окт 16, 2014 2:14 pm

Для iPhone/Android есть такое замечательное приложение Moves -- оно отслеживает где пользователь был, считает пройденное расстояние и шаги. Считает не идеально, но в целом можно использовать для статистики. Я задался целью хранить в системе статистику пройденных шагов за день (а заодно и расстояние). Ниже инструкция, как это сделать.

Изображение

1. Через программу Moves зайти в раздел Connected Apps и там активировать приложение Moves raw JSON Export. По итогу из этого приложения надо взять ключ (token) и где-то записать.

2. В классе пользователей (Users) добавить следующие свойства:
moves_token -- сюда для пользователя сохраняем полученный token (если нужны данные для нескольких пользователей, то проходим пункт 1 на каждом из телефонов и для каждого пользователя)
moves_steps -- здесь будет храниться количество пройденных шагов за вчерашний день (ставим галочку хранить истрию, если вдруг захотим графики строить)
moves_walk_distance -- пройденный пешком путь
moves_transport_distance -- расстояние, которое проехали на транспорте/машине
moves_ok -- дата последнего сохранения данных (служебное поле, историю хранить не нужно)

3. Создаём в сценариях скрипт с названием getMovesData со следующим кодом:
Код скриптаПоказать

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

$date=date('Ymd',time()-24*60*60); // yesterday

$users=getObjectsByClass('Users');
foreach($users as $user) {
 $object=$user['TITLE'];
 $token=getGlobal($object.'.moves_token'); 
 if ($token && getGlobal($object.'.moves_ok')!=$date) {
  echo "User: $object<br>";
  $res=getMovesData($token,$date); 
  if (isset($res['wlk']) ) {
   $steps_total=$res['wlk']['steps'];
   $steps_distance=round($res['wlk']['distance']/1000,2);
   $transport_distance=round($res['trp']['distance']/1000,2);

   setGlobal($object.'.moves_ok',$date);
   setGlobal($object.'.moves_steps',$steps_total);
   setGlobal($object.'.moves_walk_distance',$steps_distance);   
   setGlobal($object.'.moves_transport_distance',$transport_distance);      
   
   echo "Steps: $steps_total<br/>";
   echo "Walk distance: $steps_distance<br/>";
   echo "Transport distance: $transport_distance<br/>";
  } else {
   echo "Error getting data";
  }
  echo "<hr>";
 }
}


//------------------------------------------------------

function getMovesData($token,$date) {

 $data=array(
   'date'=>$date,
   'access_token'=>$token
  );
  
$url ="http://moves-export.herokuapp.com/data";
$post = 'date='.$data['date'].'&access_token='.$data['access_token'];  

  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");  
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS,$post);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
  $result = curl_exec($ch);
  curl_close($ch);
  
$data=(array)json_decode($result);
$data = $data["data"][0];

$res=array();
foreach($data->segments as $segment) {
 foreach($segment->activities as $activity) {
  $res[$activity->activity]['distance']+=(float)$activity->distance;
  $res[$activity->activity]['steps']+=(int)$activity->steps;
 }
}

return $res;
}
4. Добавляем вызов скрипта из пункта 3 в ежечасный запуск. Можно было бы и ежедневно, но есть шанс, что данные не будут получены из-за какой-то ошибки, поэтому ставим на запуск каждый час. В самом скрипте уже есть проверка не запрашивать данные если они уже были получены.

Собственно всё, скрипт проходится по всем пользователям, у которых установлено свойство moves_token и записывает статистику в соответствующие свойства. Можно строить графики и устраивать соревнования -- кто больше прошёл или проехал за день :)
За это сообщение автора sergejey поблагодарили (всего 5):
ErmolenkoM (Чт окт 16, 2014 3:53 pm) • dmw (Пт окт 17, 2014 7:50 am) • shemnik69 (Ср окт 22, 2014 3:44 pm) • tammat (Пн окт 27, 2014 1:22 pm) • dengi.76 (Вс июн 24, 2018 10:52 pm)
Рейтинг: 5.81%

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
dmw
Сообщения: 469
Зарегистрирован: Вт мар 12, 2013 1:22 am
Благодарил (а): 41 раз
Поблагодарили: 81 раз

Re: данные из приложения Moves

Сообщение dmw » Пт окт 17, 2014 7:50 am

Не знал про такое приложение. Настроил, попробуем интересно.
А координаты скрипт может скачивать, чтобы рисовать треки как на скриншоте?
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: данные из приложения Moves

Сообщение sergejey » Пт окт 17, 2014 10:27 am

dmw писал(а):Не знал про такое приложение. Настроил, попробуем интересно.
А координаты скрипт может скачивать, чтобы рисовать треки как на скриншоте?
Скрипт данные скачивает все, но использует только суммарные данные. Теоретически, можно остальные данные передавать в модуль GPS-трэкера для сохранения истории перемещений, но я такой цели не ставил, т.к. трэкер сам по себе у меня нормально работает.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
tammat
Сообщения: 165
Зарегистрирован: Пт янв 20, 2012 3:05 pm
Благодарил (а): 9 раз
Поблагодарили: 1 раз

Re: данные из приложения Moves

Сообщение tammat » Ср окт 22, 2014 3:13 pm

2. В классе пользователей (Users) добавить следующие свойства:
Как у пользователей добавить Свойства
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: данные из приложения Moves

Сообщение sergejey » Ср окт 22, 2014 4:08 pm

tammat писал(а):
2. В классе пользователей (Users) добавить следующие свойства:
Как у пользователей добавить Свойства
Имеется в виду не раздел Пользователи в панели, а именно класс Users в разделе Объекты. Там через управление классом можно это сделать. Если такого класса нет, то можно его создать.
За это сообщение автора sergejey поблагодарил:
tammat (Пт окт 24, 2014 2:56 pm)
Рейтинг: 1.16%

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
tammat
Сообщения: 165
Зарегистрирован: Пт янв 20, 2012 3:05 pm
Благодарил (а): 9 раз
Поблагодарили: 1 раз

Re: данные из приложения Moves

Сообщение tammat » Чт окт 23, 2014 4:32 pm

При попытке запустить сценарий Ошибка
Running script: getMovesData
Warning: fopen(debmes/2014-10-23.log): failed to open stream: Permission denied in /var/www/lib/log4php/appenders/LoggerAppenderFile.php on line 99

Warning: log4php: [LoggerAppenderDailyFile:default]: Failed opening target file. Closing appender. in /var/www/lib/log4php/LoggerAppender.php on line 283
20141022
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: данные из приложения Moves

Сообщение sergejey » Чт окт 23, 2014 6:21 pm

Это со сценарием не связано -- на папке /debmes/ не стоит право записи и система не смогла создать или добавить в файл лога.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
ErmolenkoM
Сообщения: 560
Зарегистрирован: Ср сен 04, 2013 10:31 am
Откуда: Самара
Благодарил (а): 99 раз
Поблагодарили: 140 раз
Контактная информация:

Re: данные из приложения Moves

Сообщение ErmolenkoM » Чт окт 23, 2014 7:56 pm

sergejey, а можно добавить время прогулок? Типа сегодня гулял 3 часа.
aka msh555
Cubian на Cubietruck, Connect
ErmolenkoM
Сообщения: 560
Зарегистрирован: Ср сен 04, 2013 10:31 am
Откуда: Самара
Благодарил (а): 99 раз
Поблагодарили: 140 раз
Контактная информация:

Re: данные из приложения Moves

Сообщение ErmolenkoM » Пт окт 24, 2014 8:12 pm

И еще вопрос.
Есть такая штука "misfit shine" http://www.misfitwearables.com/
Это шагомер.
Может есть владельцы? Очень хотелось бы спарить с МЖД.
aka msh555
Cubian на Cubietruck, Connect
halt
Сообщения: 8
Зарегистрирован: Сб сен 22, 2012 1:16 pm
Благодарил (а): 0
Поблагодарили: 0

Re: данные из приложения Moves

Сообщение halt » Вс окт 26, 2014 11:02 pm

а ссылку можно на Андройд версию приложения?
Ответить