Отправить вес в Google Fit через PHP SDK - PullRequest
0 голосов
/ 17 марта 2019

Я пытаюсь передать вес в Google Fit API через PHP и прочитал Отправить информацию о весе / расстоянии через Google Fit REST API без просвещения.

Я запросилAuth Token с областями действия

https://www.googleapis.com/auth/fitness.body.write

Я также создал источник данных, и если я использую POSTMAN для выполнения Get on

https://www.googleapis.com/fitness/v1/users/me/dataSources

, я получаю ожидаемые данные

{
        "dataStreamId": "derived:com.google.weight:REDACTED",
        "dataStreamName": "Mediasana BS444",
        "type": "derived",
        "dataType": {
            "name": "com.google.weight",
            "field": [
                {
                    "name": "weight",
                    "format": "floatPoint"
                }
            ]
        },
        "device": {
            "uid": "REDACTED_MAC",
            "type": "scale",
            "version": "1",
            "model": "BS444",
            "manufacturer": "Mediasana"
        },
        "application": {
            "version": "1",
            "detailsUrl": "http://example.com",
            "name": "PHPBathroomScales"
        },
        "dataQualityStandard": []
    },

Так что все выглядит хорошо, используя PHP SDK для создания запроса, я вижу, что в конечном итоге он вызывает

https://www.googleapis.com/fitness/v1/users/me/dataSources/REDACTED/datasets/1535085014438000000-1535085014438000000

с полезной нагрузкой

{"dataSourceId": "УДАЛЕНО", "maxEndTimeNs": 1535085014438000000, "minStartTimeNs": 1535085014438000000, "точка": { "dataTypeName": "com.google.weight", "originDataSourceId": "", "" endTimeNanos: 1535085014438000000, "startTimeNanos": 1535085014438000000, "value": {"fpVal": 88.8}}}

(что в целом соответствует примеру @ james-cole из вышеуказанного потока

и дает JSON-ответ

{
 "minStartTimeNs": "1535085014438000000",
 "maxEndTimeNs": "1535085014438000000",
 "dataSourceId": "REDACTED",
 "point": []
}

Согласно документации "В случае успеха этот метод повторяетсяrns ресурс Users.dataSources.datasets в теле ответа. «Похоже, что он был успешным, однако пустое значение означает, что что-то невелико, а последующие запросы показывают, что вес не был добавлен.

Есть идеи, чего не хватает?

    $client = new Google_Client();
    $client->setApplicationName($app_name);
    $client->setScopes(implode(' ', array(Google_Service_Fitness::FITNESS_BODY_WRITE)));
    $client->setAuthConfig($client_secret);
    $client->setAccessType('offline');
    // Read and Update Access Code token removed for brevity
    return $client;


$dataStreamId = "REDACTED";
addWeight($fitness_service,$dataStreamId,new DateTime("2019-03-17 11:02:03",new DateTimeZone("UTC")),88.8);

function addWeight(&$service,$dataStreamId,$time,$value)
    {
        $time = intval($time->format("U")*1000000000);
        $minmax =  "{$time}-{$time}";
        $pointValue = new Google_Service_Fitness_Value();
        $pointValue->setFpVal(floatval($value));
        $pointPatch = new Google_Service_Fitness_DataPoint();
        $pointPatch->setDataTypeName("com.google.weight");
        $pointPatch->setEndTimeNanos($time);
        $pointPatch->setStartTimeNanos($time);
        $pointPatch->setValue($pointValue);
        $patchBody = new Google_Service_Fitness_Dataset();
        $patchBody->setDataSourceId($dataStreamId);
        $patchBody->setMaxEndTimeNs($time);
        $patchBody->setMinStartTimeNs($time);
        $patchBody->setPoint($pointPatch);
        $patchResult =  $service->users_dataSources_datasets->patch("me",$dataStreamId, $minmax, $patchBody);
}
...