weboob-devel/modules/btdigg/pages/torrents.py
2014-01-29 12:02:39 +01:00

96 lines
3.2 KiB
Python

# -*- coding: utf-8 -*-
from datetime import datetime, timedelta
from urlparse import urlparse, parse_qs
from weboob.tools.misc import get_bytes_size
from weboob.tools.browser import BasePage,BrokenPageError
from weboob.capabilities.torrent import Torrent, MagnetOnly
from weboob.capabilities.base import NotAvailable
__all__ = ['TorrentsPage', 'TorrentPage']
class TorrentsPage(BasePage):
def iter_torrents(self):
try:
table = self.document.getroot().cssselect('table.torrent_name_tbl')
except BrokenPageError:
return
for i in range(0, len(table), 2):
# Title
title = table[i].cssselect('td.torrent_name a')[0]
name = unicode(title.text)
url = unicode(title.attrib['href'])
# Other elems
elems = table[i+1].cssselect('td')
magnet = unicode(elems[0].cssselect('a')[0].attrib['href'])
query = urlparse(magnet).query # xt=urn:btih:<...>&dn=<...>
btih = parse_qs(query)['xt'][0] # urn:btih:<...>
ih = btih.split(':')[-1]
value, unit = elems[2].cssselect('span.attr_val')[0].text.split()
valueago, valueunit, _ = elems[5].cssselect('span.attr_val')[0].text.split()
delta = timedelta(**{valueunit: float(valueago)})
date = datetime.now() - delta
url = unicode('https://btdigg.org/search?info_hash=%s' % ih)
torrent = Torrent(ih, name)
torrent.url = url
torrent.size = get_bytes_size(float(value), unit)
torrent.magnet = magnet
torrent.seeders = NotAvailable
torrent.leechers = NotAvailable
torrent.description = NotAvailable
torrent.files = NotAvailable
torrent.date = date
yield torrent
class TorrentPage(BasePage):
def get_torrent(self, id):
trs = self.document.getroot().cssselect('table.torrent_info_tbl tr')
# magnet
download = trs[2].cssselect('td a')[0]
if download.attrib['href'].startswith('magnet:'):
magnet = unicode(download.attrib['href'])
query = urlparse(magnet).query # xt=urn:btih:<...>&dn=<...>
btih = parse_qs(query)['xt'][0] # urn:btih:<...>
ih = btih.split(':')[-1]
name = unicode(trs[3].cssselect('td')[1].text)
value, unit = trs[5].cssselect('td')[1].text.split()
valueago, valueunit, _ = trs[6].cssselect('td')[1].text.split()
delta = timedelta(**{valueunit: float(valueago)})
date = datetime.now() - delta
files = []
for tr in trs[15:]:
files.append(unicode(tr.cssselect('td')[1].text))
torrent = Torrent(ih, name)
torrent.url = unicode(self.url)
torrent.size = get_bytes_size(float(value), unit)
torrent.magnet = magnet
torrent.seeders = NotAvailable
torrent.leechers = NotAvailable
torrent.description = NotAvailable
torrent.files = files
torrent.filename = NotAvailable
torrent.date = date
return torrent
def get_torrent_file(self, id):
raise MagnetOnly(self.get_torrent(id).magnet)