summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Walter Purcaro <vuolter@gmail.com> 2013-12-13 11:20:19 +0100
committerGravatar Stefano <l.stickell@yahoo.it> 2013-12-16 17:05:56 +0100
commit31dad6a6d8793a5340a79f03c04d3c448883fe9a (patch)
treea0e53cc6db846c86ea3936ec3952deb7607824e4
parentMerge pull request #434 from kmarty/stable (diff)
downloadpyload-31dad6a6d8793a5340a79f03c04d3c448883fe9a.tar.xz
Some hosters marked as dead
Merged #375 (cherry picked from commit 7f239b41cb29ee95c878f78a6e9cacd55f301a8d) Conflicts: pyload/plugins/accounts/BoltsharingCom.py pyload/plugins/accounts/HellspyCz.py pyload/plugins/accounts/Share76Com.py pyload/plugins/accounts/UploadstationCom.py pyload/plugins/accounts/WuploadCom.py pyload/plugins/accounts/X7To.py
-rw-r--r--pyload/plugins/accounts/BoltsharingCom.py13
-rw-r--r--pyload/plugins/accounts/HellspyCz.py73
-rw-r--r--pyload/plugins/accounts/Share76Com.py12
-rw-r--r--pyload/plugins/accounts/UploadstationCom.py14
-rw-r--r--pyload/plugins/accounts/WuploadCom.py48
-rw-r--r--pyload/plugins/accounts/X7To.py67
-rw-r--r--pyload/plugins/hoster/BoltsharingCom.py9
-rw-r--r--pyload/plugins/hoster/FileApeCom.py56
-rw-r--r--pyload/plugins/hoster/FilebeerInfo.py3
-rw-r--r--pyload/plugins/hoster/HellspyCz.py47
-rw-r--r--pyload/plugins/hoster/IcyFilesCom.py88
-rw-r--r--pyload/plugins/hoster/Share76Com.py10
-rw-r--r--pyload/plugins/hoster/SharebeesCom.py12
-rw-r--r--pyload/plugins/hoster/ShragleCom.py95
-rw-r--r--pyload/plugins/hoster/SpeedLoadOrg.py1
-rw-r--r--pyload/plugins/hoster/SpeedfileCz.py44
-rw-r--r--pyload/plugins/hoster/TurbouploadCom.py20
-rw-r--r--pyload/plugins/hoster/UploadStationCom.py19
-rw-r--r--pyload/plugins/hoster/WuploadCom.py230
-rw-r--r--pyload/plugins/hoster/X7To.py80
20 files changed, 50 insertions, 891 deletions
diff --git a/pyload/plugins/accounts/BoltsharingCom.py b/pyload/plugins/accounts/BoltsharingCom.py
deleted file mode 100644
index 76e010532..000000000
--- a/pyload/plugins/accounts/BoltsharingCom.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- coding: utf-8 -*-
-from module.plugins.internal.XFSPAccount import XFSPAccount
-
-
-class BoltsharingCom(XFSPAccount):
- __name__ = "BoltsharingCom"
- __version__ = "0.01"
- __type__ = "account"
- __description__ = """Boltsharing.com account plugin"""
- __author_name__ = ("zoidberg")
- __author_mail__ = ("zoidberg@mujmail.cz")
-
- MAIN_PAGE = "http://boltsharing.com/"
diff --git a/pyload/plugins/accounts/HellspyCz.py b/pyload/plugins/accounts/HellspyCz.py
deleted file mode 100644
index 1bb574731..000000000
--- a/pyload/plugins/accounts/HellspyCz.py
+++ /dev/null
@@ -1,73 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License,
- or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>.
-
- @author: zoidberg
-"""
-
-import re
-
-from module.plugins.Account import Account
-
-
-class HellspyCz(Account):
- __name__ = "HellspyCz"
- __version__ = "0.2"
- __type__ = "account"
- __description__ = """hellspy.cz account plugin"""
- __author_name__ = ("zoidberg")
- __author_mail__ = ("zoidberg@mujmail.cz")
-
- CREDIT_LEFT_PATTERN = r'<strong>Credits: </strong>\s*(\d+)'
- WRONG_PASSWORD_PATTERN = r'<p class="block-error-3 marg-tb-050">\s*Wrong user or password was entered<br />'
-
- phpsessid = ''
-
- def loadAccountInfo(self, user, req):
- cj = self.getAccountCookies(user)
- cj.setCookie(".hellspy.com", "PHPSESSID", self.phpsessid)
-
- html = req.load("http://www.hellspy.com/")
-
- found = re.search(self.CREDIT_LEFT_PATTERN, html)
- if found is None:
- credits = 0
- else:
- credits = int(found.group(1)) * 1024
-
- return {"validuntil": -1, "trafficleft": credits}
-
- def login(self, user, data, req):
- header = req.load('http://www.hellspy.com/', just_header=True)
- self.phpsessid = re.search(r'PHPSESSID=(\w+)', header).group(1)
- self.logDebug("PHPSESSID:" + self.phpsessid)
-
- html = req.load("http://www.hellspy.com/--%s-" % self.phpsessid)
-
- html = req.load(
- "http://www.hell-share.com/user/login/?do=apiLoginForm-submit&api_hash=hellspy_iq&user_hash=%s" % self.phpsessid,
- post={
- "login": "1",
- "password": data["password"],
- "username": user,
- "redir_url": 'http://www.hellspy.com/?do=loginBox-login',
- "permanent_login": "1"
- })
-
- cj = self.getAccountCookies(user)
- cj.setCookie(".hellspy.com", "PHPSESSID", self.phpsessid)
-
- if not re.search(self.CREDIT_LEFT_PATTERN, html):
- self.wrongPassword()
diff --git a/pyload/plugins/accounts/Share76Com.py b/pyload/plugins/accounts/Share76Com.py
deleted file mode 100644
index 1dfcd8510..000000000
--- a/pyload/plugins/accounts/Share76Com.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# -*- coding: utf-8 -*-
-from module.plugins.internal.XFSPAccount import XFSPAccount
-
-
-class Share76Com(XFSPAccount):
- __name__ = "Share76Com"
- __version__ = "0.02"
- __type__ = "account"
- __description__ = """Share76.com account plugin"""
- __author_name__ = ("me")
-
- MAIN_PAGE = "http://Share76.com/"
diff --git a/pyload/plugins/accounts/UploadstationCom.py b/pyload/plugins/accounts/UploadstationCom.py
deleted file mode 100644
index 040f6bbef..000000000
--- a/pyload/plugins/accounts/UploadstationCom.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.accounts.FilejungleCom import FilejungleCom
-
-
-class UploadstationCom(FilejungleCom):
- __name__ = "UploadstationCom"
- __version__ = "0.1"
- __type__ = "account"
- __description__ = """uploadstation.com account plugin"""
- __author_name__ = ("zoidberg")
- __author_mail__ = ("zoidberg@mujmail.cz")
-
- URL = "http://uploadstation.com/"
diff --git a/pyload/plugins/accounts/WuploadCom.py b/pyload/plugins/accounts/WuploadCom.py
deleted file mode 100644
index 2a8bfee8e..000000000
--- a/pyload/plugins/accounts/WuploadCom.py
+++ /dev/null
@@ -1,48 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License,
- or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>.
-
- @author: RaNaN
-"""
-
-from types import MethodType
-
-from module.plugins.Account import Account
-from module.common.json_layer import json_loads
-
-
-class WuploadCom(Account):
- __name__ = "WuploadCom"
- __version__ = "0.1"
- __type__ = "account"
- __description__ = """wupload.com account plugin"""
- __author_name__ = ("RaNaN", "Paul King")
- __author_mail__ = ("RaNaN@pyload.org", "")
-
- API_URL = "http://api.wupload.com"
-
- def init(self):
- fs = self.core.pluginManager.loadClass("accounts", "FilesonicCom")
-
- methods = ["loadAccountInfo", "login"]
- #methods to bind from fs
-
- for m in methods:
- setattr(self, m, MethodType(fs.__dict__[m], self, WuploadCom))
-
- def getDomain(self, req):
- xml = req.load(self.API_URL + "/utility?method=getWuploadDomainForCurrentIp&format=json",
- decode=True)
- return json_loads(xml)["FSApi_Utility"]["getWuploadDomainForCurrentIp"]["response"]
diff --git a/pyload/plugins/accounts/X7To.py b/pyload/plugins/accounts/X7To.py
deleted file mode 100644
index 34a7b99be..000000000
--- a/pyload/plugins/accounts/X7To.py
+++ /dev/null
@@ -1,67 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License,
- or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>.
-
- @author: ernieb
-"""
-
-import re
-from time import strptime, mktime
-
-from module.plugins.Account import Account
-
-
-class X7To(Account):
- __name__ = "X7To"
- __version__ = "0.1"
- __type__ = "account"
- __description__ = """X7.To account plugin"""
- __author_name__ = ("ernieb")
- __author_mail__ = ("ernieb")
-
- def loadAccountInfo(self, user, req):
- page = req.load("http://www.x7.to/my")
-
- validCheck = re.search("Premium-Mitglied bis ([0-9]*-[0-9]*-[0-9]*)", page, re.IGNORECASE)
- if validCheck:
- valid = validCheck.group(1)
- valid = int(mktime(strptime(valid, "%Y-%m-%d")))
- else:
- validCheck = re.search("Premium member until ([0-9]*-[0-9]*-[0-9]*)", page, re.IGNORECASE)
- if validCheck:
- valid = validCheck.group(1)
- valid = int(mktime(strptime(valid, "%Y-%m-%d")))
- else:
- valid = 0
-
- trafficleft = re.search(r'<em style="white-space:nowrap">([\d]*[,]?[\d]?[\d]?) (KB|MB|GB)</em>',
- page, re.IGNORECASE)
- if trafficleft:
- units = float(trafficleft.group(1).replace(",", "."))
- pow = {'KB': 0, 'MB': 1, 'GB': 2}[trafficleft.group(2)]
- trafficleft = int(units * 1024 ** pow)
- else:
- trafficleft = -1
-
- return {"trafficleft": trafficleft, "validuntil": valid}
-
- def login(self, user, data, req):
- #req.cj.setCookie("share.cx", "lang", "english")
- page = req.load("http://x7.to/lang/en", None, {})
- page = req.load("http://x7.to/james/login", None,
- {"redirect": "http://www.x7.to/", "id": user, "pw": data['password'], "submit": "submit"})
-
- if "Username and password are not matching." in page:
- self.wrongPassword()
diff --git a/pyload/plugins/hoster/BoltsharingCom.py b/pyload/plugins/hoster/BoltsharingCom.py
index f9cc91ca5..cc8b1c7e6 100644
--- a/pyload/plugins/hoster/BoltsharingCom.py
+++ b/pyload/plugins/hoster/BoltsharingCom.py
@@ -1,17 +1,16 @@
# -*- coding: utf-8 -*-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-class BoltsharingCom(XFileSharingPro):
+
+class BoltsharingCom(DeadHoster):
__name__ = "BoltsharingCom"
__type__ = "hoster"
__pattern__ = r"http://(?:\w*\.)*?boltsharing.com/\w{12}"
- __version__ = "0.01"
+ __version__ = "0.02"
__description__ = """Boltsharing.com hoster plugin"""
__author_name__ = ("zoidberg")
__author_mail__ = ("zoidberg@mujmail.cz")
- HOSTER_NAME = "boltsharing.com"
-
getInfo = create_getInfo(BoltsharingCom)
diff --git a/pyload/plugins/hoster/FileApeCom.py b/pyload/plugins/hoster/FileApeCom.py
index f07fbfc8a..2a5daf16a 100644
--- a/pyload/plugins/hoster/FileApeCom.py
+++ b/pyload/plugins/hoster/FileApeCom.py
@@ -1,64 +1,16 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-import re
+from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-from module.plugins.Hoster import Hoster
-
-class FileApeCom(Hoster):
+class FileApeCom(DeadHoster):
__name__ = "FileApeCom"
__type__ = "hoster"
__pattern__ = r"http://(www\.)?fileape\.com/(index\.php\?act=download\&id=|dl/)\w+"
- __version__ = "0.11"
+ __version__ = "0.12"
__description__ = """FileApe Download Hoster"""
__author_name__ = ("espes")
- def setup(self):
- self.multiDL = False
-
- def process(self, pyfile):
- self.pyfile = pyfile
-
- self.html = self.load(self.pyfile.url)
-
- if "This file is either temporarily unavailable or does not exist" in self.html:
- self.offline()
-
- self.html = self.load(self.pyfile.url + "&g=1")
-
- continueMatch = re.search(r"window\.location = '(http://.*?)'", self.html)
- if not continueMatch:
- continueMatch = re.search(r"'(http://fileape\.com/\?act=download&t=[A-Za-z0-9_-]+)'", self.html)
- if continueMatch:
- continuePage = continueMatch.group(1)
- else:
- self.fail("Plugin Defect")
-
- wait = 60
- waitMatch = re.search(
- "id=\"waitnumber\" style=\"font-size:2em; text-align:center; width:33px; height:33px;\">(\\d+)</span>",
- self.html)
- if waitMatch:
- wait = int(waitMatch.group(1))
- self.setWait(wait + 3)
- self.wait()
-
- self.html = self.load(continuePage)
- linkMatch = re.search(r"<div style=\"text-align:center; font-size: 30px;\"><a href=\"(http://.*?)\"", self.html)
-
- if not linkMatch:
- linkMatch = re.search(r"\"(http://tx\d+\.fileape\.com/[a-z]+/.*?)\"", self.html)
- if linkMatch:
- link = linkMatch.group(1)
- else:
- self.fail("Plugin Defect")
-
- pyfile.name = link.rpartition('/')[2]
-
- self.download(link)
- check = self.checkDownload({"exp": "Download ticket expired"})
- if check == "exp":
- self.logInfo("Ticket expired, retrying...")
- self.retry()
+getInfo = create_getInfo(FileApeCom)
diff --git a/pyload/plugins/hoster/FilebeerInfo.py b/pyload/plugins/hoster/FilebeerInfo.py
index 216ecfbca..d1bef9e6e 100644
--- a/pyload/plugins/hoster/FilebeerInfo.py
+++ b/pyload/plugins/hoster/FilebeerInfo.py
@@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
+
from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
@@ -12,4 +13,4 @@ class FilebeerInfo(DeadHoster):
__author_mail__ = ("zoidberg@mujmail.cz")
-getInfo = create_getInfo(FilebeerInfo) \ No newline at end of file
+getInfo = create_getInfo(FilebeerInfo)
diff --git a/pyload/plugins/hoster/HellspyCz.py b/pyload/plugins/hoster/HellspyCz.py
index 2e0746ff4..1bb595599 100644
--- a/pyload/plugins/hoster/HellspyCz.py
+++ b/pyload/plugins/hoster/HellspyCz.py
@@ -16,58 +16,17 @@
@author: zoidberg
"""
-import re
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-class HellspyCz(SimpleHoster):
+class HellspyCz(DeadHoster):
__name__ = "HellspyCz"
__type__ = "hoster"
__pattern__ = r"http://(?:\w*\.)*(?:hellspy\.(?:cz|com|sk|hu|pl)|sciagaj.pl)(/\S+/\d+)/?.*"
- __version__ = "0.27"
+ __version__ = "0.28"
__description__ = """HellSpy.cz"""
__author_name__ = ("zoidberg")
__author_mail__ = ("zoidberg@mujmail.cz")
- FILE_SIZE_PATTERN = r'<span class="filesize right">(?P<S>[0-9.]+)\s*<span>(?P<U>[kKMG])i?B'
- FILE_NAME_PATTERN = r'<h1 title="(?P<N>.*?)"'
- FILE_OFFLINE_PATTERN = r'<h2>(404 - Page|File) not found</h2>'
- FILE_URL_REPLACEMENTS = [(__pattern__, r"http://www.hellspy.com\1")]
-
- CREDIT_LEFT_PATTERN = r'<strong>Credits: </strong>\s*(\d+)'
- DOWNLOAD_AGAIN_PATTERN = r'<a id="button-download-start"[^>]*title="You can download the file without deducting your credit.">'
- DOWNLOAD_URL_PATTERN = r"launchFullDownload\('([^']+)'"
-
- def setup(self):
- self.resumeDownload = self.multiDL = True
- self.chunkLimit = 1
-
- def handleFree(self):
- self.fail("Only premium users can download from HellSpy.cz")
-
- def handlePremium(self):
- # set PHPSESSID cookie
- cj = self.account.getAccountCookies(self.user)
- cj.setCookie(".hellspy.com", "PHPSESSID", self.account.phpsessid)
- self.logDebug("PHPSESSID: " + cj.getCookie("PHPSESSID"))
-
- info = self.account.getAccountInfo(self.user, True)
- self.logInfo("User %s has %i credits left" % (self.user, info["trafficleft"] / 1024))
-
- if self.pyfile.size / 1024 > info["trafficleft"]:
- self.logWarning("Not enough credit left to download file")
-
- # get premium download URL and download
- self.html = self.load(self.pyfile.url + "?download=1")
- found = re.search(self.DOWNLOAD_URL_PATTERN, self.html)
- if not found:
- self.parseError("Download URL")
- url = found.group(1)
- self.logDebug("Download URL: " + url)
- self.download(url)
-
- info = self.account.getAccountInfo(self.user, True)
- self.logInfo("User %s has %i credits left" % (self.user, info["trafficleft"] / 1024))
-
getInfo = create_getInfo(HellspyCz)
diff --git a/pyload/plugins/hoster/IcyFilesCom.py b/pyload/plugins/hoster/IcyFilesCom.py
index 53c934675..d0b101717 100644
--- a/pyload/plugins/hoster/IcyFilesCom.py
+++ b/pyload/plugins/hoster/IcyFilesCom.py
@@ -16,97 +16,17 @@
@author: godofdream
"""
-import re
-from module.plugins.Hoster import Hoster
-from module.network.RequestFactory import getURL
+from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-def getInfo(urls):
- result = []
- for url in urls:
- html = getURL(url, decode=True)
- if re.search(IcyFilesCom.FILE_OFFLINE_PATTERN, html):
- # File offline
- result.append((url, 0, 1, url))
- else:
- # Get file info
- name = re.search(IcyFilesCom.FILE_NAME_PATTERN, html)
- size = re.search(IcyFilesCom.SIZE_PATTERN, html)
- if name is not None:
- name = name.group(1)
- size = (int(size.group(1)) * 1000000)
- result.append((name, size, 2, url))
- yield result
-
-
-class IcyFilesCom(Hoster):
+class IcyFilesCom(DeadHoster):
__name__ = "IcyFilesCom"
__type__ = "hoster"
__pattern__ = r"http://(?:www\.)?icyfiles\.com/(.*)"
- __version__ = "0.05"
+ __version__ = "0.06"
__description__ = """IcyFiles.com plugin - free only"""
__author_name__ = ("godofdream")
__author_mail__ = ("soilfiction@gmail.com")
- FILE_NAME_PATTERN = r'<div id="file">(.*?)</div>'
- SIZE_PATTERN = r'<li>(\d+) <span>Size/mb'
- FILE_OFFLINE_PATTERN = r'The requested File cant be found'
- WAIT_LONGER_PATTERN = r'All download tickets are in use\. please try it again in a few seconds'
- WAIT_PATTERN = r'<div class="counter">(\d+)</div>'
- TOOMUCH_PATTERN = r'Sorry dude, you have downloaded too much\. Please wait (\d+) seconds'
-
- def setup(self):
- self.multiDL = False
-
- def process(self, pyfile):
- self.html = self.load(pyfile.url, decode=True)
- # check if offline
- if re.search(self.FILE_OFFLINE_PATTERN, self.html):
- self.offline()
- # All Downloadtickets in use
- timmy = re.search(self.WAIT_LONGER_PATTERN, self.html)
- if timmy:
- self.logDebug("waitforfreeslot")
- self.waitForFreeSlot()
- # Wait the waittime
- timmy = re.search(self.WAIT_PATTERN, self.html)
- if timmy:
- self.logDebug("waiting", timmy.group(1))
- self.setWait(int(timmy.group(1)) + 2, False)
- self.wait()
- # Downloaded to much
- timmy = re.search(self.TOOMUCH_PATTERN, self.html)
- if timmy:
- self.logDebug("too much", timmy.group(1))
- self.setWait(int(timmy.group(1)), True)
- self.wait()
- # Find Name
- found = re.search(self.FILE_NAME_PATTERN, self.html)
- if found is None:
- self.fail("Parse error (NAME)")
- pyfile.name = found.group(1)
- # Get the URL
- url = pyfile.url
- found = re.search(self.__pattern__, url)
- if found is None:
- self.fail("Parse error (URL)")
- download_url = "http://icyfiles.com/download.php?key=" + found.group(1)
- self.download(download_url)
- # check download
- check = self.checkDownload({
- "notfound": re.compile(r"^<head><title>404 Not Found</title>$"),
- "skippedcountdown": re.compile(r"^Dont skip the countdown$"),
- "waitforfreeslots": re.compile(self.WAIT_LONGER_PATTERN),
- "downloadedtoomuch": re.compile(self.TOOMUCH_PATTERN)
- })
- if check == "skippedcountdown":
- self.fail("Countdown error")
- elif check == "notfound":
- self.fail("404 Not found")
- elif check == "waitforfreeslots":
- self.waitForFreeSlot()
- elif check == "downloadedtoomuch":
- self.retry()
- def waitForFreeSlot(self):
- self.retry(60, 60, "Wait for free slot")
+getInfo = create_getInfo(IcyFilesCom)
diff --git a/pyload/plugins/hoster/Share76Com.py b/pyload/plugins/hoster/Share76Com.py
index b48780652..81a169527 100644
--- a/pyload/plugins/hoster/Share76Com.py
+++ b/pyload/plugins/hoster/Share76Com.py
@@ -1,17 +1,15 @@
# -*- coding: utf-8 -*-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-class Share76Com(XFileSharingPro):
+
+class Share76Com(DeadHoster):
__name__ = "Share76Com"
__type__ = "hoster"
__pattern__ = r"http://(?:\w*\.)*?share76.com/\w{12}"
- __version__ = "0.03"
+ __version__ = "0.04"
__description__ = """share76.com hoster plugin"""
__author_name__ = ("me")
- FILE_INFO_PATTERN = r'<h2>\s*File:\s*<font[^>]*>(?P<N>[^>]+)</font>\s*\[<font[^>]*>(?P<S>[0-9.]+) (?P<U>[kKMG])i?B</font>\]</h2>'
- HOSTER_NAME = "share76.com"
-
getInfo = create_getInfo(Share76Com)
diff --git a/pyload/plugins/hoster/SharebeesCom.py b/pyload/plugins/hoster/SharebeesCom.py
index cc1173fea..5eaaf24f5 100644
--- a/pyload/plugins/hoster/SharebeesCom.py
+++ b/pyload/plugins/hoster/SharebeesCom.py
@@ -1,20 +1,16 @@
# -*- coding: utf-8 -*-
-from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-class SharebeesCom(XFileSharingPro):
+
+class SharebeesCom(DeadHoster):
__name__ = "SharebeesCom"
__type__ = "hoster"
__pattern__ = r"http://(?:\w*\.)*?sharebees.com/\w{12}"
- __version__ = "0.01"
+ __version__ = "0.02"
__description__ = """ShareBees hoster plugin"""
__author_name__ = ("zoidberg")
__author_mail__ = ("zoidberg@mujmail.cz")
- FILE_NAME_PATTERN = r'<p class="file-name" ><.*?>\s*(?P<N>.+)'
- FILE_SIZE_PATTERN = r'<small>\((?P<S>\d+) bytes\)</small>'
- FORM_PATTERN = 'F1'
- HOSTER_NAME = "sharebees.com"
-
getInfo = create_getInfo(SharebeesCom)
diff --git a/pyload/plugins/hoster/ShragleCom.py b/pyload/plugins/hoster/ShragleCom.py
index 5d19afbc7..2b1a8b80a 100644
--- a/pyload/plugins/hoster/ShragleCom.py
+++ b/pyload/plugins/hoster/ShragleCom.py
@@ -1,104 +1,17 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-import re
-from pycurl import FOLLOWLOCATION
+from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-from module.plugins.Hoster import Hoster
-from module.plugins.internal.SimpleHoster import parseHtmlForm
-from module.plugins.internal.CaptchaService import ReCaptcha
-from module.network.RequestFactory import getURL
-API_KEY = "078e5ca290d728fd874121030efb4a0d"
-
-
-def parseFileInfo(self, url):
- file_id = re.match(self.__pattern__, url).group('ID')
-
- data = getURL("http://www.cloudnator.com/api.php?key=%s&action=getStatus&fileID=%s" % (API_KEY, file_id),
- decode=True).split()
-
- if len(data) == 4:
- name, size, md5, status = data
- size = int(size)
-
- if hasattr(self, "check_data"):
- self.checkdata = {"size": size, "md5": md5}
-
- return name, size, 2 if status == "0" else 1, url
- else:
- return url, 0, 1, url
-
-
-def getInfo(urls):
- for url in urls:
- file_info = parseFileInfo(ShragleCom, url)
- yield file_info
-
-
-class ShragleCom(Hoster):
+class ShragleCom(DeadHoster):
__name__ = "ShragleCom"
__type__ = "hoster"
__pattern__ = r"http://(?:www.)?(cloudnator|shragle).com/files/(?P<ID>.*?)/"
- __version__ = "0.21"
+ __version__ = "0.22"
__description__ = """Cloudnator.com (Shragle.com) Download PLugin"""
__author_name__ = ("RaNaN", "zoidberg")
__author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz")
- def setup(self):
- self.multiDL = False
- self.check_data = None
-
- def process(self, pyfile):
- #get file status and info
- self.pyfile.name, self.pyfile.size, status = parseFileInfo(self, pyfile.url)[:3]
- if status != 2:
- self.offline()
-
- self.handleFree()
-
- def handleFree(self):
- self.html = self.load(self.pyfile.url)
-
- #get wait time
- found = re.search('\s*var\sdownloadWait\s=\s(\d+);', self.html)
- self.setWait(int(found.group(1)) if found else 30)
-
- #parse download form
- action, inputs = parseHtmlForm('id="download', self.html)
-
- #solve captcha
- found = re.search('recaptcha/api/(?:challenge|noscript)?k=(.+?)', self.html)
- captcha_key = found.group(1) if found else "6LdEFb0SAAAAAAwM70vnYo2AkiVkCx-xmfniatHz"
-
- recaptcha = ReCaptcha(self)
-
- inputs['recaptcha_challenge_field'], inputs['recaptcha_response_field'] = recaptcha.challenge(captcha_key)
- self.wait()
-
- #validate
- self.req.http.c.setopt(FOLLOWLOCATION, 0)
- self.html = self.load(action, post=inputs)
-
- found = re.search(r"Location\s*:\s*(\S*)", self.req.http.header, re.I)
- if found:
- self.correctCaptcha()
- download_url = found.group(1)
- else:
- if "Sicherheitscode falsch" in self.html:
- self.invalidCaptcha()
- self.retry(max_tries=5, reason="Invalid captcha")
- else:
- self.fail("Invalid session")
-
- #download
- self.req.http.c.setopt(FOLLOWLOCATION, 1)
- self.download(download_url)
- check = self.checkDownload({
- "ip_blocked": re.compile(r'<div class="error".*IP.*loading')
- })
- if check == "ip_blocked":
- self.setWait(1800, True)
- self.wait()
- self.retry()
+getInfo = create_getInfo(ShragleCom)
diff --git a/pyload/plugins/hoster/SpeedLoadOrg.py b/pyload/plugins/hoster/SpeedLoadOrg.py
index 5687fae85..2360b7773 100644
--- a/pyload/plugins/hoster/SpeedLoadOrg.py
+++ b/pyload/plugins/hoster/SpeedLoadOrg.py
@@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
+
from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
diff --git a/pyload/plugins/hoster/SpeedfileCz.py b/pyload/plugins/hoster/SpeedfileCz.py
index 3475ea29e..b8eaa775c 100644
--- a/pyload/plugins/hoster/SpeedfileCz.py
+++ b/pyload/plugins/hoster/SpeedfileCz.py
@@ -16,52 +16,16 @@
@author: zoidberg
"""
-import re
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-class SpeedfileCz(SimpleHoster):
+class SpeedfileCz(DeadHoster):
__name__ = "SpeedFileCz"
__type__ = "hoster"
__pattern__ = r"http://speedfile.cz/.*"
- __version__ = "0.31"
+ __version__ = "0.32"
__description__ = """speedfile.cz"""
__author_name__ = ("zoidberg")
- FILE_NAME_PATTERN = r'<meta property="og:title" content="(?P<N>[^"]+)" />'
- FILE_SIZE_PATTERN = r'<strong><big>(?P<S>[0-9.]+) (?P<U>[kKMG])i?B'
- URL_PATTERN = r'<a id="request" class="caps" href="([^"]+)" rel="nofollow">'
- FILE_OFFLINE_PATTERN = r'<title>Speedfile \| 404'
- WAIT_PATTERN = r'"requestedAt":(\d+),"allowedAt":(\d+),"adUri"'
- def setup(self):
- self.multiDL = False
-
- def process(self, pyfile):
- self.html = self.load(pyfile.url, decode=True)
-
- if re.search(self.FILE_OFFLINE_PATTERN, self.html):
- self.offline()
-
- found = re.search(self.FILE_NAME_PATTERN, self.html)
- if found is None:
- self.fail("Parse error (NAME)")
- pyfile.name = found.group(1)
-
- found = re.search(self.URL_PATTERN, self.html)
- if found is None:
- self.fail("Parse error (URL)")
- download_url = "http://speedfile.cz/" + found.group(1)
-
- self.html = self.load(download_url)
- self.logDebug(self.html)
- found = re.search(self.WAIT_PATTERN, self.html)
- if found is None:
- self.fail("Parse error (WAIT)")
- self.setWait(int(found.group(2)) - int(found.group(1)))
- self.wait()
-
- self.download(download_url)
-
-
-create_getInfo(SpeedfileCz)
+getInfo = create_getInfo(SpeedfileCz)
diff --git a/pyload/plugins/hoster/TurbouploadCom.py b/pyload/plugins/hoster/TurbouploadCom.py
index 12dad7906..1c60c2c87 100644
--- a/pyload/plugins/hoster/TurbouploadCom.py
+++ b/pyload/plugins/hoster/TurbouploadCom.py
@@ -16,31 +16,17 @@
@author: zoidberg
"""
-import re
-from module.plugins.internal.DeadHoster import DeadHoster as EasybytezCom, create_getInfo
+from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-class TurbouploadCom(EasybytezCom):
+class TurbouploadCom(DeadHoster):
__name__ = "TurbouploadCom"
__type__ = "hoster"
__pattern__ = r"http://(?:\w*\.)?turboupload.com/(\w+).*"
- __version__ = "0.02"
+ __version__ = "0.03"
__description__ = """turboupload.com"""
__author_name__ = ("zoidberg")
__author_mail__ = ("zoidberg@mujmail.cz")
- # shares code with EasybytezCom
-
- DIRECT_LINK_PATTERN = r'<a href="(http://turboupload.com/files/[^"]+)">\1</a>'
-
- def handleFree(self):
- self.html = self.load(self.pyfile.url, post=self.getPostParameters(), ref=True, cookies=True)
- found = re.search(self.DIRECT_LINK_PATTERN, self.html)
- if not found:
- self.parseError('Download Link')
- url = found.group(1)
- self.logDebug('URL: ' + url)
- self.download(url)
-
getInfo = create_getInfo(TurbouploadCom)
diff --git a/pyload/plugins/hoster/UploadStationCom.py b/pyload/plugins/hoster/UploadStationCom.py
index 2831facac..3583af65d 100644
--- a/pyload/plugins/hoster/UploadStationCom.py
+++ b/pyload/plugins/hoster/UploadStationCom.py
@@ -1,25 +1,16 @@
# -*- coding: utf-8 -*-
-from module.plugins.hoster.FileserveCom import FileserveCom, checkFile
-from module.plugins.Plugin import chunks
+from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-class UploadStationCom(FileserveCom):
+
+class UploadStationCom(DeadHoster):
__name__ = "UploadStationCom"
__type__ = "hoster"
__pattern__ = r"http://(?:www\.)?uploadstation\.com/file/(?P<id>[A-Za-z0-9]+)"
- __version__ = "0.51"
+ __version__ = "0.52"
__description__ = """UploadStation.Com File Download Hoster"""
__author_name__ = ("fragonib", "zoidberg")
__author_mail__ = ("fragonib[AT]yahoo[DOT]es", "zoidberg@mujmail.cz")
- URLS = ['http://www.uploadstation.com/file/', 'http://www.uploadstation.com/check-links.php',
- 'http://www.uploadstation.com/checkReCaptcha.php']
- LINKCHECK_TR = r'<div class="details (?:white|grey)">(.*?)\t{9}</div>'
- LINKCHECK_TD = r'<div class="(?:col )?col\d">(?:<[^>]*>|&nbsp;)*([^<]*)'
-
- LONG_WAIT_PATTERN = r'<h1>You have to wait (\d+) (\w+) to download the next file\.</h1>'
-
-def getInfo(urls):
- for chunk in chunks(urls, 100):
- yield checkFile(UploadStationCom, chunk)
+getInfo = create_getInfo(UploadStationCom)
diff --git a/pyload/plugins/hoster/WuploadCom.py b/pyload/plugins/hoster/WuploadCom.py
index aaeeb59fd..68e83e228 100644
--- a/pyload/plugins/hoster/WuploadCom.py
+++ b/pyload/plugins/hoster/WuploadCom.py
@@ -1,239 +1,17 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-import re
-import string
-from urllib import unquote
+from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-from module.plugins.Hoster import Hoster
-from module.plugins.internal.CaptchaService 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):
- for chunk in chunks(urls, 20):
- result = []
- ids = dict()
- for url in chunk:
- id = getId(url)
- if id:
- ids[id] = url
- else:
- result.append((None, 0, 1, url))
-
- if len(ids) > 0:
- check_url = "http://api.wupload.com/link?method=getInfo&format=json&ids=" + ",".join(ids.keys())
- response = json_loads(getURL(check_url).decode("utf8", "ignore"))
- for item in response["FSApi_Link"]["getInfo"]["response"]["links"]:
- if item["status"] != "AVAILABLE":
- result.append((None, 0, 1, ids[str(item["id"])]))
- else:
- result.append((unquote(item["filename"]), item["size"], 2, ids[str(item["id"])]))
- yield result
-
-
-def getId(url):
- match = re.search(WuploadCom.FILE_ID_PATTERN, url)
- if match:
- return string.replace(match.group("id"), "/", "-")
- else:
- return None
-
-
-class WuploadCom(Hoster):
+class WuploadCom(DeadHoster):
__name__ = "WuploadCom"
__type__ = "hoster"
__pattern__ = r"http://[\w\.]*?wupload\..*?/file/(([a-z][0-9]+/)?[0-9]+)(/.*)?"
- __version__ = "0.22"
+ __version__ = "0.23"
__description__ = """Wupload com"""
__author_name__ = ("jeix", "paulking")
__author_mail__ = ("jeix@hasnomail.de", "")
- API_ADDRESS = "http://api.wupload.com"
- URL_DOMAIN_PATTERN = r'(?P<prefix>.*?)(?P<domain>.wupload\..+?)(?P<suffix>/.*)'
- FILE_ID_PATTERN = r'/file/(?P<id>([a-z][0-9]+/)?[0-9]+)(/.*)?'
- FILE_LINK_PATTERN = r'<p><a href="(http://.+?\.wupload\..+?)"><span>Download Now'
- WAIT_TIME_PATTERN = r'countDownDelay = (?P<wait>\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"><img style="display: block;" src="(.+)image?c=(.+?)"'
-
- def setup(self):
- if not self.premium:
- self.chunkLimit = 1
- self.multiDL = False
-
- def process(self, pyfile):
- self.pyfile = pyfile
-
- self.pyfile.url = self.checkFile(self.pyfile.url)
-
- if self.premium:
- self.downloadPremium()
- else:
- self.downloadFree()
-
- def checkFile(self, url):
- id = getId(url)
- self.logDebug("file id is %s" % id)
- if id:
- # Use the api to check the current status of the file and fixup data
- check_url = self.API_ADDRESS + "/link?method=getInfo&format=json&ids=%s" % id
- result = json_loads(self.load(check_url, decode=True))
- item = result["FSApi_Link"]["getInfo"]["response"]["links"][0]
- self.logDebug("api check returns %s" % item)
-
- if item["status"] != "AVAILABLE":
- self.offline()
- if item["is_password_protected"] != 0:
- self.fail("This file is password protected")
-
- # ignored this check due to false api information
- #if item["is_premium_only"] != 0 and not self.premium:
- # self.fail("need premium account for file")
-
- self.pyfile.name = unquote(item["filename"])
-
- # Fix the url and resolve the domain to the correct regional variation
- url = item["url"]
- urlparts = re.search(self.URL_DOMAIN_PATTERN, url)
- if urlparts:
- url = urlparts.group("prefix") + self.getDomain() + urlparts.group("suffix")
- self.logDebug("localised url is %s" % url)
- return url
- else:
- self.fail("Invalid URL")
-
- def getDomain(self):
- result = json_loads(
- self.load(self.API_ADDRESS + "/utility?method=getWuploadDomainForCurrentIp&format=json", decode=True))
- self.logDebug("%s: response to get domain %s" % (self.__name__, result))
- return result["FSApi_Utility"]["getWuploadDomainForCurrentIp"]["response"]
-
- def downloadPremium(self):
- self.logDebug("Premium download")
-
- api = self.API_ADDRESS + "/link?method=getDownloadLink&u=%%s&p=%%s&ids=%s" % getId(self.pyfile.url)
-
- result = json_loads(self.load(api % (self.user, self.account.getAccountData(self.user)["password"])))
- links = result["FSApi_Link"]["getDownloadLink"]["response"]["links"]
-
- #wupload seems to return list and no dicts
- if type(links) == dict:
- info = links.values()[0]
- else:
- info = links[0]
-
- if "status" in info and info["status"] == "NOT_AVAILABLE":
- self.tempOffline()
-
- self.download(info["url"])
-
- def downloadFree(self):
- self.logDebug("Free download")
- # Get initial page
- self.html = self.load(self.pyfile.url)
- url = self.pyfile.url + "?start=1"
- self.html = self.load(url)
- self.handleErrors()
-
- finalUrl = re.search(self.FILE_LINK_PATTERN, self.html)
-
- if not finalUrl:
- self.doWait(url)
-
- chall = re.search(self.CAPTCHA_TYPE1_PATTERN, self.html)
- chall2 = re.search(self.CAPTCHA_TYPE2_PATTERN, self.html)
- if chall or chall2:
- for i in range(5):
- re_captcha = ReCaptcha(self)
- if chall:
- self.logDebug("Captcha type1")
- challenge, result = re_captcha.challenge(chall.group(1))
- else:
- self.logDebug("Captcha type2")
- server = chall2.group(1)
- challenge = chall2.group(2)
- result = re_captcha.result(server, challenge)
-
- postData = {"recaptcha_challenge_field": challenge,
- "recaptcha_response_field": result}
-
- self.html = self.load(url, post=postData)
- self.handleErrors()
- chall = re.search(self.CAPTCHA_TYPE1_PATTERN, self.html)
- chall2 = re.search(self.CAPTCHA_TYPE2_PATTERN, self.html)
-
- if chall or chall2:
- self.invalidCaptcha()
- else:
- self.correctCaptcha()
- break
-
- finalUrl = re.search(self.FILE_LINK_PATTERN, self.html)
-
- if not finalUrl:
- self.fail("Couldn't find free download link")
-
- self.logDebug("got download url %s" % finalUrl.group(1))
- self.download(finalUrl.group(1))
-
- def doWait(self, url):
- # If the current page requires us to wait then wait and move to the next page as required
-
- # There maybe more than one wait period. The extended wait if download limits have been exceeded (in which case we try reconnect)
- # and the short wait before every download. Visually these are the same, the difference is that one includes a code to allow
- # progress to the next page
-
- waitSearch = re.search(self.WAIT_TIME_PATTERN, self.html)
- while waitSearch:
- wait = int(waitSearch.group("wait"))
- if wait > 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()
+getInfo = create_getInfo(WuploadCom)
diff --git a/pyload/plugins/hoster/X7To.py b/pyload/plugins/hoster/X7To.py
index 59ec6ed06..950cbd164 100644
--- a/pyload/plugins/hoster/X7To.py
+++ b/pyload/plugins/hoster/X7To.py
@@ -1,88 +1,16 @@
# -*- coding: utf-8 -*-
-import re
-from module.plugins.Hoster import Hoster
+from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
-def getInfo(urls):
- yield [(url, 0, 1, url) for url in urls]
-
-
-class X7To(Hoster):
+class X7To(DeadHoster):
__name__ = "X7To"
__type__ = "hoster"
__pattern__ = r"http://(?:www.)?x7.to/"
- __version__ = "0.4"
+ __version__ = "0.41"
__description__ = """X7.To File Download Hoster"""
__author_name__ = ("ernieb")
__author_mail__ = ("ernieb")
- FILE_INFO_PATTERN = r'<meta name="description" content="Download: (.*?) \(([0-9,.]+) (KB|MB|GB)\)'
-
- def setup(self):
- self.multiDL = self.resumeDownload = False
- self.chunkLimit = 1
-
- self.file_id = re.search(r"http://x7.to/([a-zA-Z0-9]+)", self.pyfile.url).group(1)
- self.logDebug("file id is %s" % self.file_id)
- self.pyfile.url = "http://x7.to/" + self.file_id
-
- def process(self, pyfile):
- self.fail("Hoster not longer available")
-
- def handlePremium(self):
- # check if over limit first
- overLimit = re.search(r'<a onClick="cUser.buyTraffic\(\)" id="DL">', self.html)
- if overLimit:
- self.logDebug("over limit, falling back to free")
- self.handleFree()
- else:
- realurl = re.search(r'<a href="(http://stor.*?)" id="DL">', self.html)
- if realurl:
- realurl = realurl.group(1)
- self.logDebug("premium url found %s" % realurl)
- else:
- self.logDebug("premium link not found")
- self.download(realurl)
-
- def handleFree(self):
- # find file id
- file_id = re.search(r"var dlID = '(.*?)'", self.html)
- if not file_id:
- self.fail("Free download id not found")
-
- file_url = "http://x7.to/james/ticket/dl/" + file_id.group(1)
- self.logDebug("download id %s" % file_id.group(1))
-
- self.html = self.load(file_url, ref=False, decode=True)
-
- # deal with errors
- if "limit-dl" in self.html:
- self.logDebug("Limit reached ... waiting")
- self.setWait(900, True)
- self.wait()
- self.retry()
-
- if "limit-parallel" in self.html:
- self.fail("Cannot download in parallel")
-
- # no waiting required, go to download
- waitCheck = re.search(r"wait:(\d*),", self.html)
- if waitCheck:
- waitCheck = int(waitCheck.group(1))
- self.setWait(waitCheck)
- self.wait()
-
- urlCheck = re.search(r"url:'(.*?)'", self.html)
- url = None
- if urlCheck:
- url = urlCheck.group(1)
- self.logDebug("free url found %s" % url)
- if url:
- try:
- self.download(url)
- except:
- self.logDebug("downloading url failed: %s" % url)
- else:
- self.fail("Free download url found")
+getInfo = create_getInfo(X7To)