basvandorst/stravaphp

Strava V3 API PHP客户端,支持OAuth认证

2.0.0 2022-04-22 12:27 UTC

This package is auto-updated.

Last update: 2024-08-30 01:25:57 UTC


README

Build Status Coverage Status

简要说明: Strava V3 API PHP客户端,支持OAuth认证

Strava V3 API是一个公开接口,允许开发者访问丰富的Strava数据集。该接口稳定,目前被Strava移动应用程序使用。然而,为了提高性能和增强功能,偶尔会进行修改。有关详细信息,请参阅Strava的变更日志

在这个GitHub仓库中,您可以找到Strava V3 API的PHP实现。StravaPHP当前版本结合了V3 API和适当的OAuth认证。

入门指南

获取API密钥

所有对Strava API的调用都需要一个访问令牌,该令牌定义了发出调用的运动员和应用程序。任何注册的Strava用户都可以通过首先在https://developers.strava.com创建应用程序来获取访问令牌。

Composer包

使用Composer安装此StravaPHP包。

{
    "require": {
        "basvandorst/stravaphp": "^2.0.0"
    }
}

StravaPHP使用方法

首先,授权和认证

<?php
include 'vendor/autoload.php';

use Strava\API\OAuth;
use Strava\API\Exception;

try {
    $options = [
        'clientId'     => 1234,
        'clientSecret' => 'APP-TOKEN',
        'redirectUri'  => 'http://my-app/callback.php'
    ];
    $oauth = new OAuth($options);

    if (!isset($_GET['code'])) {
        print '<a href="'.$oauth->getAuthorizationUrl([
            // Uncomment required scopes.
            'scope' => [
                'read',
                // 'read_all',
                // 'profile:read_all',
                // 'profile:write',
                // 'activity:read',
                // 'activity:read_all',
                // 'activity:write',
            ]
        ]).'">Connect</a>';
    } else {
        $token = $oauth->getAccessToken('authorization_code', [
            'code' => $_GET['code']
        ]);
        print $token->getToken();
    }
} catch(Exception $e) {
    print $e->getMessage();
}

然后,调用您的API方法!

<?php
include 'vendor/autoload.php';

use Strava\API\Client;
use Strava\API\Exception;
use Strava\API\Service\REST;

try {
    $adapter = new \GuzzleHttp\Client(['base_uri' => 'https://www.strava.com/api/v3/']);
    $service = new REST($token->getToken(), $adapter);  // Define your user token here.
    $client = new Client($service);

    $athlete = $client->getAthlete();
    print_r($athlete);

    $activities = $client->getAthleteActivities();
    print_r($activities);

    $club = $client->getClub(9729);
    print_r($club);
} catch(Exception $e) {
    print $e->getMessage();
}

类文档

Strava\API\Factory

使用方法

use Strava\API\Factory;

// Configure your app ID, app token and callback uri
$factory = new Factory();
$OAuthClient = $factory->getOAuthClient(1234, 'APP-TOKEN', 'http://my-app/callback.php');

方法

$factory->getOAuthClient($client_id, $client_secret, $redirect_uri);
$factory->getAPIClient($token);

Strava\API\OAuth

使用方法

use Strava\API\OAuth;

// Parameter information: https://strava.github.io/api/v3/oauth/#get-authorize
$options = [
    'clientId'     => 1234,
    'clientSecret' => 'APP-TOKEN',
    'redirectUri'  => 'http://my-app/callback.php'
];
$oauth = new OAuth($options);

// The OAuth authorization procces (1st; let the user approve, 2nd; token exchange with Strava)
if (!isset($_GET['code'])) {
    print '<a href="'.$oauth->getAuthorizationUrl([
        // Uncomment required scopes.
        'scope' => [
            'read',
            // 'read_all',
            // 'profile:read_all',
            // 'profile:write',
            // 'activity:read',
            // 'activity:read_all',
            // 'activity:write',
        ]
    ]).'">Connect</a>';
} else {
    $token = $oauth->getAccessToken('authorization_code', [
        'code' => $_GET['code']
    ]);
    print $token->getToken();
}

方法

$oauth->getAuthorizationUrl($options = []);
$oauth->getAccessToken($grant = 'authorization_code', $params = []);

Strava\API\Client

使用方法

// REST adapter (We use `Guzzle` in this project)
use GuzzleHttp\Client as GuzzleClient;
use Strava\API\Service\REST;
use Strava\API\Client;

$adapter = new GuzzleClient(['base_uri' => 'https://www.strava.com/api/v3/']);
// Service to use (Service\Stub is also available for test purposes)
$service = new REST('RECEIVED-TOKEN', $adapter);

// Receive the athlete!
$client = new Client($service);
$athlete = $client->getAthlete();
print_r($athlete);

方法

$client->getAthlete($id = null);
$client->getAthleteStats($id);
$client->getAthleteClubs();
$client->getAthleteRoutes($id, $type = null, $after = null, $page = null, $per_page = null);
$client->getAthleteActivities($before = null, $after = null, $page = null, $per_page = null);
$client->getAthleteFriends($id = null, $page = null, $per_page = null);
$client->getAthleteFollowers($id = null, $page = null, $per_page = null);
$client->getAthleteBothFollowing($id, $page = null, $per_page = null);
$client->getAthleteKom($id, $page = null, $per_page = null);
$client->getAthleteZones();
$client->getAthleteStarredSegments($id = null, $page = null, $per_page = null);
$client->updateAthlete($city, $state, $country, $sex, $weight);
$client->getActivityFollowing($before = null, $page = null, $per_page = null); 
$client->getActivity($id, $include_all_efforts = null);
$client->getActivityComments($id, $markdown = null, $page = null, $per_page = null);
$client->getActivityKudos($id, $page = null, $per_page = null);
$client->getActivityPhotos($id, $size = 2048, $photo_sources = 'true');
$client->getActivityZones($id);
$client->getActivityLaps($id);
$client->getActivityUploadStatus($id);
$client->createActivity($name, $type, $start_date_local, $elapsed_time, $description = null, $distance = null);
$client->uploadActivity($file, $activity_type = null, $name = null, $description = null, $private = null, $commute = null, $trainer = null, $data_type = null, $external_id = null);
$client->updateActivity($id, $name = null, $type = null, $private = false, $commute = false, $trainer = false, $gear_id = null, $description = null);
$client->deleteActivity($id);
$client->getGear($id);
$client->getClub($id);
$client->getClubMembers($id, $page = null, $per_page = null);
$client->getClubActivities($id, $page = null, $per_page = null);
$client->getRoute($id);
$client->getRouteAsGPX($id);
$client->getRouteAsTCX($id);
$client->getSegment($id);
$client->getSegmentLeaderboard($id, $gender = null, $age_group = null, $weight_class = null, $following = null, $club_id = null, $date_range = null, $page = null, $per_page = null);
$client->getSegmentExplorer($bounds, $activity_type = 'riding', $min_cat = null, $max_cat = null);
$client->getSegmentEffort($id, $athlete_id = null, $start_date_local = null, $end_date_local = null, $page = null, $per_page = null);
$client->getStreamsActivity($id, $types, $resolution = null, $series_type = 'distance');
$client->getStreamsEffort($id, $types, $resolution = null, $series_type = 'distance');
$client->getStreamsSegment($id, $types, $resolution = null, $series_type = 'distance');
$client->getStreamsRoute($id);

UML图

类图

class

序列图

sequence

关于StravaPHP

使用的库

开发

StravaPHP库由软件工程师和自行车爱好者Bas van Dorst创建。当然,特别感谢所有贡献者

贡献

所有问题和拉取请求都应填写在basvandorst/StravaPHP仓库中。

许可证

StravaPHP库是开源软件,使用MIT许可证。