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.
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.
Katkiniz icin tesekkurler. Kodlarla ilgili olarak highlight ve indent sorunlari icin yeni bir plugin kurdum, denemelerim devam ediyor.
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ı?