#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
from module.plugins.Hoster import Hoster
class OneFichierCom(Hoster):
__name__ = "OneFichierCom"
__type__ = "hoster"
__pattern__ = r"http://[a-z0-9]+\.1fichier\.com/(.*)"
__version__ = "0.2"
__description__ = """1fichier.com download hoster"""
__author_name__ = ("fragonib")
__author_mail__ = ("fragonib AT yahoo DOT es")
def setup(self):
self.html = None
self.multiDL = False
def process(self, pyfile):
self.download_html()
if not self.file_exists():
self.log.debug("OneFichierCom: File not yet available.")
self.offline()
pyfile.name = self.get_file_name()
pyfile.size = self.get_file_size()
url = self.get_file_url()
self.download(url)
def download_html(self):
self.html = self.load(self.pyfile.url, cookies=False)
def file_exists(self):
warnings = (r"The requested file could not be found",
r"The file may has been deleted by its owner",
r"Le fichier demandé n'existe pas\.",
r"Il a pu être supprimé par son propriétaire\.")
expr = '(' + '|'.join(warnings) + ')'
if re.search(expr, self.html) is not None:
return False
return True
def get_file_url(self):
self.log.debug("OneFichierCom: Getting file URL")
file_url_pattern = r"<br/>\ <br/>\ <br/>\ [\t\n\r ]+<a href=\"(?P<url>http://.*?)\""
m = re.search(file_url_pattern, self.html)
if m is not None:
url = m.group('url')
self.log.debug("OneFichierCom: File URL [%s]" % url)
return url
def get_file_name(self):
self.log.debug("OneFichierCom: Getting file name")
file_name_patterns = (
r"\">(Nom du fichier :|File name :)</th>[\t\r\n ]+<td>(?P<name>.*?)</td>",
r"(>Cliquez ici pour télécharger|>Click here to download) (?P<name>.*?)</a>",
r"content=\"(Téléchargement du fichier |Download the file named )(?P<name>.*?)\">",
r"<title>(Téléchargement du fichier|Download the file)\s*:\s*(?P<name>.*?)</title>"
)
for pattern in file_name_patterns:
m = re.search(pattern, self.html)
if m is not None:
name = m.group('name').strip()
self.log.debug("OneFichierCom: File name [%s]" % name)
return name
def get_file_size(self):
self.log.debug("OneFichierCom: Getting file size")
file_size_pattern = r"<th>(Taille :|File size :)</th>[\t\n\r ]+<td>(?P<size>\d*)\s+(?P<units>.*?)</td>"
m = re.search(file_size_pattern, self.html)
if m is not None:
size = int(m.group('size'))
units = m.group('units')[0].upper()
try:
multiplier = 1024 ** {"K":1, "M":2, "G":3}[units]
except KeyError:
multiplier = 1
bytes = size * multiplier
self.log.debug("OneFichierCom: File size [%s] bytes" % bytes)
return bytes