lachlanhickey/laravel-strava

一个用于访问 Strava API 数据的 Laravel 包。

v1.0.11 2021-08-31 04:51 UTC

This package is auto-updated.

Last update: 2024-09-29 05:49:39 UTC


README

GitHub release GitHub watchers GitHub stars GitHub forks GitHub code size in bytes GitHub issues GitHub last commit Maintenance

Laravel Strava 包

一个用于访问 Strava API 数据的 Laravel 包。与 Laravel 5.0 及以上版本兼容。

目录

Strava 访问凭证

为了使用此包,您需要在您的 Strava 账户中创建一个应用程序。 创建 Strava 应用程序 以访问您的 API 凭证。 点击此处了解更多有关 Strava API 的信息。

安装

要安装 Laravel 项目的包,请使用以下 composer 命令

composer require lachlanhickey/strava

发布 Strava 配置文件

vendor:publish 命令将在您的 Laravel 项目配置文件夹中发布一个名为 ct_strava.php 的文件(位于 config/ct_strava.php)。使用您创建的 Strava 应用程序生成的 Strava API 凭证编辑此文件。

php artisan vendor:publish --provider="CodeToad\Strava\StravaServiceProvider"

发布的配置文件内容

'client_id' => env('CT_STRAVA_CLIENT_ID', '')
'client_secret' => env('CT_STRAVA_SECRET_ID', '')
'redirect_uri' => env('CT_STRAVA_REDIRECT_URI', '')

或者,您可以选择忽略上述发布命令,并将以下变量添加到您的 .env 文件中。确保添加您的 Strava 应用程序凭据

CT_STRAVA_CLIENT_ID=ADD-STRAVA-CLIENT-ID-HERE
CT_STRAVA_SECRET_ID=ADD-STRAVA-SECRET-HERE
CT_STRAVA_REDIRECT_URI=ADD-STRAVA-REDIRECT-URI-HERE

自动发现

如果您使用的是 Laravel 5.5+,则无需手动添加服务提供者或外观。这将自动发现。对于 Laravel 5.5 以下的所有版本,您必须在您的 Laravel 项目 config/app.php 中相应数组中手动添加 ServiceProvider & Facade

提供者

CodeToad\Strava\StravaServiceProvider::class,

别名 / 外观

'Strava' => CodeToad\Strava\StravaFacade::class,

用法

使用 Strava 外观

将 Strava 外观添加到您的控制器顶部,以便您可以访问 Strava 类方法。

use Strava;

class MyController extends Controller
{
  // Controller functions here...
}

认证用户

调用 Strava::authenticate() 方法以将用户重定向到 Strava。如果认证成功,用户将被重定向到您在 config 文件或 .env 文件中添加的 redirect_uri。现在,您还可以在认证时传递 $scope 参数。您可以根据需要添加或删除作用域。一些是必需的,一些是可选的。有关可用作用域的详细信息,请参阅此处 Strava 认证作用域

public function stravaAuth()
{
  return Strava::authenticate($scope='read_all,profile:read_all,activity:read_all');
}

获取用户访问令牌

当重定向到重定向 URI 时,请调用 Strava::token($code) 方法以生成用户的 Strava 访问令牌和刷新令牌。令牌是使用重定向 URI 中 code 参数的值生成的。请确保将用户的 access_tokenrefresh_token 存储在您的数据库中。

public function getToken(Request $request)
{
  $token = Strava::token($request->code);

  // Store $token->access_token & $token->refresh_token in database
}

示例响应

"token_type": "Bearer"
"expires_at": 1555165838
"expires_in": 21600 // 6 Hours
"refresh_token": "671129e56b1ce64d7e0c7e594cb6522b239464e1"
"access_token": "e105062b153da39f81a439b90b23357c741a40a0"
"athlete": ...

此时,您已访问到 Athlete 对象,可用于登录您的网站。当然,您需要编写登录系统的逻辑,但运动员姓名、电子邮件等信息都包含在对象中,以便您可以将其与自己的数据库数据验证用户。

访问令牌过期时间

根据Strava实施的新流程,访问令牌现在将在6小时后过期,并且需要使用刷新令牌进行更新。在上面的示例中,您可以看到响应中包含refresh_tokenexpires_at字段。在存储用户访问令牌时,您可能还想存储expires_at字段。这将允许您检查当前访问令牌何时已过期。

在调用以下任何Strava方法时,您可能需要将当前时间与expires_at字段进行比较,以验证令牌。如果令牌已过期,您需要调用Strava::refreshToken($refreshToken)方法以生成新的令牌。您需要做的只是传递用户当前存储的refresh_token,然后方法将返回一组新的令牌(访问和刷新),并使用响应中的新令牌更新当前用户的令牌。以下是一个使用Strava::athlete($token)方法的示例。

public function myControllerFunction(Request $request)
{
  // Get the user
  $user = User::find($request->id);

  // Check if current token has expired
  if(Carbon::now() > $user->expires_at)
  {
    // Token has expired, generate new tokens using the currently stored user refresh token
    $refresh = Strava::refreshToken($user->refresh_token);

    // Update the users tokens
    User::where('id', $request->id)->update([
      'access_token' => $refresh->access_token,
      'refresh_token' => $refresh->refresh_token
    ]);

    // Call Strava Athlete Method with newly updated access token.
    $athlete = Strava::athlete($user->access_token);

    // Return $athlete array to view
    return view('strava.athlete')->with(compact('athlete'));

  }else{

    // Token has not yet expired, Call Strava Athlete Method
    $athlete = Strava::athlete($user->access_token);

    // Return $athlete array to view
    return view('strava.athlete')->with(compact('athlete'));

  }

}

注销用户

您可以让用户通过您的Strava应用程序注销其Strava帐户。只需允许用户调用以下方法,传递存储在他们帐户中的访问令牌即可。

Strava::unauthenticate($token);

可用方法

所有方法都需要访问令牌,一些方法接受以下列出的附加可选参数。

  • 可选参数
    • $page (Int - 默认 1)
    • $perpage (Int - 默认 10)
    • $before (Int/时间戳 - 默认 = 最近)
    • $after (Int/时间戳 - 默认 = 最近)

运动员数据

返回当前认证的运动员。

Strava::athlete($token);

用户活动数据

返回运动员的活动。

Strava::activities($token, $page, $perPage, $before, $after);

用户单个活动

返回认证运动员拥有的指定活动。

Strava::activity($token, $activityID);

用户单个活动流

返回指定活动的流。

// $keys is a string array containing required streams
// e.g. ['latlng', 'time']
Strava::activityStream($token, $activityID, $keys = '', $keyByType = true);

活动评论

返回指定活动的评论。

Strava::activityComments($token, $activityID, $page, $perPage);

活动点赞

返回对活动进行了点赞的运动员。

Strava::activityKudos($token, $activityID, $page, $perPage);

活动圈数

返回活动的圈数数据。

Strava::activityLaps($token, $activityID);

活动区域

需要Summit功能。返回给定活动的区域。

Strava::activityZones($token, $activityID);

运动员区域

返回认证运动员的心率功率区域。

Strava::athleteZones($token);

运动员统计数据

返回运动员的活动统计信息。

Strava::athleteStats($token, $athleteID, $page, $perPage);

俱乐部

使用其标识符返回给定的俱乐部。

Strava::club($token, $clubID);

俱乐部成员

返回属于给定俱乐部的运动员列表。

Strava::clubMembers($token, $clubID, $page, $perPage);

俱乐部活动

从特定俱乐部的成员中检索最近的活动。认证运动员必须属于请求的俱乐部才能访问此端点。支持分页。尊重所有活动的运动员个人资料可见性。

Strava::clubActivities($token, $clubID, $page, $perPage);

俱乐部管理员

返回给定俱乐部的管理员列表。

Strava::clubAdmins($token, $clubID, $page, $perPage);

运动员俱乐部

返回包括认证运动员的俱乐部列表。

Strava::athleteClubs($token, $page, $perPage);

装备

使用装备ID返回装备数据。

Strava::gear($token, $gearID);

路线

返回指定路线的路线。

Strava::route($token, $routeID);

运动员路线

返回使用运动员ID创建的路线列表。

Strava::athleteRoutes($token, $athleteID, $page, $perPage);

赛段

返回指定的段。

Strava::segment($token, $segmentID);

赛段努力

返回由认证运动员拥有的活动中的段努力。

Strava::segmentEffort($token, $segmentID);

收藏赛段

列出认证运动员的收藏段。

Strava::starredSegments($token, $page, $perPage);

参数类型

$token        = String
$activityID   = integer
$athleteID    = integer
$clubID       = integer
$gearID       = integer
$routeID      = integer
$segmentID    = integer
$page         = integer
$perPage      = integer
$before       = integer (timestamp)
$after        = integer (timestamp)

缓存

强烈建议您对Strava请求进行缓存,原因如下。

(1) 速率限制

Strava的API速率限制相当好,每15分钟600个请求,每天30,000个。如果您的网站流量很大,您可能需要考虑缓存Strava响应数据,以避免超过这些限制。

(2) 网站加载速度

缓存您的Strava数据将显著提高网站加载时间。

有用的链接