在重新checkout rutorrent 3.7 版後,發現有2個有興趣的plugin

  • Pushbullet

可以利用pushbullet服務,在下載torrent完畢後傳訊息至電腦/平板或手機,首先至官網註冊帳號,取得api 資料後,填寫在rutorrent 之history 功能設定內,另外選擇想通知設備種類,像手機需安裝client app、電腦有chrome瀏覽器的外掛。但這免費服務版本1個月只有100則通知,如果torrent下載量多,鐵定會超過,而最便宜無限則數方案則要3塊多美元,約台幣100元。所以就在後面一點看有沒有免費的又沒限制

  • Xmpp

而最後是花了點時間在這個外掛,原內含版本一直無法成功使用,利用debug訊息有看到連接訊息,但利用tcpdump卻沒任何連線封包,想找找有沒解決方法,但訊息不多,最後發現原來內建版本在php7.0 以上版本無法作用(因為升級上Ubuntu 16.04),有人repair 好心將xmpp 外掛中使用的XMPPHP XMPPHP在PHP 7.0上使用 修好,利用簡單的php測試發送沒問題。棒!

接下來就是修改訊息通知內容,內建版本只送出 rtorrent “torrent 名稱” has been downloaded  那麼簡單的資料,但即然看過PushBullet所顯示的內容,想說就改一下吧!沒想到這件事也搞了快二天才搞定。主要是參考別人寫法,卻發現每個人都有小地方不同,加上不清楚怎麼使用rtorrent XMLRPC 與 WIP 方式,就一直試誤又要等torrent下載完成,花費不少時間。

  • 指令可參考https://github.com/rakshasa/rtorrent/wiki/rTorrent-0.9-Comprehensive-Command-list-(WIP) ,另外目前因為還有相關外部軟體都在用舊版,作者仍建議使用新版指令
  •  舊版rtorrent wiki資料
  • https://github.com/mdevaev/emonoda/wiki/rTorrent-XMLRPC-Reference
  1. 例如在 rtorrent 先用上下鍵找到1個torrent 後,按下crtl+x 可以打入
    print=$d.name=$d.hash=

    = 這字符很重要,忘了就會出錯。另外 , 字符代表分開的參數 如

    mv,-u,d.base_dirctory,/home/starry

    所代表的意思,把base_directory資料轉到/home/starry去

  2. 在觀看其他人的php時,都是以右方標準格式在拼湊
    excute={var1,var2,var3,……}

    而成所以在php 中可以看到,碼雖然很亂,其實就在組成相同東西,再把指令給rtorrent執行取得回應值。 PHP 中常見最簡單就是以

     '.getPHP().'

    是最原始的參數型式,在XMLRPC的運用

另外在取得rtorrent 回應值後有幾個地方需要再優化

  1. getCmd=$d.custom=addtime

    得到回應值是epoch 時間,還要調整時區

     $tAddTime = new DateTime("@$tAddTime");
     $tAddTime->setTimeZone(new DateTimeZone("Asia/Taipei"));
  2. Ratio 出來的值需除於1000才會等於,我們知道的比例值
    $tRatio = number_format($argv[6]/1000, 2, '.','');
  3. 放在xmpp.php 中的碼就改成為

    public function setHandlers()
            {
                    $theSettings = rTorrentSettings::get();
                    $pathToXmpp = dirname(__FILE__);
                    $req = new rXMLRPCRequest();
                    if ( $this->message !== '' && isset($this->jabberServer) && isset($this->jabberLogin) && isset($this->jabberPasswd) && isset($this->jabberFor))
                    {
                        $cmd = $theSettings->getOnFinishedCommand(array('xmpp'.getUser(),
                                             getCmd('execute.nothrow.bg').'={'.getPHP().','.$pathToXmpp.'/notify.php,"

  4. 上下傳要傳成 KiB,MiB,GiB等,下方的fuction 是由網路上找來copy 使用的
    $ttlup = formatBytes($argv[3]);
    $ttldown = formatBytes($argv[4]);
    <?php
    function formatbytes( $bt )
            {
                    $a = array('B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB');
                    $ndx = 0;
                    if($bt == 0)
                            $ndx = 1;
                    else
                    {
                            if($bt < 1024)
                            {
                                    $bt = $bt / 1024;
                                    $ndx = 1;
                            }
                            else
                            {
                                    while($bt >= 1024)
                                    {
                                            $bt = $bt / 1024;
                                            $ndx++;
                                    }
                            }
                    }
                    return((floor($bt*10)/10)." ".$a[$ndx]);
            }
    ?>
    
  5. Tracker 的資料最費神。因為不很明瞭原理,看某些樣版是使用mutlicall方式,加上官方文件在新版中有談到 d.multicall2 ,是對torrent本身,即字首所代表的意義。 而t.multicall 就對Tracker,這部分只能由其他人的PHP文件內看到,也查了原碼的確是有的。還有就是torrent可能包含2個以上Tracker,因此大多數外掛撰寫都利用getCmd取得Tracker資料後方再加上 # 方式做切割字眼,再利用此字原找出Tracker位址。另外部分xmpp 用戶端會把含http連結訊息,切割成另一則訊息,只好把前方 http 或 https 去除。
    $tracker = '';
    $pos = strpos( $argv[8], '#' );
       if($pos!==false)
            $tracker = parse_url(substr( $argv[8], 0, $pos ));

    取得Tracker 資訊 

    $message = $message . "\n" . "Tracker: " . $tracker['host'];
  6. 最後是Label是用來做 torrent 分類,如動漫或ISO映像檔。而程式中取得Lable時會用urlencode編碼呈現,要利urldecode用轉回。利如
    %E9%9B%BB%E5%BD%B1 = 電影

    為了要確這是何種編號也花了點時間

    $tLabel = urldecode($argv[5]);
  7. 最後我並沒有選擇使用xmpp 而是另一個PushOver,這個xmpp 與 pushover 等都使用到 php-curl ,系統需要對應的版本,可用 sudo apt install php-curl 系統應會抓到對應版本。

PushOver

是有7500個訊息/月 的免費服務,對比之前的pushbullet 來的好,因此最終選擇這個服務使用,並下載Pushover warpper的php版本,簡單呼叫把程式碼塞近notify.php 中就搞定了。

在去年11月當掉後,直到2019/4月才想到有陣子沒有收到訊息,回來要查原因時發現有些東西沒有留下,包含上頭的 rtorrent 的指令與通知的程式碼放在那都忘了

$rutorrentBaseDir/plugins/xmpp

最後終於完成了,自己覺得OK,不是正統學寫程式的,沒有什麼章法,先撐著用。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料