Welcome, guest | Sign In | My Account | Store | Cart
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author: pantuts
# URL: http://pantuts.com
# Agreement: You can use, modify, or redistribute this tool under the terms of GNU General Public License (GPLv3).
# This tool is for educational purposes only. Any damage you make will not affect the author.
# Dependencies:
# requests: https://pypi.python.org/pypi/requests
# beautifulSoup4: https://pypi.python.org/pypi/beautifulsoup4/4.3.2
# tabulate: https://pypi.python.org/pypi/tabulate

from bs4 import BeautifulSoup
import os
import re
import requests
import subprocess
import sys
import tabulate


class OutColors:
    DEFAULT
= '\033[0m'
    BW
= '\033[1m'
    LG
= '\033[0m\033[32m'
    LR
= '\033[0m\033[31m'
    SEEDER
= '\033[1m\033[32m'
    LEECHER
= '\033[1m\033[31m'


def helper():
   
print(OutColors.DEFAULT + "\nSearch torrents from Kickass.to ;)")


def select_torrent():
    torrent
= input('>> ')
   
return torrent


def download_torrent(url):
    fname
= os.getcwd() + '/' + url.split('title=')[-1] + '.torrent'
   
# http://stackoverflow.com/a/14114741/1302018
   
try:
        r
= requests.get(url, stream=True)
       
with open(fname, 'wb') as f:
           
for chunk in r.iter_content(chunk_size=1024):
               
if chunk:
                    f
.write(chunk)
                    f
.flush()
   
except requests.exceptions.RequestException as e:
       
print('\n' + OutColors.LR + str(e))
        sys
.exit(1)

   
return fname


def aksearch():
    helper
()
    tmp_url
= 'http://kickass.to/usearch/'

    query
= input('Type query: ')
    url
= tmp_url + query + '/'

   
try:
        cont
= requests.get(url)
   
except requests.exceptions.RequestException as e:
       
raise SystemExit('\n' + OutColors.LR + str(e))

   
# check if no torrents found
   
if not re.findall(r'Download torrent file', str(cont.content)):
       
print('Torrents found: 0')
        aksearch
()
   
else:
        soup
= BeautifulSoup(cont.content)

       
# to use by age, seeders, and leechers
       
# sample:
       
# 700.46 MB
       
# 5
       
# 2Â years
       
# 1852
       
# 130
        al
= [s.get_text() for s in soup.find_all('td', {'class':'center'})]

        href
= [a.get('href') for a in soup.find_all('a', {'title':'Download torrent file'})]
        size
= [t.get_text() for t in soup.find_all('td', {'class':'nobr'}) ]
        title
= [ti.get_text() for ti in soup.find_all('a', {'class':'cellMainLink'})]
        age
= al[2::5]
        seeders
= al[3::5]
        leechers
= al[4::5]

       
# for table printing
        table
= [[OutColors.BW + str(i+1) + OutColors.DEFAULT if (i+1) % 2 == 0 else i+1,
                   
OutColors.BW + title[i] + OutColors.DEFAULT if (i+1) % 2 == 0 else title[i],
                   
OutColors.BW + size[i] + OutColors.DEFAULT if (i+1) % 2 == 0 else size[i],
                   
OutColors.BW + age[i] + OutColors.DEFAULT if (i+1) % 2 == 0 else age[i],
                   
OutColors.SEEDER + seeders[i] + OutColors.DEFAULT if (i+1) % 2 == 0 else OutColors.LG + seeders[i] + OutColors.DEFAULT,
                   
OutColors.LEECHER + leechers[i] + OutColors.DEFAULT if (i+1) % 2 == 0 else OutColors.LR + leechers[i] + OutColors.DEFAULT] for i in range(len(href))]
       
print()
       
print(tabulate.tabulate(table, headers=['No', 'Title', 'Size', 'Age', 'Seeders', 'Leechers']))

       
# torrent selection
       
if len(href) == 1:
            torrent
= 1
       
else:
           
print('\nSelect torrent: [ 1 - ' + str(len(href)) + ' ] or [ M ] to go back to main menu or [ Q ] to quit')
            torrent
= select_torrent()
           
if torrent == 'Q' or torrent == 'q':
                sys
.exit(0)
           
elif torrent == 'M' or torrent == 'm':
                aksearch
()
           
else:
               
if int(torrent) <= 0 or int(torrent) > len(href):
                   
print('Use eyeglasses...')
               
else:
                   
print('Download >> ' + href[int(torrent)-1].split('title=')[-1] + '.torrent')
                    fname
= download_torrent(href[int(torrent)-1])
                    subprocess
.Popen(['xdg-open', fname], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
                    aksearch
()


if __name__ == '__main__':
   
try:
        aksearch
()
   
except KeyboardInterrupt:
       
print('\nHuha!')

History