ohnotnow/laravel-transmission

Laravel 封装 Transmission 比特流服务器 API

2.0.1 2019-07-29 17:23 UTC

This package is auto-updated.

Last update: 2024-08-29 04:25:46 UTC


README

工作进度

Laravel API 封装 Transmission

这是一个目前非常基础的封装,用于Transmission 比特流客户端的 API。

目前它只支持获取所有当前比特流列表、获取特定的比特流和以“暂停”模式添加新的比特流。这正好符合我在transcopy中的需求。

如果你需要一个不带 Laravel 功能的纯 PHP 版本,可以查看底层库

安装

假设你已经安装了 composer

composer require ohnotnow/laravel-transmission

假设你使用的是 Laravel 5.5+,则包应该会自动发现。如果不是,你需要手动将其添加到 Providers/Aliases 中,以便添加到你的 config/app.php

'providers' => [
...
    Ohffs\LaravelTransmission\TransmissionServiceProvider::class,
...
],
'aliases' => [
...
    'Transmission' => Ohffs\LaravelTransmission\Transmission::class,
...
]

使用方法

首先需要设置一些环境变量

TRANSMISSION_HOST=127.0.0.1
TRANSMISSION_PORT=9091
TRANSMISSION_USERNAME=
TRANSMISSION_PASSWORD=

然后在你的项目中的某个地方

use Ohffs\LaravelTransmission\Client;

class Whatever
{
    protected $transmission;

    public function __construct(Client $transmission)
    {
        $this->transmission = $transmission;
    }

    public function index()
    {
        return $this->transmission->all();
    }

    public function show($id)
    {
        return $this->transmission->find($id);
    }
}

你也可以选择使用 Transmission 门面

use Ohffs\LaravelTransmission\Transmission;

// ...

$allTorrents = Transmission::all();
$singleTorrent = Transmission::find(1);

find() 方法返回一个单独的 TorrentEntry 类,all() 方法返回一个包含它们的集合。数据是以 Transmission API 提供的格式,例如 'percentDone' 是从 0.0 到 1.0 的浮点数,所以你需要将其乘以 100 来得到“真实”的百分比。你可以从它们中获取数据

$torrent = $this->transmission->find(1);
echo $torrent->toArray();
/*
 'name' => 'Some Exciting File',
 'id' => 1,
 'doneDate' => 0,
 'eta' => 1000,
 'haveValid' => 0,
 'rateDownload' => 0,
 'rateUpload' => 0,
 'status' => 2,
 'totalSize' => 364514248,
 'downloadDir' => '/tmp/torrents',
 'percentDone' => 0.3,
 */

// And you can also get those as attributes on the object, eg :

echo $torrent->name;
// 'Some Exciting File'

使用 all() 方法返回的集合,你可以当然使用 Laravel 的所有集合方法。例如,为了获取仍在下载的比特流列表

$stillDownloading = $this->transmission->all()->filter(function ($torrent, $key) {
    return $torrent->percentDone < 1;
});