FTP値を出すためには時間内のパワーの平均を出す必要がある。そのためにはスプレッドシートに読み込む必要がある。となるとcsv化。
gpxはxmlファイルの一種だからsimplexmlで簡単に行けると思ったらちょっと引っかかった。
stravaからダウンロードしたgpxの先頭部分(最初の要素まで)はこんな感じ。
<?xml version="1.0" encoding="UTF-8"?> <gpx creator="StravaGPX" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd" version="1.1" xmlns="http://www.topografix.com/GPX/1/1" xmlns:gpxtpx="http://www.garmin.com/xmlschemas/TrackPointExtension/v1" xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3"> <metadata> <time>2021-03-30T11:44:33Z</time> </metadata> <trk> <name>onelap 12 All-round Capacity Test</name> <type>17</type> <trkseg> <trkpt lat="36.1344890" lon="120.5331290"> <ele>101.0</ele> <time>2021-03-30T11:44:33Z</time> <extensions> <power>0</power> <gpxtpx:TrackPointExtension> <gpxtpx:hr>0</gpxtpx:hr> <gpxtpx:cad>0</gpxtpx:cad> </gpxtpx:TrackPointExtension> </extensions> </trkpt>
要素を一つvar_dumpで取り出してみる。
object(SimpleXMLElement)#2 (4) { ["@attributes"]=> array(2) { ["lat"]=> string(10) "36.1344230" ["lon"]=> string(11) "120.5331050" } ["ele"]=> string(5) "101.0" ["time"]=> string(20) "2021-03-30T11:44:38Z" ["extensions"]=> object(SimpleXMLElement)#5 (1) { ["power"]=> string(1) "0" } }
@attributesのところはそのままやっても取り出せない。検索。なるほど、@を取って()をつけるとな。
www.searchlight8.com
次に、extensions。powerはvar_dumpで出てくるけど、hrとcadは出てこない。これも検索。ほう、このタイプのやつ、名前空間というのか。ちょっと文字数が多くなりそう。
www.terakoya.work
で、完成。ファイル名はstrava.gpxで固定。
#!/usr/bin/php <?php #stravaからエクスポートしたgpxファイルをcsvとして標準出力へ error_reporting(E_ALL); $xml = simplexml_load_file("strava.gpx", 'SimpleXMLElement', LIBXML_NOCDATA); #ファイル名固定 $items = $xml->trk->trkseg->trkpt; foreach( $items as $item){ echo strftime("%Y/%m/%d",strtotime($item->time)); echo ","; echo strftime("%H:%M:%S",strtotime($item->time)); echo ","; echo $item->attributes()->lat; echo ","; echo $item->attributes()->lon; echo ","; echo $item->extensions->power; echo ","; echo $item->extensions->children("gpxtpx",true)->TrackPointExtension->hr; echo ","; echo $item->extensions->children("gpxtpx",true)->TrackPointExtension->cad; echo "\n"; } ?>
onelapからstravaに自動同期したデータが前提なので、他では不都合が出るかも。