Dropbox ile otomatik Torrent indirme

Evdeki Raspberry Pi sunucuda çalışan Transmission uygulamasının web arabirimi, uzaktan torrent dosyası ekleme, download listesini takip etme, indirmeyi durdurma gibi işlemleri destekliyor. Böylece şirketten evdeki bilgisayara torrent indirmek kolaylaşıyor. Ama her bulduğunuz torrent dosyasını eklemek için sunucunun web sayfasına bağlanmak, kullanıcı ismi ve parola girmek gerekiyor. Bunu nasıl otomatikleştiririm diye düşünürken aklıma IFTTT ‘nin Dropbox yöntemi geldi.

Planım şuydu, Dropbox’ta bir dizin oluşturup, torrent dosyalarını buraya deoplayacağım, bir uygulama da bu watchfolderdaki dosyaları transmissiona RPC ile gönderip download işlemini başlatacak. Sonunda yaptım.

Gerekenler;
– Dropbox hesabı ve API bilgileri (key, secret)
– Dropbox ‘ta download, delete gibi işlemleri yapabilmek için dropbox uploader BASH scripti.
– Python ve transmissionrpc python modulu

Öncelikle Dropbox’ta torrentler için bir dizin oluşturun. Benim örneğimde Torrents. Aynı zamanda local sisteminizde de bu torrentlerin indirileceği bir dizin oluşturun. Benim örneğimde /home/pi/Torrents

Daha sonra dropbox_uploader scriptini çalıştırın, script sizi yönlendirerek Dropbox API üzerinden erişim isteyecek ve key ile secret alacaktır. Install sonrasında dropbox_uploader scriptini kullanarak dropbox hesabınıza dosya upload, dosya download, dosya silme testlerinizi yapın. (Key ve Secret bilgilerine daha sonra ~/.dropbox_uploader dosyasından erişebilirsiniz.)

transmissionrpc python modülünü indirip kurun.

$ wget -c “https://pypi.python.org/packages/source/t/transmissionrpc/transmissionrpc-0.11.tar.gz#md5=b2f918593e509f0e66e2e643291b436d” -O transmissionrpc-0.11.tar.gz
$ tar -xzf transmissionrpc-0.11.tar.gz
$ cd transmissionrpc-0.11
$ python setup.py install

Modülü sisteminize easy_install kurulu ise daha kolay bir şekilde de kurabilirsiniz.

easy_install transmissionrpc

Her şey hazır ise aşağıdaki python kodunu droptorrent.py olarak kaydedin.


#!/usr/bin/env python
#

import os,os.path
import transmissionrpc

path = '/home/pi/Torrents' # Torrent dosyalarının indirileceği dizin
address = '127.0.0.1' # transmission-daemon çalışan sunucu IP adresi.
port = '9091' # transmission-daemon port
username = 'admin' # transmission-daemon web kullanıcı adı
password = 'admin' # transmission-daemon web parolası

# Dropbox'taki .torrent dosyalarının indirilmesi
os.system("/usr/local/bin/dropbox_uploader.sh download Torrents /home/pi/")

# transmission rpc bağlantısı yapılıyor
tc = transmissionrpc.Client(address, port, username, password)

# İndirilen her dosya transmission-rpc bağlantısı ile indirme kuyruğuna ekleniyor
for root, _, files in os.walk(path):
for filename in files:
torrent_file = os.path.join(root, filename)
if os.path.exists(torrent_file):
try:
tc.add_torrent(torrent_file)

except transmissionrpc.TransmissionError, e:
print(u'Failed to add torrent "%s"' % e)

# Eklenen .torrent dosyası local sistemden siliyor
os.remove(torrent_file)

# Eklenen .torrent dosyası tekrar indirilmemesi için dropboxtan siliyor
os.system("/usr/local/bin/dropbox.sh delete Torrents/" + filename + "")

Son olarak crontab içerisine aşağıdaki satırı ekleyerek, python scriptinin 5 dakika aralıklarda çalışarak torrent dosyalarını beklemesini sağlayın.

*/5 * * * * /usr/bin/python /usr/local/bin/droptorrent.py

Artık herhangi bir dropbox client veya dropbox web sayfasından “Torrents” isimli dizine bir .torrent dosyası upload ettiğinizde Transmission otomatik olarak indirmeye başlayacaktır.

gurcan Written by:

3 Comments

  1. May 31, 2014
    Reply

    Kullandigim bir yontem degil ama basligi gorunce aklima soyle bir yontem geldi.

    Torrent istemcileri genelde dizin izleme ozelligine sahip oluyor. Tranmission’da da ‘watch-dir’ ve ‘start-added-torrents’ yapilandirma parametreleriyle bu ozellik kullanilabiliyor. Dropbox istemcisinin de kendini bulutla es tutma ozelligi var. Bu durumda dropbox istemcisini kurup, transmission tarafinda da ilgili dizini watch-dir olarak tanimlamak benzer bir isi yapabilir sanirim.

    Bir de python kodundaki girintiler kaybolmus. Ornekten faydalanmak isteyecekler icin duzeltebilirseniz iyi olur.

    • gurcan
      June 18, 2014
      Reply

      Katkiniz icin tesekkurler. Kodlarla ilgili olarak highlight ve indent sorunlari icin yeni bir plugin kurdum, denemelerim devam ediyor.

  2. Emin Bakan
    March 29, 2018
    Reply

    Merhaba tutorialınızı kendime göre uyarladım ama droptorrent.py script’inin çalıştırınca şu hatayı alıyorum;

    pi@raspberrypi:/opt $ /usr/bin/python /usr/local/bin/droptorrent.py
    > Downloading folder “/Torrents” to “/mnt/watch/Torrents”…
    > Downloading “/Torrents/It (2017) [BluRay] [720p] [YTS.AM].torrent” to “/mnt/watch/Torrents/It (2017) [BluRay] [720p] [YTS.AM].torrent”… DONE
    Failed to add torrent “Query failed with result “invalid or corrupt torrent file”.”
    sh: 1: Syntax error: “(” unexpected

    Acaba sorun nedir? Fikriniz var mı?

Leave a Reply

Your email address will not be published. Required fields are marked *