#!/usr/bin/env python # -*- coding: utf-8 -*- import re import string from urllib import unquote from module.plugins.Hoster import Hoster from module.plugins.ReCaptcha import ReCaptcha from module.plugins.Plugin import chunks from module.network.RequestFactory import getURL from module.common.json_layer import json_loads def getInfo(urls): yield [(url, 0, 1, url) for url in urls] def getId(url): match = re.search(FilesonicCom.FILE_ID_PATTERN, url) if match: return string.replace(match.group("id"), "/", "-") else: return None class FilesonicCom(Hoster): __name__ = "FilesonicCom" __type__ = "hoster" __pattern__ = r"http://[\w\.]*?(sharingmatrix|filesonic)\..*?/.*?file/([a-zA-Z0-9]+(/.+)?|[a-z0-9]+/[0-9]+(/.+)?|[0-9]+(/.+)?)" __version__ = "0.36" __description__ = """FilesonicCom und Sharingmatrix Download Hoster""" __author_name__ = ("jeix", "paulking") __author_mail__ = ("jeix@hasnomail.de", "") API_ADDRESS = "http://api.filesonic.com" URL_DOMAIN_PATTERN = r'(?P.*?)(?P.(filesonic|sharingmatrix)\..+?)(?P/.*)' FILE_ID_PATTERN = r'/file/(?P([a-z][0-9]+/)?[a-zA-Z0-9\-._+]+)(/.*)?' #change may break wupload - be careful FILE_LINK_PATTERN = r'Your download is ready

\s*\d+)' WAIT_TM_PATTERN = r"name='tm' value='(.*?)' />" WAIT_TM_HASH_PATTERN = r"name='tm_hash' value='(.*?)' />" CAPTCHA_TYPE1_PATTERN = r'Recaptcha.create\("(.*?)",' CAPTCHA_TYPE2_PATTERN = r'id="recaptcha_image"> 300: self.wantReconnect = True self.setWait(wait) self.logDebug("Waiting %d seconds." % wait) self.wait() tm = re.search(self.WAIT_TM_PATTERN, self.html) tm_hash = re.search(self.WAIT_TM_HASH_PATTERN, self.html) if tm and tm_hash: tm = tm.group(1) tm_hash = tm_hash.group(1) self.html = self.load(url, post={"tm": tm, "tm_hash": tm_hash}) self.handleErrors() break else: self.html = self.load(url) self.handleErrors() waitSearch = re.search(self.WAIT_TIME_PATTERN, self.html) def handleErrors(self): if "This file is available for premium users only." in self.html: self.fail("need premium account for file") if "The file that you're trying to download is larger than" in self.html: self.fail("need premium account for file") if "Free users may only download 1 file at a time" in self.html: self.fail("only 1 file at a time for free users") if "Free user can not download files" in self.html: self.fail("need premium account for file") if "Download session in progress" in self.html: self.fail("already downloading") if "This file is password protected" in self.html: self.fail("This file is password protected") if "An Error Occurred" in self.html: self.fail("A server error occured.") if "This file was deleted" in self.html: self.offline()