motion-php/client

用于Motion的PHP编写的API客户端

1.0.0 2023-05-06 11:27 UTC

This package is auto-updated.

Last update: 2024-08-26 04:51:20 UTC


README

Motion PHP 是一个社区维护的PHP API客户端,用于与 Motion API 交互。Motion是一款优秀的日历和项目管理应用,利用人工智能有效地重新安排你的时间。如果你还没有听说过它,可以去 usemotion.com 查看更多信息。

Motion PHP Example

GitHub Workflow Status (main) Packagist Version (including pre-releases) Packagist Downloads GitHub

目录

入门

需要 PHP 8.1+

需要 PSR-18 HTTP客户端

使用Composer包管理器安装Motion PHP客户端

composer require motion-php/client

确保允许php-http/discovery Composer插件运行,或者如果您的项目还没有,请手动安装PSR-18 HTTP客户端实现。

composer require guzzlehttp/guzzle

然后您就可以与Motion API进行交互了。为了快速开始,您可以使用Motion::client工厂方法创建客户端实例。

$apiKey = getenv('YOUR_API_KEY');

$client = Motion::client($apiKey);

$result = $client->task()->create([
    'name' => 'My Task',
    'description' => 'My Task Description',
    'status' => 'Completed',
]);

echo $result['task']['name']; // My Task
echo $result['task']['description']; // My Task Description
echo $result['task']['status']; // Completed

如果您需要使用Motion::factory方法配置和提供单独的HTTP客户端。

$apiKey = getenv('YOUR_API_KEY');

// PSR-18 HTTP Client
$httpClient = new GuzzleHttp\Client([]);

$client = Motion::factory()
    ->withApiKey($apiKey)
    ->withBaseUri('api.usemotion.com')
    ->withHttpClient($httpClient)
    ->withHttpHeader('X-My-Header', 'foo')
    ->withQueryParam('foo', 'bar')
    ->withStreamHandler(fn (RequestInterface $request): ResponseInterface => $client->send($request, [
        'stream' => true
    ]))
    ->make();

用法

任务资源

update任务

更新具有给定id和属性的作业。返回一个Task对象。

PATCH /tasks/{id}: 📖 文档

$response = $client->tasks()->update('IF0lK9JcsdaxeLkDZ0nMG', [
    'name' => 'My Task',
    'description' => 'My Task Description',
    'status' => 'Completed',
]);

$task = $response->task; // Task object

$task->id; // IF0lK9JcsdaxeLkDZ0nMG
$task->name; // My Task
$task->description; // My Task Description
$task->project; // Project object

$task->toArray(); // ['id' => 'IF0lK9JcsdaxeLkDZ0nMG', ...]

create任务

创建具有给定属性的作业。返回一个Task对象。

POST /tasks: 📖 文档

$response = $client->tasks()->create([
    'name' => 'My Task',
    'description' => 'My Task Description',
    'status' => 'Completed',
]);

$task = $response->task; // Task object

$task->id; // IF0lK9JcsdaxeLkDZ0nMG
$task->name; // My Task
$task->description; // My Task Description
$task->project; // Project object

$task->toArray(); // ['id' => 'IF0lK9JcsdaxeLkDZ0nMG', ...]

delete任务

删除具有给定id的任务。返回一个Task对象。

DELETE /tasks/{id}: 📖 文档

$response = $client->tasks()->delete('IF0lK9JcsdaxeLkDZ0nMG');

retrieve任务

检索具有给定id的任务。返回一个Task对象。

GET /tasks/{id}: 📖 文档

$response = $client->tasks()->retrieve('IF0lK9JcsdaxeLkDZ0nMG');

$task = $response->task; // Task object

$task->id; // IF0lK9JcsdaxeLkDZ0nMG
$task->name; // My Task
$task->description; // My Task Description
$task->project; // Project object

$task->toArray(); // ['id' => 'IF0lK9JcsdaxeLkDZ0nMG', ...]

move任务在工作空间之间移动

将具有给定id的任务移动到具有给定id的新工作空间。返回一个Task对象。

POST /tasks/{id}/move: 📖 文档

$response = $client->tasks()->move('IF0lK9JcsdaxeLkDZ0nMG', 'IF0lK9JcsdaxeLkDZ0nMG');

$task = $response->task; // Task object

$task->id; // IF0lK9JcsdaxeLkDZ0nMG
$task->name; // My Task
$task->description; // My Task Description
$task->project; // Project object

$task->toArray(); // ['id' => 'IF0lK9JcsdaxeLkDZ0nMG', ...]

重复任务资源

create重复任务

创建具有给定属性的重复任务。返回一个RecurringTask对象。

POST /recurring-tasks: 📖 文档

$response = $client->recurringTasks()->create([
    'name' => 'My Task',
    'description' => 'My Task Description',
    'status' => 'Completed',
]);

$task = $response->task; // Task object

$task->id; // IF0lK9JcsdaxeLkDZ0nMG
$task->name; // My Task

list重复任务

列出工作空间中的重复任务。返回一个RecurringTask对象的数组。

GET /recurring-tasks: 📖 文档

$response = $client->recurringTasks()->list('workspaceId');

$tasks = $response->tasks; // array of Task objects
$meta = $response->meta; // Meta object

foreach ($tasks as $task) {
    $task->id; // IF0lK9JcsdaxeLkDZ0nMG
    $task->name; // My Task
    $task->project; // Project object
}

$meta->pageSize; // 20
$meta->nextCursor; // IF0lK9JcsdaxeLkDZ0nMG

删除一个周期性任务

删除给定 id 的周期性任务。返回一个 id 字符串。

DELETE /recurring-tasks/{id}: 📖 文档

$response = $client->recurringTasks()->delete('IF0lK9JcsdaxeLkDZ0nMG');

工作空间 资源

列表

列出组织的所有工作空间。

GET /workspaces: 📖 文档

$response = $client->workspaces()->list();

$response->workspaces; // array of Workspace objects

foreach ($response->workspaces as $workspace) {
    $workspace->id; // IF0lK9JcsdaxeLkDZ0nMG
    $workspace->name; // My Workspace
    $workspace->teamId; // 2f0lK9JcsdaxeLkDZ0nMG
    $workspace->statuses; // array of Status objects
    $workspace->labels; // array of Label objects
    $workspace->type; // INDIVIDUAL
}

$response->toArray(); // ['workspaces' => [...]]

状态

列出工作空间的状态

$response = $client->workspaces()->statuses('IF0lK9JcsdaxeLkDZ0nMG');

$response->statuses; // array of Status objects

foreach ($response->statuses as $status) {
    $status->name; // In Progress
    $status->isDefaultStatus // true
    $status->isResolvedStatus // false
}

$response->toArray(); // ['statuses' => [...]]

用户 资源

列表

列出当前可用的用户。可以通过 teamIdworkspaceId 进行限制。

$response = $client->users()->list([
    'workspaceId' => 'IF0lK9JcsdaxeLkDZ0nMG'
]);

$response->users; // array of User objects

foreach ($response->users as $user) {
    $user->id; // LPSIBmTN2eai9uYoKtMkzWVFTUo2
    $user->name; // Adam Paterson
    $user->email; // adam@usemotion.com
}

$response->toArray(); // ['users' => [...]]

测试

$ composer test

模拟模式

客户端可以配置为以模拟模式运行。这将返回所有请求的模拟响应。这对于测试很有用。这有助于在没有触达API和达到速率限制的情况下进行实施。

$client = Motion::factory()
    ->withApiKey($apiKey)
    ->useMockMode(true)
    ->make();

$response = $client->tasks()->list();

$response->tasks; // array of Task objects