海运的博客

transmission rpc api php

发布时间:December 29, 2018 // 分类:PT // No Comments

<?php
class transmission {
  public $url;
  public $user;
  public $pass;
  public $session_id = '';
  public $header = array(
    //'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0',
    'Connection: keep-alive'
  );

  public function __construct($url, $user, $pass) {
    $this->url = $url;
    $this->user = $user;
    $this->pass = $pass;
    $this->request();
  }

  function request($post = "") {
    //echo $url.PHP_EOL;
    $url = $this->url;
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_HEADER, 1);
    curl_setopt($curl, CURLOPT_TIMEOUT, 10);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($curl, CURLOPT_MAXREDIRS, 5);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
    $header = $this->header;
    if ($this->session_id) {
      $header[] = 'X-Transmission-Session-Id: '.$this->session_id;
    }
    $header[] = "Authorization: Basic ".base64_encode($this->user.':'.$this->pass);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
    if ($post) {
      echo $post.PHP_EOL;
      curl_setopt($curl, CURLOPT_POST, 1);
      curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
    }
    $data = curl_exec($curl);
    $code = curl_getinfo($curl)["http_code"];
    $header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
    //var_dump(curl_getinfo($curl));
    curl_close($curl);
    $header = substr($data, 0, $header_size);
    $body = substr($data, $header_size);
    //var_dump($header);
    //var_dump($body);
    if ($code == 409 && preg_match('/<code>X-Transmission-Session-Id: (.*?)<\/code>/', $data, $mh)) {
      $this->session_id = $mh[1];
    } elseif ($code == 401) {
      die("Authorization error".PHP_EOL);
    } elseif ($code == 200) {
      return json_decode($body, 1);
    }
  }

  function build_request($method, $arguments) {
    $post_data = json_encode(array('method' => $method, 'arguments' => $arguments));
    return $this->request($post_data);
  }

  public function get($ids = null, $fields = null) {
    $fields = $fields ? $fields : array( "id", "name", "status", "doneDate", "haveValid", "totalSize", "trackers", "uploadLimited", "uploadLimit");
    $arguments = $ids ? array("fields" => $fields, "ids" => $ids) : array("fields" => $fields);
    return $this->build_request( "torrent-get", $arguments );
  }

  public function reannounce($ids = null) {
    $arguments = $ids ? array("ids" => $ids) : array();
    return $this->build_request( "torrent-reannounce", $arguments);
  }
}

/*
$rpc = new transmission("http://192.168.168.6:9091/transmission/rpc", "admin", "pass");
$data = $rpc->get(array(1), array('id'));
//$data = $rpc->get();
$data = $rpc->reannounce();
var_dump($data);
 */

更多参数:
https://github.com/transmission/transmission/blob/master/extras/rpc-spec.txt

标签:none

发表评论

分类
最新文章
最近回复
  • 海运: 换回了5.3内核,5.8用5.3 dtb虽然能开机且负载正常,但也有其它问题,不建议使用。
  • shangyatsen: 后面的内核高精度计时器的问题使用5.4或者5.3的dtb会正常吗?我也发现有这个日志出现。感觉...
  • 海运: 缺少相应模块?
  • lee: 你好,我执行这条语句 iptables -t mangle -A PREROUTING -m ...
  • 海运: 只更新rootfs,不更新内核,我在用5.3配19.10,懒得再升最新版了,很稳定。 注意:更...
  • lyly168: 这是手动挂载吧,请问自动挂载要怎么弄?
  • swswsw1: 请问升级后,内核更新了吗?听说N1只有在5.0.2的内核下才稳定,怕升级了之后功耗太高
  • 海运: LOG_LEVEL是配置文件变量,本文配置使用systemd启动在EnvironmentFil...
  • 1: 我源碼沒有任何修改,同樣編譯的在X86上可以正常運行。然後原封不動編譯aarch64就提示以上錯誤。
  • 海运: 你配置变量有问题?LOG_LEVEL? https://github.com/dani-gar...