php - 在 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 中生成有效拟合的解决方案,因此我使用官方 garmin FIT SDK 在 C++ 中开发了一个拟合生成器
推荐阅读
- python - 计算文件中的单词数,以每一行分隔,并返回最大的数字
- javascript - 如何使用 javascript 确定发布请求输入
- javascript - 从一个日历跳到另一个
- visual-studio - 如何在 Visual Studio 中删除项目并保留源代码?
- selenium - isDisplayed() 在 3.12.0 硒罐上返回空指针异常
- c# - “IPhoneLine”不包含“PhoneLineStateChanged”的定义
- java - 使用 j2html 的登录表单示例
- java - java.lang.RuntimeException:命名空间“http://ws.abc.com/”的架构已经包含类型
- spring - 在 Spring Cloud Gateway 过滤器中引发自定义运行时异常
- html - 在相对定位的元素之前/之后对齐移动方向元素(上一个/下一个)(无 flexbox)