qBittorrent Portable İçin Magnet ve .Torrent Ekleyici Python Scripti

Torrent kullanırken hız ve pratiklik en önemli iki unsurdur. Özellikle büyük dosyalar veya birden fazla içerikle çalışırken, her seferinde qBittorrent’i açıp tek tek link eklemek zaman kaybı yaratır.

Bu yazıda paylaşacağımız Python tabanlı özel script, qBittorrent Portable kullanıcıları için geliştirilmiş olup torrent ekleme sürecini tek adımda kolaylaştırır. Hem magnet linkleri hem de .torrent dosyaları eklemek artık çok daha hızlı ve basit!

🎯 Scriptin Amacı ve Sağladığı Faydalar

Normal kullanımda bir torrent eklemek için:

  1. qBittorrent’i manuel olarak açmanız,
  2. Menüden “Dosya Ekle” veya “Magnet Yapıştır” seçeneğini bulmanız,
  3. Dosya seçmeniz veya linki yapıştırmanız gerekir.

Bu script ile ise:

✅ Magnet linklerini doğrudan ekleyebilirsiniz.
✅ Birden fazla link veya dosyayı tek seferde gönderebilirsiniz.
Drag & Drop (sürükle-bırak) desteği sayesinde .torrent dosyalarını kolayca ekleyebilirsiniz.
Etkileşimli mod sayesinde arka arkaya sınırsız sayıda torrent ekleyebilirsiniz.
✅ Yalnızca qBittorrent Portable ile uyumlu çalışır (başka istemcilerle karışmaz).

Sonuç: Hem zamandan tasarruf edersiniz hem de torrent ekleme süreciniz son derece pratik hale gelir.

⚙️ Teknik Çalışma Mantığı

  • Script Python 3 ile yazılmıştır.
  • subprocess modülü sayesinde qBittorrent Portable başlatılır ve verilen hedefler (link veya dosya) gönderilir.
  • Magnet linkleri doğrudan qBittorrent’e aktarılır.
  • .torrent dosyaları önce doğrulanır, ardından çalıştırılır.
  • Hatalı veya geçersiz girişler otomatik olarak tespit edilip kullanıcıya bildirilir.
  • Hem argüman desteği (drag & drop) hem de etkileşimli kullanım mümkündür.

🔑 Kullanım Öncesi Gereksinimler

  • Python 3 sisteminizde kurulu olmalı.
  • Script yalnızca qBittorrent Portable ile çalışır.
  • Kodun 16. satırında kendi qBittorrent Portable yolunuzu belirtmeniz gerekir:
QBITTORRENT_EXE = r"D:\qBittorrentPortable\qBittorrentPortable.exe"

📦 Kullanım Şekilleri

1. Terminal Üzerinden Çalıştırma

python torrent.py

Daha sonra konsola magnet linkini yapıştırabilir veya .torrent dosyasının yolunu girebilirsiniz.

2. Drag & Drop (Sürükle-Bırak)

.torrent dosyalarını doğrudan script’in üzerine sürükleyip bıraktığınızda otomatik eklenir.

3. Etkileşimli Mod

Script çalıştıktan sonra:

  • Magnet linkini veya dosya yolunu yazın.
  • Aynı işlemle tekrar tekrar ekleme yapabilirsiniz.
  • Çıkmak için q yazmanız yeterlidir.

💡 İpuçları

  • Birden fazla magnet linkini art arda yapıştırarak toplu ekleme yapabilirsiniz.
  • Aynı anda birçok .torrent dosyasını seçip script üzerine sürükleyebilirsiniz.
  • Geçersiz link veya yanlış dosya yolu yazarsanız script sizi uyarır.

📜 Python Scripti

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
qBittorrent Portable için: aynı anda birden fazla magnet veya .torrent gönderebilme
- Komut satırı argümanları (drag&drop) desteklenir
- Etkileşimli modda tekrar tekrar girebilirsin; 'q' ile çık
"""

import sys
import subprocess
import shlex
import re
from pathlib import Path

# Burayı kendi portable exe yoluna göre değiştir
QBITTORRENT_EXE = r"G:\qBittorrentPortable\qBittorrentPortable.exe"


def split_input(s: str):
    """Tırnaklı yolları ayır, yoksa shlex ile parçala."""
    s = s.strip()
    if not s:
        return []
    quoted = re.findall(r'"([^"]+)"', s)
    if quoted:
        return quoted
    try:
        return shlex.split(s, posix=False)
    except Exception:
        return s.split()


def normalize_token(tok: str) -> str:
    """Tırnak ve boşlukları temizle"""
    return tok.strip().strip('"').strip("'")


def classify_tokens(tokens):
    magnets, torrents, bad = [], [], []
    for tok in tokens:
        t = normalize_token(tok)
        if not t:
            continue
        if t.lower().startswith("magnet:?"):
            magnets.append(t)
            continue
        p = Path(t)
        if p.exists() and p.suffix.lower() == ".torrent":
            torrents.append(str(p.resolve()))
            continue
        bad.append(t)
    return magnets, torrents, bad


def start_qbittorrent(exe_path: str, args_list):
    exe = Path(exe_path)
    if not exe.exists():
        print(f"[!] qBittorrent executable bulunamadı: {exe}")
        return False
    try:
        cmd = [str(exe)] + list(args_list)
        subprocess.Popen(cmd, shell=False)
        print(f"[✓] qBittorrent çağrıldı — {len(args_list)} hedef gönderildi:")
        for a in args_list:
            print("   -", a)
        return True
    except Exception as e:
        print("[!] qBittorrent başlatılırken hata:", e)
        return False


def handle_tokens_and_run(tokens):
    magnets, torrents, bad = classify_tokens(tokens)
    if not magnets and not torrents:
        print("[!] Geçerli magnet veya .torrent bulunamadı.")
        if bad:
            print("   Hatalı girişler:")
            for b in bad:
                print("   -", b)
        return False
    targets = magnets + torrents
    return start_qbittorrent(QBITTORRENT_EXE, targets)


def interactive_loop():
    while True:
        user = input("Magnet veya .torrent yolu girin (çıkmak için 'q'): \n> ").strip()
        if not user:
            continue
        if user.lower() in ("q", "exit"):
            print("Çıkılıyor...")
            break
        tokens = split_input(user)
        handle_tokens_and_run(tokens)


def main():
    # Eğer argüman varsa (örn. drag&drop), onları işle
    if len(sys.argv) > 1:
        tokens = [normalize_token(tok) for tok in sys.argv[1:]]
        success = handle_tokens_and_run(tokens)
        if not success:
            sys.exit(1)
        return

    # Aksi halde etkileşimli moda gir
    interactive_loop()


if __name__ == "__main__":
    main()

✅ Sonuç

Bu Python scripti sayesinde:

  • Tek tıkla torrent ekleme,
  • Sürükle-bırak desteği,
  • Toplu işlem kolaylığı,
  • Hata kontrolü ve kullanıcı dostu uyarılar,
  • Etkileşimli mod ile sınırsız ekleme imkânı

elde edersiniz.

Artık torrent ekleme işlemleri hem hızlı hem de pratik bir şekilde gerçekleşiyor.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir