Google Fit REST API неправильно сообщает о минутах хода от Apple Health для пользователей с Apple Watch - PullRequest
1 голос
/ 22 января 2020

Мы получаем минуты перемещения нашего пользователя из Google Fit, используя следующий стандартный код PHP и cURL:

$fields = array(
        'startTimeMillis'=> strtotime($start_date) * 1000,
        'endTimeMillis'=> strtotime($end_date) * 1000,
        'aggregateBy' => array(
                'dataSourceId'=> "derived:com.google.activity.segment:com.google.android.gms:merge_activity_segments",
         ),
         'bucketByTime' => array(
                'durationMillis'=> "86400000",
         ),
    );
    $payload = json_encode($fields);
    $payload = '{"startTimeMillis":"' . strtotime($start_date) * 1000 . '","endTimeMillis":"' . strtotime($end_date) * 1000 . '","aggregateBy":[{"dataSourceId":"derived:com.google.activity.segment:com.google.android.gms:merge_activity_segments"}],"bucketByTime":{"durationMillis":86400000}}';
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
      'Authorization: Bearer ' . $new_access_token,
      'dataType: json',
      'Content-Type: application/json; charset=utf-8',
      'Content-Length: ' . strlen($payload)
   ));
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLINFO_HEADER_OUT, true);  
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);                  
    curl_setopt($ch,CURLOPT_POSTFIELDS, $payload); 
    $response = curl_exec( $ch );
    $data = json_decode($response, TRUE);
    foreach($data['bucket'] as $key => $value) {
        $var_date = $data["bucket"][$key]['startTimeMillis'];
        foreach($data["bucket"][$key]['dataset'] as $k=>$v){
            foreach($v as $a=>$b){
                if($a == 'point'){
                    foreach($b as $c=>$d){
                        $var_count = 1;
                        foreach($d['value'] as $f=>$g){
                            if($var_count == 2){
                                $duration = $g['intVal'] / 1000;
                                $var_count = 1;
                            } else {
                                $var_count = $var_count + 1;
                            }
                        }
                    }
                }
            }
       }
   }

Мы получаем правильное количество секунд практически для всех пользователей, кроме тех, которые используют Apple Watch. Мы получаем значения для пользователей часов, но они обычно превышают или не совпадают с цифрами, указанными в самом приложении Google Fit пользователя с широкими полями, и мы не можем выяснить разницу.

...