首页 > 解决方案 > 在 php 中生成适合锻炼时如何解决标题问题?

问题描述

我有一个数组“stepsData”:

{"0":{"power":112.5,"hr":99.75,"cadence":90},"660":{"power":175,"hr":142.5,"cadence":90},"990":{"power":175,"hr":142.5,"cadence":90},"2550":{"power":225,"hr":161.5,"cadence":90},"3150":{"power":175,"hr":142.5,"cadence":90},"3750":{"power":350,"hr":185.25,"cadence":90},"3780":{"power":175,"hr":161.5,"cadence":90},"3810":{"power":350,"hr":185.25,"cadence":90},"3840":{"power":175,"hr":161.5,"cadence":90},"3870":{"power":350,"hr":185.25,"cadence":90},"3900":{"power":175,"hr":161.5,"cadence":90},"3930":{"power":350,"hr":185.25,"cadence":90},"3960":{"power":175,"hr":161.5,"cadence":90},"3990":{"power":350,"hr":185.25,"cadence":90},"4020":{"power":175,"hr":161.5,"cadence":90},"4050":{"power":350,"hr":185.25,"cadence":90},"4080":{"power":175,"hr":161.5,"cadence":90},"4110":{"power":175,"hr":142.5,"cadence":90},"4950":{"power":800,"hr":142.5,"cadence":125},"4960":{"power":112.5,"hr":142.5,"cadence":90},"5010":{"power":800,"hr":142.5,"cadence":125},"5020":{"power":112.5,"hr":142.5,"cadence":90},"5070":{"power":800,"hr":142.5,"cadence":125},"5080":{"power":112.5,"hr":142.5,"cadence":90},"5130":{"power":800,"hr":142.5,"cadence":125},"5140":{"power":112.5,"hr":142.5,"cadence":90},"5190":{"power":800,"hr":142.5,"cadence":125},"5200":{"power":112.5,"hr":142.5,"cadence":90},"5250":{"power":175,"hr":142.5,"cadence":90},"6810":
{"power":112.5,"hr":99.75,"cadence":90}}

我 像这样使用这个库https://github.com/johnnye/fit-php

public function generateWahooWorkoutFit($trainingpplansession,$stepsData,$fitpath){
        $time = time() - mktime(0,0,0,12,31,1989);
        $data = new \Fit\Data;
        $data->setFile(\Fit\FileType::activity);
        $data
            ->add('file_id', array(
                'type'                  => \Fit\FileType::workout,
                'manufacturer'          => \Fit\Manufacturer::development,
                'product'               => 0,
                'serial_number'         => 0,
                'time_created'          => $time,
            ))->add('event', array(
                'timestamp'             => $time,
                'event_type'            => \Fit\EventType::start,
                
            ))->add('session', array(
                'sport'                 => \Fit\Sport::cycling,
                'sub_sport'             => \Fit\SubSport::generic,
                'total_elapsed_time'    => $trainingpplansession->getDuration(),
                'total_timer_time'      => $trainingpplansession->getDuration(),
                'total_distance'        => 0,
                'total_ascent'          => 0,
        ));

        foreach ($stepsData as $timestamp=>$stepdata){
            $data->add('record', array(
                'timestamp'             => $timestamp+$time, 
                //'position_lat'          => 0, 
                //'position_long'         => 0, 
                //'altitude'              => 0, 
                'heart_rate'            => $stepdata["hr"],
                'cadence'               => $stepdata["cadence"], 
                //'distance'              => 0, 
                'power'                 => $stepdata["power"], 
                //'temperature'           => 0, 
             ));
        }
        $data->add('event', array(
            'timestamp'             => $trainingpplansession->getDuration()+$time,
            'event_type'            => \Fit\EventType::stop,
        ));


        $debug = false;
        
        //Write the data
        $fitwriter = new \Fit\Writer($debug);
        $fitwriter->writeData($data,$fitpath);
        
        
        //Read the data that was just created
        /*$fit = new \Fit\Reader(true);
        $fit->parseFile($filepath, $debug);
        
        //Delete the written data
        unlink($filepath);
        var_dump($fit);*/
    }
    

生成的合身 ( https://www.dropbox.com/s/adc1icycm893zd2/WAHOO-2021-07-13.fit?dl=0 ) 被发送到 wahoo 我们联系了回复我们的支持人员:

看起来你的 base64 编码、数据 url 和请求格式都是正确的。但是,您的 FIT 文件存在问题,导致我们的云无法解析它。由于“标头大小不正确”,我们失败了。我建议使用不同的工具来生成您的 FIT 文件。一旦你有一个有效的 FIT 文件,你的请求就可以工作了。

所以我很好奇我是否对库做错了什么,是否还有另一个可用的工作库

标签: php

解决方案


由于我还没有找到在 php 中生成有效拟合的解决方案,因此我使用官方 garmin FIT SDK 在 C++ 中开发了一个拟合生成器


推荐阅读