FIT
是一种二进制文件格式,用于存储健康和健身设备(如个人训练计算机、心率显示屏、自行车计算机等)生成的健康和健身数据。FIT
文件包含多个数据帧,每个数据帧包含一些数据字段,这些数据字段对应于特定健身活动的特定事件或统计信息。对于不同的健身设备和健身活动(如跑步、骑行、游泳等),每个 FIT
文件可能具有不同的数据帧类型和字段。
目前使用python的方式解析
#以下执行版本为python2.7 fitparse版本23.1.2 既1.2.0
import io
import os
import requests
import json
import datetime
import tempfile
import fitparse
class DateTimeEncoder(json.encoder.JSONEncoder):
def default(self, o):
if isinstance(o, datetime.datetime):
return o.isoformat()
return super(DateTimeEncoder, self).default(o)
def parse_fit_file_from_url(url):
# 从 URL 下载 `.fit` 文件并将其保存到临时文件中
response = requests.get(url)
content_file = io.BytesIO(response.content)
temp_file = tempfile.NamedTemporaryFile(delete=False)
temp_file.write(content_file.getvalue())
temp_file.close()
# 解析 `.fit` 文件并提取数据
fitfile = fitparse.FitFile(temp_file.name)
lap_data = []
message_data = []
for record in fitfile.get_messages('record'):
# 从每个记录帧中提取数据并转换为字典
message = {}
for data in record:
name = data.name
value = data.value
# 如果值为 bytes 类型,则将其转换为字符串类型
if isinstance(value, str):
value = value.decode('utf-8')
value = value.split('\x00')[0] or None
message[name] = value
message_data.append(message)
# 删除临时文件
os.unlink(temp_file.name)
# 将提取的数据转换为 JSON 格式并返回
result_json = json.dumps(message_data, cls=DateTimeEncoder)
return result_json
# 设置要下载和解析的 `.fit` 文件地址
url = "xxxxx.fit"
# 调用解析 `.fit` 文件的函数,将结果作为 JSON 返回
result_json = parse_fit_file_from_url(url)
# 输出 JSON 格式的解析结果
print(result_json)
但是我在解析高驰时遇到一个问题
Invalid field size 1 for type 'uint32' (expected a multiple of 4)
改版本可能已经不适用于python2.7.2
推荐将其改为fitdecode(不支持python2)
当然你也可以重写他的代码库。