From f914d0d3de01750de3e15f3fe14e9ad7479340b0 Mon Sep 17 00:00:00 2001 From: Stefano Date: Mon, 2 Dec 2013 16:49:02 +0100 Subject: Filefactory: fixed free download + Removed API based getInfo (no more working) + Removed process override Resolves #366 (cherry picked from commit fcb9cfa8884b73a6970855a678df2bde24ad4ec0) --- pyload/plugins/hoster/FilefactoryCom.py | 100 ++++++++++---------------------- 1 file changed, 32 insertions(+), 68 deletions(-) (limited to 'pyload/plugins/hoster') diff --git a/pyload/plugins/hoster/FilefactoryCom.py b/pyload/plugins/hoster/FilefactoryCom.py index 0b9138617..79273d4cf 100644 --- a/pyload/plugins/hoster/FilefactoryCom.py +++ b/pyload/plugins/hoster/FilefactoryCom.py @@ -17,64 +17,21 @@ import re -from module.plugins.internal.SimpleHoster import SimpleHoster -from module.network.RequestFactory import getURL -from module.utils import parseFileSize - - -def getInfo(urls): - file_info = list() - list_ids = dict() - - # Create a dict id:url. Will be used to retrieve original url - for url in urls: - m = re.search(FilefactoryCom.__pattern__, url) - list_ids[m.group('id')] = url - - # WARN: There could be a limit of urls for request - post_data = {'func': 'links', 'links': '\n'.join(urls)} - rep = getURL('http://www.filefactory.com/tool/links.php', post=post_data, decode=True) - - # Online links - for m in re.finditer( - r'innerText">\s*

(?P.+) \((?P[\w.]+) (?P\w+)\)

\s*

http://www.filefactory.com/file/(?P\w+).*

\s*

(http://www.filefactory.com/file/(?P\w+)/)

\s*

\1

\s*

Error: file not found

', - rep): - file_info.append((list_ids[m.group('ID')], 0, 1, list_ids[m.group('ID')])) - - return file_info +from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo class FilefactoryCom(SimpleHoster): __name__ = "FilefactoryCom" __type__ = "hoster" __pattern__ = r"https?://(?:www\.)?filefactory\.com/file/(?P[a-zA-Z0-9]+)" - __version__ = "0.42" + __version__ = "0.43" __description__ = """Filefactory.Com File Download Hoster""" __author_name__ = ("stickell") __author_mail__ = ("l.stickell@yahoo.it") + FILE_INFO_PATTERN = r'
]*>\s*

(?P[^<]+)

\s*
(?P[\d.]+) (?P\w+) uploaded' DIRECT_LINK_PATTERN = r'' - def process(self, pyfile): - if not re.match(self.__pattern__ + r'/n/.+', pyfile.url): # Not in standard format - header = self.load(pyfile.url, just_header=True) - if 'location' in header: - if header['location'].startswith("http"): - self.pyfile.url = header['location'] - else: - self.pyfile.url = 'http://www.filefactory.com' + header['location'] - - if self.premium and (not self.SH_CHECK_TRAFFIC or self.checkTrafficLeft()): - self.handlePremium() - else: - self.handleFree() - def handleFree(self): self.html = self.load(self.pyfile.url, decode=True) if "Currently only Premium Members can download files larger than" in self.html: @@ -82,25 +39,32 @@ class FilefactoryCom(SimpleHoster): elif "All free download slots on this server are currently in use" in self.html: self.retry(50, 900, "All free slots are busy") - # Load the page that contains the direct link - url = re.search(r"document\.location\.host \+\s*'(.+)';", self.html) - if not url: - self.parseError('Unable to detect free link') - url = 'http://www.filefactory.com' + url.group(1) - self.html = self.load(url, decode=True) - - # Free downloads wait time - waittime = re.search(r'id="startWait" value="(\d+)"', self.html) - if not waittime: - self.parseError('Unable to detect wait time') - self.setWait(int(waittime.group(1))) - self.wait() - - # Parse the direct link and download it - direct = re.search(r'data-href-direct="(.*)" class="button', self.html) - if not direct: - self.parseError('Unable to detect free direct link') - direct = direct.group(1) + m = re.search(r'data-href-direct="(http://[^"]+)"', self.html) + if m: + self.setWait(30) + self.wait() + direct = m.group(1) + else: # This section could be completely useless now + # Load the page that contains the direct link + url = re.search(r"document\.location\.host \+\s*'(.+)';", self.html) + if not url: + self.parseError('Unable to detect free link') + url = 'http://www.filefactory.com' + url.group(1) + self.html = self.load(url, decode=True) + + # Free downloads wait time + waittime = re.search(r'id="startWait" value="(\d+)"', self.html) + if not waittime: + self.parseError('Unable to detect wait time') + self.setWait(int(waittime.group(1))) + self.wait() + + # Parse the direct link and download it + direct = re.search(r'data-href-direct="(.*)" class="button', self.html) + if not direct: + self.parseError('Unable to detect free direct link') + direct = direct.group(1) + self.logDebug('DIRECT LINK: ' + direct) self.download(direct, disposition=True) @@ -121,9 +85,6 @@ class FilefactoryCom(SimpleHoster): url = "http://www.filefactory.com" + url elif 'content-disposition' in header: url = self.pyfile.url - m = re.search(r'filename="([^"]+)"', header['content-disposition']) - if m: - self.pyfile.name = m.group(1) else: html = self.load(self.pyfile.url) found = re.search(self.DIRECT_LINK_PATTERN, html) @@ -134,3 +95,6 @@ class FilefactoryCom(SimpleHoster): self.logDebug('DIRECT PREMIUM LINK: ' + url) self.download(url, disposition=True) + + +getInfo = create_getInfo(FilefactoryCom) -- cgit v1.2.3