kyoden / php-garmin-connect
一个用于查询 Garmin Connect "API" 的 PHP 适配器
Requires
- php: >=7.2
- ext-curl: *
- ext-json: *
- nesbot/carbon: ^2.48
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.15
- squizlabs/php_codesniffer: 2.8.*
This package is not auto-updated.
Last update: 2024-09-25 12:09:44 UTC
README
这是一个从 dawguk 代码分支出来的版本,主要用于更新到最新的 Garmin Connect 功能。这是一个用于查询 Garmin Connect "API" 的 PHP 适配器
分支:dawguk/php-garmin-connect 并与 klorie/php-garmin-connect 合并
前言
Garmin 的 Connect 工具并没有一个真正的 API。嗯,他们似乎有,但是做得半途而废;他们似乎已经放弃了它或者让它过时了,文档非常稀少,而且似乎没有“正确”的方式来验证用户。
所以多亏了 Collin @tapiriik 和他的出色的公共 Python 仓库(https://github.com/cpfair/tapiriik),这个项目应运而生,为那些喜欢大象而不是蛇的人们;)
代码有很好的文档记录,这是必须的,因为我们必须做一些相当棘手的事情。一旦完成身份验证,基本上就是老式的 RESTFUL API 东西。哦,但我们正在使用 CURL cookie 处理来维护会话状态。呃。
完整示例
我们只需使用我们的 Garmin Connect 凭据进行连接。
<?php $arrCredentials = array( 'username' => 'xxx', 'password' => 'xxx', ); try { $GarminConnect = new \GarminConnect\GarminConnect($arrCredentials); $filters = new \GarminConnect\ParametersBuilder\ActivityFilter(); $filters->betweenDate(new \DateTime('2018-05-01'), new \DateTime('2018-05-31')); $filters->type(\GarminConnect\ActivityType::RUNNING); $filters->limit(1); $results = $GarminConnect->getActivityList($filters); foreach ($results as $activity) {print " - {$activity->activityName} at {$activity->startTimeLocal} (type: {$activity->activityType->typeKey})" . PHP_EOL; } } catch (Exception $objException) { echo "Oops: " . $objException->getMessage(); }
API 函数
库实现了一些基本的 API 函数,您可以使用这些函数检索有用的信息。方法签名如下
getActivityTypes()
返回一个 stdClass 对象,其中包含一个名为 dictionary 的数组,该数组包含代表活动类型的 stdClass 对象。
示例
try { $GarminConnect = new \GarminConnect\GarminConnect($arrCredentials); $obj_results = $GarminConnect->getActivityTypes(); foreach ($obj_results->dictionary as $item) { print_r($item); } } catch (Exception $objException) { echo "Oops: " . $objException->getMessage(); }
响应
stdClass Object
(
[key] => road_biking
[display] => Road Cycling
[parent] => stdClass Object
(
[key] => cycling
[display] => Cycling
)
[type] => stdClass Object
(
[key] => cycling
[display] => Cycling
)
)
getActivityList(ActivityFilter $filters)
返回一个 stdClass 对象,其中包含一个名为 results 的数组,该数组包含代表活动的 stdClass 对象。它接受 ActivityFilter 参数,一个用于过滤活动的对象。
示例
try { $GarminConnect = new \GarminConnect\GarminConnect($arrCredentials); $fitlers = new \GarminConnect\GarminConnect\ParametersBuilder\ActivityFilter(); $fitlers->betweenDate(new \DateTime('2018-06-01'), new \DateTime('2018-06-05')); $fitlers->type(\GarminConnect\GarminConnect\ActivityType::RUNNING); $obj_results = $GarminConnect->getActivityList($fitlers); print_r($obj_results); } catch (Exception $objException) { echo "Oops: " . $objException->getMessage(); }
getActivitySummary(integer $intActvityID)
返回一个 stdClass 对象,其中包含一个名为 activity 的 stdClass 对象,其中包含大量的数据,代表您作为参数传递的活动 ID。此活动 ID 可以从 getActivityList() 响应中获取(例如 $objResponse->results->activities[0]->activity->activityId)。
示例
try { $GarminConnect = new \GarminConnect\GarminConnect($arrCredentials); $obj_results = $GarminConnect->getActivitySummary(593520370); print_r($obj_results); } catch (Exception $objException) { echo "Oops: " . $objException->getMessage(); }
响应
遗憾的是,这个响应太大,无法在这里展示 - 您需要执行上述操作并亲自查看!
getActivityDetails(integer $intActivityID)
如果您认为前面的函数返回了大量的数据,您最好坐下来 - 这是一个大块头!
一如既往,它返回一个 stdClass 对象,该对象包含一个名为 "com.garmin.activity.details.json.ActivityDetails" 的 stdClass 对象(是的!)它包含许多成员和对象,代表您活动的原始数据。因此,所有原始锻炼数据(指标)也返回。您可以考虑这是 GPX 数据的文本表示,例如。
它包含一个stdClass对象的数组(测量值),这些对象是指标数据的索引。例如,此信息显示指标索引 3 代表温度数据,索引 1 是自行车踏频等。
指标数据位于指标数组中,这是一个包含多个stdClass对象的数组,这些对象包含名为 metrics 的数组,其索引可以在测量数据中找到。
您看到它时就会明白。
注意:此方法可能需要一段时间才能返回数据,因为它可能很大。
示例
try { $GarminConnect = new \GarminConnect\GarminConnect($arrCredentials); $obj_results = $GarminConnect->getActivityDetails(593520370); print_r($obj_results); } catch (Exception $objException) { echo "Oops: " . $objException->getMessage(); }
响应
不可能!
getDataFile(string $strType, integer $intActivityID)
返回给定活动 ID 请求的数据类型的字符串表示形式。第一个参数是以下之一
示例
try { $GarminConnect = new \GarminConnect\GarminConnect($arrCredentials); $obj_results = $GarminConnect->getDataFile(\GarminConnect\GarminConnect::DATA_TYPE_GPX, 593520370); print_r($obj_results); } catch (Exception $objException) { echo "Oops: " . $objException->getMessage(); }
响应(不完整)
<?xml version="1.0" encoding="UTF-8"?>
<gpx version="1.1" creator="Garmin Connect" 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" 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" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<metadata>
<link href="connect.garmin.com">
<text>Garmin Connect</text>
</link>
<time>2014-09-18T17:22:50.000Z</time>
</metadata>
<trk>
<name>Untitled</name>
<trkseg>
<trkpt lon="-2.246061209589243" lat="53.48290401510894">
<ele>54.599998474121094</ele>
<time>2014-09-18T17:22:50.000Z</time>
<extensions>
<gpxtpx:TrackPointExtension>
<gpxtpx:atemp>22.0</gpxtpx:atemp>
<gpxtpx:cad>0</gpxtpx:cad>
</gpxtpx:TrackPointExtension>
</extensions>