summaryrefslogtreecommitdiffstats
path: root/pyload/plugins/crypter
diff options
context:
space:
mode:
Diffstat (limited to 'pyload/plugins/crypter')
-rw-r--r--pyload/plugins/crypter/BitshareComFolder.py15
-rw-r--r--pyload/plugins/crypter/C1neonCom.py10
-rw-r--r--pyload/plugins/crypter/ChipDe.py15
-rw-r--r--pyload/plugins/crypter/CrockoComFolder.py11
-rw-r--r--pyload/plugins/crypter/CryptItCom.py10
-rw-r--r--pyload/plugins/crypter/CzshareComFolder.py15
-rw-r--r--pyload/plugins/crypter/DDLMusicOrg.py12
-rw-r--r--pyload/plugins/crypter/DailymotionBatch.py17
-rw-r--r--pyload/plugins/crypter/DataHuFolder.py42
-rw-r--r--pyload/plugins/crypter/DdlstorageComFolder.py10
-rw-r--r--pyload/plugins/crypter/DepositfilesComFolder.py11
-rw-r--r--pyload/plugins/crypter/Dereferer.py9
-rw-r--r--pyload/plugins/crypter/DlProtectCom.py11
-rw-r--r--pyload/plugins/crypter/DontKnowMe.py13
-rw-r--r--pyload/plugins/crypter/DuckCryptInfo.py31
-rw-r--r--pyload/plugins/crypter/DuploadOrgFolder.py19
-rw-r--r--pyload/plugins/crypter/EasybytezComFolder.py22
-rw-r--r--pyload/plugins/crypter/EmbeduploadCom.py27
-rw-r--r--pyload/plugins/crypter/FilebeerInfoFolder.py8
-rw-r--r--pyload/plugins/crypter/FilecloudIoFolder.py15
-rw-r--r--pyload/plugins/crypter/FilefactoryComFolder.py15
-rw-r--r--pyload/plugins/crypter/FilerNetFolder.py15
-rw-r--r--pyload/plugins/crypter/FileserveComFolder.py17
-rw-r--r--pyload/plugins/crypter/FilestubeCom.py13
-rw-r--r--pyload/plugins/crypter/FiletramCom.py17
-rw-r--r--pyload/plugins/crypter/FiredriveComFolder.py28
-rw-r--r--pyload/plugins/crypter/FourChanOrg.py11
-rw-r--r--pyload/plugins/crypter/FreakhareComFolder.py15
-rw-r--r--pyload/plugins/crypter/FreetexthostCom.py13
-rw-r--r--pyload/plugins/crypter/FshareVnFolder.py11
-rw-r--r--pyload/plugins/crypter/GooGl.py11
-rw-r--r--pyload/plugins/crypter/HoerbuchIn.py24
-rw-r--r--pyload/plugins/crypter/HotfileFolderCom.py14
-rw-r--r--pyload/plugins/crypter/ILoadTo.py10
-rw-r--r--pyload/plugins/crypter/ImgurComAlbum.py13
-rw-r--r--pyload/plugins/crypter/LetitbitNetFolder.py20
-rw-r--r--pyload/plugins/crypter/LinkSaveIn.py42
-rw-r--r--pyload/plugins/crypter/LinkdecrypterCom.py30
-rw-r--r--pyload/plugins/crypter/LixIn.py21
-rw-r--r--pyload/plugins/crypter/LofCc.py10
-rw-r--r--pyload/plugins/crypter/MBLinkInfo.py10
-rw-r--r--pyload/plugins/crypter/MediafireComFolder.py18
-rw-r--r--pyload/plugins/crypter/Movie2kTo.py8
-rw-r--r--pyload/plugins/crypter/MultiUpOrg.py13
-rw-r--r--pyload/plugins/crypter/MultiloadCz.py18
-rw-r--r--pyload/plugins/crypter/MultiuploadCom.py9
-rw-r--r--pyload/plugins/crypter/NCryptIn.py63
-rw-r--r--pyload/plugins/crypter/NetfolderIn.py34
-rw-r--r--pyload/plugins/crypter/NosvideoCom.py15
-rw-r--r--pyload/plugins/crypter/OneKhDe.py14
-rw-r--r--pyload/plugins/crypter/OronComFolder.py10
-rw-r--r--pyload/plugins/crypter/PastebinCom.py13
-rw-r--r--pyload/plugins/crypter/QuickshareCzFolder.py20
-rw-r--r--pyload/plugins/crypter/RSLayerCom.py10
-rw-r--r--pyload/plugins/crypter/RelinkUs.py77
-rw-r--r--pyload/plugins/crypter/SafelinkingNet.py39
-rw-r--r--pyload/plugins/crypter/SecuredIn.py10
-rw-r--r--pyload/plugins/crypter/ShareLinksBiz.py76
-rw-r--r--pyload/plugins/crypter/ShareRapidComFolder.py17
-rw-r--r--pyload/plugins/crypter/SpeedLoadOrgFolder.py8
-rw-r--r--pyload/plugins/crypter/StealthTo.py8
-rw-r--r--pyload/plugins/crypter/TnyCz.py13
-rw-r--r--pyload/plugins/crypter/TrailerzoneInfo.py10
-rw-r--r--pyload/plugins/crypter/TurbobitNetFolder.py16
-rw-r--r--pyload/plugins/crypter/TusfilesNetFolder.py26
-rw-r--r--pyload/plugins/crypter/UlozToFolder.py21
-rw-r--r--pyload/plugins/crypter/UploadableChFolder.py15
-rw-r--r--pyload/plugins/crypter/UploadedToFolder.py36
-rw-r--r--pyload/plugins/crypter/WiiReloadedOrg.py8
-rw-r--r--pyload/plugins/crypter/XupPl.py11
-rw-r--r--pyload/plugins/crypter/YoutubeBatch.py29
71 files changed, 752 insertions, 596 deletions
diff --git a/pyload/plugins/crypter/BitshareComFolder.py b/pyload/plugins/crypter/BitshareComFolder.py
index 6cdb43339..4dbeafdb3 100644
--- a/pyload/plugins/crypter/BitshareComFolder.py
+++ b/pyload/plugins/crypter/BitshareComFolder.py
@@ -4,15 +4,18 @@ from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
class BitshareComFolder(SimpleCrypter):
- __name__ = "BitshareComFolder"
- __type__ = "crypter"
- __version__ = "0.02"
+ __name__ = "BitshareComFolder"
+ __type__ = "crypter"
+ __version__ = "0.03"
__pattern__ = r'http://(?:www\.)?bitshare\.com/\?d=\w+'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Bitshare.com folder decrypter plugin"""
- __authors__ = [("stickell", "l.stickell@yahoo.it")]
+ __license__ = "GPLv3"
+ __authors__ = [("stickell", "l.stickell@yahoo.it")]
- LINK_PATTERN = r'<a href="(http://bitshare.com/files/.+)">.+</a></td>'
- TITLE_PATTERN = r'View public folder "(.+)"</h1>'
+ LINK_PATTERN = r'<a href="(http://bitshare\.com/files/.+)">.+</a></td>'
+ NAME_PATTERN = r'View public folder "(?P<N>.+)"</h1>'
diff --git a/pyload/plugins/crypter/C1neonCom.py b/pyload/plugins/crypter/C1neonCom.py
index bb5b48cc2..91a22ea39 100644
--- a/pyload/plugins/crypter/C1neonCom.py
+++ b/pyload/plugins/crypter/C1neonCom.py
@@ -4,11 +4,13 @@ from pyload.plugins.internal.DeadCrypter import DeadCrypter
class C1neonCom(DeadCrypter):
- __name__ = "C1neonCom"
- __type__ = "crypter"
+ __name__ = "C1neonCom"
+ __type__ = "crypter"
__version__ = "0.05"
- __pattern__ = r'http://(?:www\.)?c1neon.com/.*?'
+ __pattern__ = r'http://(?:www\.)?c1neon\.com/.*?'
+ __config__ = []
__description__ = """C1neon.com decrypter plugin"""
- __authors__ = [("godofdream", "soilfiction@gmail.com")]
+ __license__ = "GPLv3"
+ __authors__ = [("godofdream", "soilfiction@gmail.com")]
diff --git a/pyload/plugins/crypter/ChipDe.py b/pyload/plugins/crypter/ChipDe.py
index 7740e8e09..97a39f6d2 100644
--- a/pyload/plugins/crypter/ChipDe.py
+++ b/pyload/plugins/crypter/ChipDe.py
@@ -5,22 +5,25 @@ from pyload.plugins.base.Crypter import Crypter
class ChipDe(Crypter):
- __name__ = "ChipDe"
- __type__ = "crypter"
+ __name__ = "ChipDe"
+ __type__ = "crypter"
__version__ = "0.1"
- __pattern__ = r'http://(?:www\.)?chip.de/video/.*\.html'
+ __pattern__ = r'http://(?:www\.)?chip\.de/video/.*\.html'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Chip.de decrypter plugin"""
- __authors__ = [("4Christopher", "4Christopher@gmx.de")]
+ __license__ = "GPLv3"
+ __authors__ = [("4Christopher", "4Christopher@gmx.de")]
def decrypt(self, pyfile):
self.html = self.load(pyfile.url)
try:
- f = re.search(r'"(http://video.chip.de/\d+?/.*)"', self.html)
+ f = re.search(r'"(http://video\.chip\.de/.+)"', self.html)
except:
- self.fail('Failed to find the URL')
+ self.fail(_("Failed to find the URL"))
else:
self.urls = [f.group(1)]
self.logDebug("The file URL is %s" % self.urls[0])
diff --git a/pyload/plugins/crypter/CrockoComFolder.py b/pyload/plugins/crypter/CrockoComFolder.py
index 9fc8d2d30..7c96161a5 100644
--- a/pyload/plugins/crypter/CrockoComFolder.py
+++ b/pyload/plugins/crypter/CrockoComFolder.py
@@ -4,14 +4,17 @@ from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
class CrockoComFolder(SimpleCrypter):
- __name__ = "CrockoComFolder"
- __type__ = "crypter"
+ __name__ = "CrockoComFolder"
+ __type__ = "crypter"
__version__ = "0.01"
- __pattern__ = r'http://(?:www\.)?crocko.com/f/.*'
+ __pattern__ = r'http://(?:www\.)?crocko\.com/f/.*'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Crocko.com folder decrypter plugin"""
- __authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
+ __license__ = "GPLv3"
+ __authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
LINK_PATTERN = r'<td class="last"><a href="([^"]+)">download</a>'
diff --git a/pyload/plugins/crypter/CryptItCom.py b/pyload/plugins/crypter/CryptItCom.py
index 99f8b1730..9ca6f2bc3 100644
--- a/pyload/plugins/crypter/CryptItCom.py
+++ b/pyload/plugins/crypter/CryptItCom.py
@@ -4,11 +4,13 @@ from pyload.plugins.internal.DeadCrypter import DeadCrypter
class CryptItCom(DeadCrypter):
- __name__ = "CryptItCom"
- __type__ = "crypter"
+ __name__ = "CryptItCom"
+ __type__ = "crypter"
__version__ = "0.11"
- __pattern__ = r'http://(?:www\.)?crypt-it\.com/(s|e|d|c)/[\w]+'
+ __pattern__ = r'http://(?:www\.)?crypt-it\.com/(s|e|d|c)/\w+'
+ __config__ = []
__description__ = """Crypt-it.com decrypter plugin"""
- __authors__ = [("jeix", "jeix@hasnomail.de")]
+ __license__ = "GPLv3"
+ __authors__ = [("jeix", "jeix@hasnomail.de")]
diff --git a/pyload/plugins/crypter/CzshareComFolder.py b/pyload/plugins/crypter/CzshareComFolder.py
index ac47aa17e..23c17e64a 100644
--- a/pyload/plugins/crypter/CzshareComFolder.py
+++ b/pyload/plugins/crypter/CzshareComFolder.py
@@ -5,14 +5,17 @@ from pyload.plugins.base.Crypter import Crypter
class CzshareComFolder(Crypter):
- __name__ = "CzshareComFolder"
- __type__ = "crypter"
+ __name__ = "CzshareComFolder"
+ __type__ = "crypter"
__version__ = "0.2"
__pattern__ = r'http://(?:www\.)?(czshare|sdilej)\.(com|cz)/folders/.*'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Czshare.com folder decrypter plugin, now Sdilej.cz"""
- __authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
+ __license__ = "GPLv3"
+ __authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
FOLDER_PATTERN = r'<tr class="subdirectory">\s*<td>\s*<table>(.*?)</table>'
@@ -22,10 +25,8 @@ class CzshareComFolder(Crypter):
def decrypt(self, pyfile):
html = self.load(pyfile.url)
- m = re.search(self.FOLDER_PATTERN, html, re.DOTALL)
+ m = re.search(self.FOLDER_PATTERN, html, re.S)
if m is None:
- self.fail("Parse error (FOLDER)")
+ self.error(_("FOLDER_PATTERN not found"))
self.urls.extend(re.findall(self.LINK_PATTERN, m.group(1)))
- if not self.urls:
- self.fail('Could not extract any links')
diff --git a/pyload/plugins/crypter/DDLMusicOrg.py b/pyload/plugins/crypter/DDLMusicOrg.py
index c4dbe0186..ff2faef2c 100644
--- a/pyload/plugins/crypter/DDLMusicOrg.py
+++ b/pyload/plugins/crypter/DDLMusicOrg.py
@@ -8,26 +8,30 @@ from pyload.plugins.base.Crypter import Crypter
class DDLMusicOrg(Crypter):
- __name__ = "DDLMusicOrg"
- __type__ = "crypter"
+ __name__ = "DDLMusicOrg"
+ __type__ = "crypter"
__version__ = "0.3"
__pattern__ = r'http://(?:www\.)?ddl-music\.org/captcha/ddlm_cr\d\.php\?\d+\?\d+'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Ddl-music.org decrypter plugin"""
- __authors__ = [("mkaay", "mkaay@mkaay.de")]
+ __license__ = "GPLv3"
+ __authors__ = [("mkaay", "mkaay@mkaay.de")]
def setup(self):
self.multiDL = False
+
def decrypt(self, pyfile):
html = self.load(pyfile.url, cookies=True)
if re.search(r"Wer dies nicht rechnen kann", html) is not None:
self.offline()
- math = re.search(r"(\d+) ([\+-]) (\d+) =\s+<inp", self.html)
+ math = re.search(r"(\d+) ([+-]) (\d+) =\s+<inp", self.html)
id = re.search(r"name=\"id\" value=\"(\d+)\"", self.html).group(1)
linknr = re.search(r"name=\"linknr\" value=\"(\d+)\"", self.html).group(1)
diff --git a/pyload/plugins/crypter/DailymotionBatch.py b/pyload/plugins/crypter/DailymotionBatch.py
index 41bec2203..fd43cd49a 100644
--- a/pyload/plugins/crypter/DailymotionBatch.py
+++ b/pyload/plugins/crypter/DailymotionBatch.py
@@ -10,14 +10,17 @@ from pyload.utils import safe_join
class DailymotionBatch(Crypter):
- __name__ = "DailymotionBatch"
- __type__ = "crypter"
+ __name__ = "DailymotionBatch"
+ __type__ = "crypter"
__version__ = "0.01"
__pattern__ = r'https?://(?:www\.)?dailymotion\.com/((playlists/)?(?P<TYPE>playlist|user)/)?(?P<ID>[\w^_]+)(?(TYPE)|#)'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Dailymotion.com channel & playlist decrypter"""
- __authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
+ __license__ = "GPLv3"
+ __authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
def api_response(self, ref, req=None):
@@ -25,6 +28,7 @@ class DailymotionBatch(Crypter):
page = self.load(url, get=req)
return json_loads(page)
+
def getPlaylistInfo(self, id):
ref = "playlist/" + id
req = {"fields": "name,owner.screenname"}
@@ -37,6 +41,7 @@ class DailymotionBatch(Crypter):
owner = playlist['owner.screenname']
return name, owner
+
def _getPlaylists(self, user_id, page=1):
ref = "user/%s/playlists" % user_id
req = {"fields": "id", "page": page, "limit": 100}
@@ -52,9 +57,11 @@ class DailymotionBatch(Crypter):
for item in self._getPlaylists(user_id, page + 1):
yield item
+
def getPlaylists(self, user_id):
return [(id,) + self.getPlaylistInfo(id) for id in self._getPlaylists(user_id)]
+
def _getVideos(self, id, page=1):
ref = "playlist/%s/videos" % id
req = {"fields": "url", "page": page, "limit": 100}
@@ -70,9 +77,11 @@ class DailymotionBatch(Crypter):
for item in self._getVideos(id, page + 1):
yield item
+
def getVideos(self, playlist_id):
return list(self._getVideos(playlist_id))[::-1]
+
def decrypt(self, pyfile):
m = re.match(self.__pattern__, pyfile.url)
m_id = m.group("ID")
@@ -88,7 +97,7 @@ class DailymotionBatch(Crypter):
self.logDebug("%s playlist\s found on channel \"%s\"" % (len(playlists), m_id))
if not playlists:
- self.fail("No playlist available")
+ self.fail(_("No playlist available"))
for p_id, p_name, p_owner in playlists:
p_videos = self.getVideos(p_id)
diff --git a/pyload/plugins/crypter/DataHuFolder.py b/pyload/plugins/crypter/DataHuFolder.py
index 29f38c3b7..b65c39904 100644
--- a/pyload/plugins/crypter/DataHuFolder.py
+++ b/pyload/plugins/crypter/DataHuFolder.py
@@ -6,39 +6,35 @@ from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
class DataHuFolder(SimpleCrypter):
- __name__ = "DataHuFolder"
- __type__ = "crypter"
- __version__ = "0.04"
+ __name__ = "DataHuFolder"
+ __type__ = "crypter"
+ __version__ = "0.06"
- __pattern__ = r'http://(?:www\.)?data.hu/dir/\w+'
+ __pattern__ = r'http://(?:www\.)?data\.hu/dir/\w+'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Data.hu folder decrypter plugin"""
- __authors__ = [("crash", None),
- ("stickell", "l.stickell@yahoo.it")]
+ __license__ = "GPLv3"
+ __authors__ = [("crash", None),
+ ("stickell", "l.stickell@yahoo.it")]
- LINK_PATTERN = r"<a href='(http://data\.hu/get/.+)' target='_blank'>\1</a>"
- TITLE_PATTERN = ur'<title>(.+) Let\xf6lt\xe9se</title>'
+ LINK_PATTERN = r'<a href=\'(http://data\.hu/get/.+)\' target=\'_blank\'>\1</a>'
+ NAME_PATTERN = ur'<title>(?P<N>.+) Let\xf6lt\xe9se</title>'
- def decrypt(self, pyfile):
- self.html = self.load(pyfile.url, decode=True)
+ def prepare(self):
+ super(DataHuFolder, self).prepare()
if u'K\xe9rlek add meg a jelsz\xf3t' in self.html: # Password protected
password = self.getPassword()
- if password is '':
- self.fail("No password specified, please set right password on Add package form and retry")
- self.logDebug("The folder is password protected', 'Using password: " + password)
- self.html = self.load(pyfile.url, post={'mappa_pass': password}, decode=True)
- if u'Hib\xe1s jelsz\xf3' in self.html: # Wrong password
- self.fail("Incorrect password, please set right password on Add package form and retry")
+ if not password:
+ self.fail(_("Password required"))
- package_name, folder_name = self.getPackageNameAndFolder()
+ self.logDebug("The folder is password protected', 'Using password: " + password)
- package_links = re.findall(self.LINK_PATTERN, self.html)
- self.logDebug("Package has %d links" % len(package_links))
+ self.html = self.load(self.pyfile.url, post={'mappa_pass': password}, decode=True)
- if package_links:
- self.packages = [(package_name, package_links, folder_name)]
- else:
- self.fail('Could not extract any links')
+ if u'Hib\xe1s jelsz\xf3' in self.html: # Wrong password
+ self.fail(_("Wrong password"))
diff --git a/pyload/plugins/crypter/DdlstorageComFolder.py b/pyload/plugins/crypter/DdlstorageComFolder.py
index c7e2538ff..9851f92c1 100644
--- a/pyload/plugins/crypter/DdlstorageComFolder.py
+++ b/pyload/plugins/crypter/DdlstorageComFolder.py
@@ -4,15 +4,17 @@ from pyload.plugins.internal.DeadCrypter import DeadCrypter, create_getInfo
class DdlstorageComFolder(DeadCrypter):
- __name__ = "DdlstorageComFolder"
- __type__ = "crypter"
+ __name__ = "DdlstorageComFolder"
+ __type__ = "crypter"
__version__ = "0.03"
__pattern__ = r'https?://(?:www\.)?ddlstorage\.com/folder/\w+'
+ __config__ = []
__description__ = """DDLStorage.com folder decrypter plugin"""
- __authors__ = [("godofdream", "soilfiction@gmail.com"),
- ("stickell", "l.stickell@yahoo.it")]
+ __license__ = "GPLv3"
+ __authors__ = [("godofdream", "soilfiction@gmail.com"),
+ ("stickell", "l.stickell@yahoo.it")]
getInfo = create_getInfo(SpeedLoadOrg)
diff --git a/pyload/plugins/crypter/DepositfilesComFolder.py b/pyload/plugins/crypter/DepositfilesComFolder.py
index db87f1c45..65d73afa8 100644
--- a/pyload/plugins/crypter/DepositfilesComFolder.py
+++ b/pyload/plugins/crypter/DepositfilesComFolder.py
@@ -4,14 +4,17 @@ from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
class DepositfilesComFolder(SimpleCrypter):
- __name__ = "DepositfilesComFolder"
- __type__ = "crypter"
+ __name__ = "DepositfilesComFolder"
+ __type__ = "crypter"
__version__ = "0.01"
- __pattern__ = r'http://(?:www\.)?depositfiles.com/folders/\w+'
+ __pattern__ = r'http://(?:www\.)?depositfiles\.com/folders/\w+'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Depositfiles.com folder decrypter plugin"""
- __authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
+ __license__ = "GPLv3"
+ __authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
LINK_PATTERN = r'<div class="progressName"[^>]*>\s*<a href="([^"]+)" title="[^"]*" target="_blank">'
diff --git a/pyload/plugins/crypter/Dereferer.py b/pyload/plugins/crypter/Dereferer.py
index 78ad300bb..41da3dc1e 100644
--- a/pyload/plugins/crypter/Dereferer.py
+++ b/pyload/plugins/crypter/Dereferer.py
@@ -8,14 +8,17 @@ from pyload.plugins.base.Crypter import Crypter
class Dereferer(Crypter):
- __name__ = "Dereferer"
- __type__ = "crypter"
+ __name__ = "Dereferer"
+ __type__ = "crypter"
__version__ = "0.1"
__pattern__ = r'https?://([^/]+)/.*?(?P<url>(ht|f)tps?(://|%3A%2F%2F).*)'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Crypter for dereferers"""
- __authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
+ __license__ = "GPLv3"
+ __authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
def decrypt(self, pyfile):
diff --git a/pyload/plugins/crypter/DlProtectCom.py b/pyload/plugins/crypter/DlProtectCom.py
index a53a46992..4f96a1d13 100644
--- a/pyload/plugins/crypter/DlProtectCom.py
+++ b/pyload/plugins/crypter/DlProtectCom.py
@@ -9,14 +9,17 @@ from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
class DlProtectCom(SimpleCrypter):
- __name__ = "DlProtectCom"
- __type__ = "crypter"
+ __name__ = "DlProtectCom"
+ __type__ = "crypter"
__version__ = "0.01"
__pattern__ = r'http://(?:www\.)?dl-protect\.com/((en|fr)/)?(?P<ID>\w+)'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Dl-protect.com decrypter plugin"""
- __authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
+ __license__ = "GPLv3"
+ __authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
OFFLINE_PATTERN = r'>Unfortunately, the link you are looking for is not found'
@@ -56,7 +59,7 @@ class DlProtectCom(SimpleCrypter):
for errmsg in (">The password is incorrect", ">The security code is incorrect"):
if errmsg in self.html:
- self.fail(errmsg[1:])
+ self.fail(_(errmsg[1:]))
pattern = r'<a href="([^/].+?)" target="_blank">'
return re.findall(pattern, self.html)
diff --git a/pyload/plugins/crypter/DontKnowMe.py b/pyload/plugins/crypter/DontKnowMe.py
index 4abc03bcd..53a1b3997 100644
--- a/pyload/plugins/crypter/DontKnowMe.py
+++ b/pyload/plugins/crypter/DontKnowMe.py
@@ -8,17 +8,20 @@ from pyload.plugins.base.Crypter import Crypter
class DontKnowMe(Crypter):
- __name__ = "DontKnowMe"
- __type__ = "crypter"
+ __name__ = "DontKnowMe"
+ __type__ = "crypter"
__version__ = "0.1"
- __pattern__ = r'http://(?:www\.)?dontknow.me/at/\?.+$'
+ __pattern__ = r'http://(?:www\.)?dontknow\.me/at/\?.+$'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """DontKnow.me decrypter plugin"""
- __authors__ = [("selaux", None)]
+ __license__ = "GPLv3"
+ __authors__ = [("selaux", None)]
- LINK_PATTERN = r'http://dontknow.me/at/\?(.+)$'
+ LINK_PATTERN = r'http://dontknow\.me/at/\?(.+)$'
def decrypt(self, pyfile):
diff --git a/pyload/plugins/crypter/DuckCryptInfo.py b/pyload/plugins/crypter/DuckCryptInfo.py
index fc917929a..6873fd5d3 100644
--- a/pyload/plugins/crypter/DuckCryptInfo.py
+++ b/pyload/plugins/crypter/DuckCryptInfo.py
@@ -8,14 +8,17 @@ from pyload.plugins.base.Crypter import Crypter
class DuckCryptInfo(Crypter):
- __name__ = "DuckCryptInfo"
- __type__ = "crypter"
+ __name__ = "DuckCryptInfo"
+ __type__ = "crypter"
__version__ = "0.02"
- __pattern__ = r'http://(?:www\.)?duckcrypt.info/(folder|wait|link)/(\w+)/?(\w*)'
+ __pattern__ = r'http://(?:www\.)?duckcrypt\.info/(folder|wait|link)/(\w+)/?(\w*)'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """DuckCrypt.info decrypter plugin"""
- __authors__ = [("godofdream", "soilfiction@gmail.com")]
+ __license__ = "GPLv3"
+ __authors__ = [("godofdream", "soilfiction@gmail.com")]
TIMER_PATTERN = r'<span id="timer">(.*)</span>'
@@ -26,29 +29,31 @@ class DuckCryptInfo(Crypter):
m = re.match(self.__pattern__, url)
if m is None:
- self.fail('Weird error in link')
+ self.fail(_("Weird error in link"))
if str(m.group(1)) == "link":
self.handleLink(url)
else:
self.handleFolder(m)
+
def handleFolder(self, m):
- src = self.load("http://duckcrypt.info/ajax/auth.php?hash=" + str(m.group(2)))
- m = re.match(self.__pattern__, src)
+ html = self.load("http://duckcrypt.info/ajax/auth.php?hash=" + str(m.group(2)))
+ m = re.match(self.__pattern__, html)
self.logDebug("Redirectet to " + str(m.group(0)))
- src = self.load(str(m.group(0)))
- soup = BeautifulSoup(src)
+ html = self.load(str(m.group(0)))
+ soup = BeautifulSoup(html)
cryptlinks = soup.findAll("div", attrs={"class": "folderbox"})
self.logDebug("Redirectet to " + str(cryptlinks))
if not cryptlinks:
- self.fail('no links m - (Plugin out of date?)')
+ self.error(_("No link found"))
for clink in cryptlinks:
if clink.find("a"):
self.handleLink(clink.find("a")['href'])
+
def handleLink(self, url):
- src = self.load(url)
- soup = BeautifulSoup(src)
+ html = self.load(url)
+ soup = BeautifulSoup(html)
self.urls = [soup.find("iframe")['src']]
if not self.urls:
- self.logDebug("No link found - (Plugin out of date?)")
+ self.logInfo(_("No link found"))
diff --git a/pyload/plugins/crypter/DuploadOrgFolder.py b/pyload/plugins/crypter/DuploadOrgFolder.py
index 23f439f68..af83dffd0 100644
--- a/pyload/plugins/crypter/DuploadOrgFolder.py
+++ b/pyload/plugins/crypter/DuploadOrgFolder.py
@@ -1,17 +1,16 @@
# -*- coding: utf-8 -*-
-from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+from module.plugins.internal.DeadCrypter import DeadCrypter
-class DuploadOrgFolder(SimpleCrypter):
- __name__ = "DuploadOrgFolder"
- __type__ = "crypter"
- __version__ = "0.01"
+class DuploadOrgFolder(DeadCrypter):
+ __name__ = "DuploadOrgFolder"
+ __type__ = "crypter"
+ __version__ = "0.02"
- __pattern__ = r'http://(?:www\.)?dupload\.org/folder/\d+/'
+ __pattern__ = r'http://(?:www\.)?dupload\.org/folder/\d+'
+ __config__ = []
__description__ = """Dupload.org folder decrypter plugin"""
- __authors__ = [("stickell", "l.stickell@yahoo.it")]
-
-
- LINK_PATTERN = r'<td style="[^"]+"><a href="(http://[^"]+)" target="_blank">[^<]+</a></td>'
+ __license__ = "GPLv3"
+ __authors__ = [("stickell", "l.stickell@yahoo.it")]
diff --git a/pyload/plugins/crypter/EasybytezComFolder.py b/pyload/plugins/crypter/EasybytezComFolder.py
index 26ac5a72b..fa3e6165c 100644
--- a/pyload/plugins/crypter/EasybytezComFolder.py
+++ b/pyload/plugins/crypter/EasybytezComFolder.py
@@ -1,22 +1,22 @@
# -*- coding: utf-8 -*-
-from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+from module.plugins.internal.XFSCrypter import XFSCrypter
-class EasybytezComFolder(SimpleCrypter):
- __name__ = "EasybytezComFolder"
- __type__ = "crypter"
- __version__ = "0.08"
+class EasybytezComFolder(XFSCrypter):
+ __name__ = "EasybytezComFolder"
+ __type__ = "crypter"
+ __version__ = "0.10"
- __pattern__ = r'http://(?:www\.)?easybytez\.com/users/(?P<ID>\d+/\d+)'
+ __pattern__ = r'http://(?:www\.)?easybytez\.com/users/\d+/\d+'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Easybytez.com folder decrypter plugin"""
- __authors__ = [("stickell", "l.stickell@yahoo.it")]
+ __license__ = "GPLv3"
+ __authors__ = [("stickell", "l.stickell@yahoo.it")]
- URL_REPLACEMENTS = [(__pattern__, r"http://www.easybytez.com/users/\g<ID>?per_page=10000")]
-
- LINK_PATTERN = r'<td><a href="(http://www\.easybytez\.com/\w+)" target="_blank">.+(?:</a>)?</td>'
- TITLE_PATTERN = r'<Title>Files of \d+: (.+) folder</Title>'
+ HOSTER_DOMAIN = "easybytez.com"
LOGIN_ACCOUNT = True
diff --git a/pyload/plugins/crypter/EmbeduploadCom.py b/pyload/plugins/crypter/EmbeduploadCom.py
index 5d9369d9d..136d99f9e 100644
--- a/pyload/plugins/crypter/EmbeduploadCom.py
+++ b/pyload/plugins/crypter/EmbeduploadCom.py
@@ -6,16 +6,19 @@ from pyload.network.HTTPRequest import BadHeader
class EmbeduploadCom(Crypter):
- __name__ = "EmbeduploadCom"
- __type__ = "crypter"
+ __name__ = "EmbeduploadCom"
+ __type__ = "crypter"
__version__ = "0.02"
- __pattern__ = r'http://(?:www\.)?embedupload.com/\?d=.*'
- __config__ = [("preferedHoster", "str", "Prefered hoster list (bar-separated) ", "embedupload"),
- ("ignoredHoster", "str", "Ignored hoster list (bar-separated) ", "")]
+ __pattern__ = r'http://(?:www\.)?embedupload\.com/\?d=.*'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True),
+ ("preferedHoster", "str", "Prefered hoster list (bar-separated)", "embedupload"),
+ ("ignoredHoster", "str", "Ignored hoster list (bar-separated)", "")]
__description__ = """EmbedUpload.com decrypter plugin"""
- __authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
+ __license__ = "GPLv3"
+ __authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
LINK_PATTERN = r'<div id="([^"]+)"[^>]*>\s*<a href="([^"]+)" target="_blank" (?:class="DownloadNow"|style="color:red")>'
@@ -29,26 +32,28 @@ class EmbeduploadCom(Crypter):
if m:
prefered_set = set(self.getConfig("preferedHoster").split('|'))
prefered_set = map(lambda s: s.lower().split('.')[0], prefered_set)
- print "PF", prefered_set
+
+ self.logDebug("PF: %s" % prefered_set)
+
tmp_links.extend([x[1] for x in m if x[0] in prefered_set])
self.urls = self.getLocation(tmp_links)
if not self.urls:
ignored_set = set(self.getConfig("ignoredHoster").split('|'))
ignored_set = map(lambda s: s.lower().split('.')[0], ignored_set)
- print "IG", ignored_set
+
+ self.logDebug("IG: %s" % ignored_set)
+
tmp_links.extend([x[1] for x in m if x[0] not in ignored_set])
self.urls = self.getLocation(tmp_links)
- if not self.urls:
- self.fail('Could not extract any links')
def getLocation(self, tmp_links):
new_links = []
for link in tmp_links:
try:
header = self.load(link, just_header=True)
- if "location" in header:
+ if 'location' in header:
new_links.append(header['location'])
except BadHeader:
pass
diff --git a/pyload/plugins/crypter/FilebeerInfoFolder.py b/pyload/plugins/crypter/FilebeerInfoFolder.py
index 0dbd8dc2e..e361b4e1d 100644
--- a/pyload/plugins/crypter/FilebeerInfoFolder.py
+++ b/pyload/plugins/crypter/FilebeerInfoFolder.py
@@ -4,11 +4,13 @@ from pyload.plugins.internal.DeadCrypter import DeadCrypter
class FilebeerInfoFolder(DeadCrypter):
- __name__ = "FilebeerInfoFolder"
- __type__ = "crypter"
+ __name__ = "FilebeerInfoFolder"
+ __type__ = "crypter"
__version__ = "0.02"
__pattern__ = r'http://(?:www\.)?filebeer\.info/(\d+~f).*'
+ __config__ = []
__description__ = """Filebeer.info folder decrypter plugin"""
- __authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
+ __license__ = "GPLv3"
+ __authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
diff --git a/pyload/plugins/crypter/FilecloudIoFolder.py b/pyload/plugins/crypter/FilecloudIoFolder.py
index feb2ccbc6..c470cef03 100644
--- a/pyload/plugins/crypter/FilecloudIoFolder.py
+++ b/pyload/plugins/crypter/FilecloudIoFolder.py
@@ -4,15 +4,18 @@ from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
class FilecloudIoFolder(SimpleCrypter):
- __name__ = "FilecloudIoFolder"
- __type__ = "crypter"
- __version__ = "0.02"
+ __name__ = "FilecloudIoFolder"
+ __type__ = "crypter"
+ __version__ = "0.03"
__pattern__ = r'https?://(?:www\.)?(filecloud\.io|ifile\.it)/_\w+'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Filecloud.io folder decrypter plugin"""
- __authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
+ __license__ = "GPLv3"
+ __authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
- LINK_PATTERN = r'href="(http://filecloud.io/\w+)" title'
- TITLE_PATTERN = r'>(.+?) - filecloud.io<'
+ LINK_PATTERN = r'href="(http://filecloud\.io/\w+)" title'
+ NAME_PATTERN = r'>(?P<N>.+?) - filecloud\.io<'
diff --git a/pyload/plugins/crypter/FilefactoryComFolder.py b/pyload/plugins/crypter/FilefactoryComFolder.py
index 51b2c4533..8fb3efc72 100644
--- a/pyload/plugins/crypter/FilefactoryComFolder.py
+++ b/pyload/plugins/crypter/FilefactoryComFolder.py
@@ -4,21 +4,24 @@ from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
class FilefactoryComFolder(SimpleCrypter):
- __name__ = "FilefactoryComFolder"
- __type__ = "crypter"
- __version__ = "0.3"
+ __name__ = "FilefactoryComFolder"
+ __type__ = "crypter"
+ __version__ = "0.31"
__pattern__ = r'https?://(?:www\.)?filefactory\.com/(?:f|folder)/\w+'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Filefactory.com folder decrypter plugin"""
- __authors__ = [("stickell", "l.stickell@yahoo.it")]
+ __license__ = "GPLv3"
+ __authors__ = [("stickell", "l.stickell@yahoo.it")]
LINK_PATTERN = r'<td><a href="([^"]+)">'
- TITLE_PATTERN = r'<h1>Files in <span>(.+)</span></h1>'
+ NAME_PATTERN = r'<h1>Files in <span>(?P<N>.+)</span></h1>'
PAGES_PATTERN = r'data-paginator-totalPages="(\d+)"'
- COOKIES = [('.filefactory.com', 'locale', 'en_US.utf8')]
+ COOKIES = [(".filefactory.com", "locale", "en_US.utf8")]
def loadPage(self, page_n):
diff --git a/pyload/plugins/crypter/FilerNetFolder.py b/pyload/plugins/crypter/FilerNetFolder.py
index d1c93a5c2..5e43fda91 100644
--- a/pyload/plugins/crypter/FilerNetFolder.py
+++ b/pyload/plugins/crypter/FilerNetFolder.py
@@ -4,19 +4,22 @@ from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
class FilerNetFolder(SimpleCrypter):
- __name__ = "FilerNetFolder"
- __type__ = "crypter"
- __version__ = "0.4"
+ __name__ = "FilerNetFolder"
+ __type__ = "crypter"
+ __version__ = "0.41"
__pattern__ = r'https?://filer\.net/folder/\w{16}'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Filer.net decrypter plugin"""
- __authors__ = [("nath_schwarz", "nathan.notwhite@gmail.com"),
- ("stickell", "l.stickell@yahoo.it")]
+ __license__ = "GPLv3"
+ __authors__ = [("nath_schwarz", "nathan.notwhite@gmail.com"),
+ ("stickell", "l.stickell@yahoo.it")]
LINK_PATTERN = r'href="(/get/\w{16})">(?!<)'
- TITLE_PATTERN = r'<h3>(.+?) - <small'
+ NAME_PATTERN = r'<h3>(?P<N>.+?) - <small'
def getLinks(self):
diff --git a/pyload/plugins/crypter/FileserveComFolder.py b/pyload/plugins/crypter/FileserveComFolder.py
index 23aa3a14a..d601e2365 100644
--- a/pyload/plugins/crypter/FileserveComFolder.py
+++ b/pyload/plugins/crypter/FileserveComFolder.py
@@ -6,14 +6,17 @@ from pyload.plugins.base.Crypter import Crypter
class FileserveComFolder(Crypter):
- __name__ = "FileserveComFolder"
- __type__ = "crypter"
+ __name__ = "FileserveComFolder"
+ __type__ = "crypter"
__version__ = "0.11"
- __pattern__ = r'http://(?:www\.)?fileserve.com/list/\w+'
+ __pattern__ = r'http://(?:www\.)?fileserve\.com/list/\w+'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """FileServe.com folder decrypter plugin"""
- __authors__ = [("fionnc", "fionnc@gmail.com")]
+ __license__ = "GPLv3"
+ __authors__ = [("fionnc", "fionnc@gmail.com")]
FOLDER_PATTERN = r'<table class="file_list">(.*?)</table>'
@@ -25,13 +28,11 @@ class FileserveComFolder(Crypter):
new_links = []
- folder = re.search(self.FOLDER_PATTERN, html, re.DOTALL)
+ folder = re.search(self.FOLDER_PATTERN, html, re.S)
if folder is None:
- self.fail("Parse error (FOLDER)")
+ self.error(_("FOLDER_PATTERN not found"))
new_links.extend(re.findall(self.LINK_PATTERN, folder.group(1)))
if new_links:
self.urls = [map(lambda s: "http://fileserve.com%s" % s, new_links)]
- else:
- self.fail('Could not extract any links')
diff --git a/pyload/plugins/crypter/FilestubeCom.py b/pyload/plugins/crypter/FilestubeCom.py
index 56714f677..5c97bca9e 100644
--- a/pyload/plugins/crypter/FilestubeCom.py
+++ b/pyload/plugins/crypter/FilestubeCom.py
@@ -4,15 +4,18 @@ from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
class FilestubeCom(SimpleCrypter):
- __name__ = "FilestubeCom"
- __type__ = "crypter"
- __version__ = "0.04"
+ __name__ = "FilestubeCom"
+ __type__ = "crypter"
+ __version__ = "0.05"
__pattern__ = r'http://(?:www\.)?filestube\.(?:com|to)/\w+'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Filestube.com decrypter plugin"""
- __authors__ = [("stickell", "l.stickell@yahoo.it")]
+ __license__ = "GPLv3"
+ __authors__ = [("stickell", "l.stickell@yahoo.it")]
LINK_PATTERN = r'<a class=\"file-link-main(?: noref)?\" [^>]* href=\"(http://[^\"]+)'
- TITLE_PATTERN = r'<h1\s*> (.+) download\s*</h1>'
+ NAME_PATTERN = r'<h1\s*> (?P<N>.+) download\s*</h1>'
diff --git a/pyload/plugins/crypter/FiletramCom.py b/pyload/plugins/crypter/FiletramCom.py
index 53c43b6d2..289642494 100644
--- a/pyload/plugins/crypter/FiletramCom.py
+++ b/pyload/plugins/crypter/FiletramCom.py
@@ -4,16 +4,19 @@ from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
class FiletramCom(SimpleCrypter):
- __name__ = "FiletramCom"
- __type__ = "crypter"
- __version__ = "0.02"
+ __name__ = "FiletramCom"
+ __type__ = "crypter"
+ __version__ = "0.03"
- __pattern__ = r'http://(?:www\.)?filetram.com/[^/]+/.+'
+ __pattern__ = r'http://(?:www\.)?filetram\.com/[^/]+/.+'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Filetram.com decrypter plugin"""
- __authors__ = [("igel", "igelkun@myopera.com"),
- ("stickell", "l.stickell@yahoo.it")]
+ __license__ = "GPLv3"
+ __authors__ = [("igel", "igelkun@myopera.com"),
+ ("stickell", "l.stickell@yahoo.it")]
LINK_PATTERN = r'\s+(http://.+)'
- TITLE_PATTERN = r'<title>(.+?) - Free Download'
+ NAME_PATTERN = r'<title>(?P<N>.+?) - Free Download'
diff --git a/pyload/plugins/crypter/FiredriveComFolder.py b/pyload/plugins/crypter/FiredriveComFolder.py
index 4fb572ec3..b6b22a4e1 100644
--- a/pyload/plugins/crypter/FiredriveComFolder.py
+++ b/pyload/plugins/crypter/FiredriveComFolder.py
@@ -1,28 +1,16 @@
# -*- coding: utf-8 -*-
-import re
+from module.plugins.internal.DeadCrypter import DeadCrypter
-from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
-
-class FiredriveComFolder(SimpleCrypter):
- __name__ = "FiredriveComFolder"
- __type__ = "crypter"
- __version__ = "0.02"
+class FiredriveComFolder(DeadCrypter):
+ __name__ = "FiredriveComFolder"
+ __type__ = "crypter"
+ __version__ = "0.03"
__pattern__ = r'https?://(?:www\.)?(firedrive|putlocker)\.com/share/.+'
+ __config__ = []
__description__ = """Firedrive.com folder decrypter plugin"""
- __authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
-
-
- LINK_PATTERN = r'<div class="pf_item pf_(file|folder).+?public=\'(.+?)\''
- TITLE_PATTERN = r'>Shared Folder "(.+)" | Firedrive<'
- OFFLINE_PATTERN = r'class="sad_face_image"|>No such page here.<'
- TEMP_OFFLINE_PATTERN = r'>(File Temporarily Unavailable|Server Error. Try again later)'
-
-
- def getLinks(self):
- return map(lambda x: "http://www.firedrive.com/%s/%s" %
- ("share" if x[0] == "folder" else "file", x[1]),
- re.findall(self.LINK_PATTERN, self.html))
+ __license__ = "GPLv3"
+ __authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
diff --git a/pyload/plugins/crypter/FourChanOrg.py b/pyload/plugins/crypter/FourChanOrg.py
index a6b50387f..c418d20b0 100644
--- a/pyload/plugins/crypter/FourChanOrg.py
+++ b/pyload/plugins/crypter/FourChanOrg.py
@@ -8,14 +8,17 @@ from pyload.plugins.base.Crypter import Crypter
class FourChanOrg(Crypter):
- __name__ = "FourChanOrg"
- __type__ = "crypter"
+ __name__ = "FourChanOrg"
+ __type__ = "crypter"
__version__ = "0.3"
- __pattern__ = r'http://(?:www\.)?boards\.4chan.org/\w+/res/(\d+)'
+ __pattern__ = r'http://(?:www\.)?boards\.4chan\.org/\w+/res/(\d+)'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """4chan.org folder decrypter plugin"""
- __authors__ = []
+ __license__ = "GPLv3"
+ __authors__ = []
def decrypt(self, pyfile):
diff --git a/pyload/plugins/crypter/FreakhareComFolder.py b/pyload/plugins/crypter/FreakhareComFolder.py
index 6cd4e7a7b..f5e31ea42 100644
--- a/pyload/plugins/crypter/FreakhareComFolder.py
+++ b/pyload/plugins/crypter/FreakhareComFolder.py
@@ -6,18 +6,21 @@ from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
class FreakhareComFolder(SimpleCrypter):
- __name__ = "FreakhareComFolder"
- __type__ = "crypter"
- __version__ = "0.02"
+ __name__ = "FreakhareComFolder"
+ __type__ = "crypter"
+ __version__ = "0.03"
__pattern__ = r'http://(?:www\.)?freakshare\.com/folder/.+'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Freakhare.com folder decrypter plugin"""
- __authors__ = [("stickell", "l.stickell@yahoo.it")]
+ __license__ = "GPLv3"
+ __authors__ = [("stickell", "l.stickell@yahoo.it")]
- LINK_PATTERN = r'<a href="(http://freakshare.com/files/[^"]+)" target="_blank">'
- TITLE_PATTERN = r'Folder:</b> (.+)'
+ LINK_PATTERN = r'<a href="(http://freakshare\.com/files/[^"]+)" target="_blank">'
+ NAME_PATTERN = r'Folder:</b> (?P<N>.+)'
PAGES_PATTERN = r'Pages: +(\d+)'
diff --git a/pyload/plugins/crypter/FreetexthostCom.py b/pyload/plugins/crypter/FreetexthostCom.py
index d8dcc5fd8..13cb33f84 100644
--- a/pyload/plugins/crypter/FreetexthostCom.py
+++ b/pyload/plugins/crypter/FreetexthostCom.py
@@ -6,19 +6,22 @@ from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
class FreetexthostCom(SimpleCrypter):
- __name__ = "FreetexthostCom"
- __type__ = "crypter"
+ __name__ = "FreetexthostCom"
+ __type__ = "crypter"
__version__ = "0.01"
__pattern__ = r'http://(?:www\.)?freetexthost\.com/\w+'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Freetexthost.com decrypter plugin"""
- __authors__ = [("stickell", "l.stickell@yahoo.it")]
+ __license__ = "GPLv3"
+ __authors__ = [("stickell", "l.stickell@yahoo.it")]
def getLinks(self):
- m = re.search(r'<div id="contentsinner">\s*(.+)<div class="viewcount">', self.html, re.DOTALL)
+ m = re.search(r'<div id="contentsinner">\s*(.+)<div class="viewcount">', self.html, re.S)
if m is None:
- self.fail('Unable to extract links | Plugin may be out-of-date')
+ self.error(_("Unable to extract links"))
links = m.group(1)
return links.strip().split("<br />\r\n")
diff --git a/pyload/plugins/crypter/FshareVnFolder.py b/pyload/plugins/crypter/FshareVnFolder.py
index a94071f30..0c0a79495 100644
--- a/pyload/plugins/crypter/FshareVnFolder.py
+++ b/pyload/plugins/crypter/FshareVnFolder.py
@@ -4,14 +4,17 @@ from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
class FshareVnFolder(SimpleCrypter):
- __name__ = "FshareVnFolder"
- __type__ = "crypter"
+ __name__ = "FshareVnFolder"
+ __type__ = "crypter"
__version__ = "0.01"
- __pattern__ = r'http://(?:www\.)?fshare.vn/folder/.*'
+ __pattern__ = r'http://(?:www\.)?fshare\.vn/folder/.*'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Fshare.vn folder decrypter plugin"""
- __authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
+ __license__ = "GPLv3"
+ __authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
LINK_PATTERN = r'<li class="w_80pc"><a href="([^"]+)" target="_blank">'
diff --git a/pyload/plugins/crypter/GooGl.py b/pyload/plugins/crypter/GooGl.py
index 8c3c2c9d8..b3e55688e 100644
--- a/pyload/plugins/crypter/GooGl.py
+++ b/pyload/plugins/crypter/GooGl.py
@@ -5,14 +5,17 @@ from pyload.utils import json_loads
class GooGl(Crypter):
- __name__ = "GooGl"
- __type__ = "crypter"
+ __name__ = "GooGl"
+ __type__ = "crypter"
__version__ = "0.01"
__pattern__ = r'https?://(?:www\.)?goo\.gl/\w+'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Goo.gl decrypter plugin"""
- __authors__ = [("stickell", "l.stickell@yahoo.it")]
+ __license__ = "GPLv3"
+ __authors__ = [("stickell", "l.stickell@yahoo.it")]
API_URL = "https://www.googleapis.com/urlshortener/v1/url"
@@ -26,4 +29,4 @@ class GooGl(Crypter):
if 'longUrl' in rep:
self.urls = [rep['longUrl']]
else:
- self.fail('Unable to expand shortened link')
+ self.fail(_("Unable to expand shortened link"))
diff --git a/pyload/plugins/crypter/HoerbuchIn.py b/pyload/plugins/crypter/HoerbuchIn.py
index 4c2852567..f8185275a 100644
--- a/pyload/plugins/crypter/HoerbuchIn.py
+++ b/pyload/plugins/crypter/HoerbuchIn.py
@@ -8,15 +8,18 @@ from pyload.plugins.base.Crypter import Crypter
class HoerbuchIn(Crypter):
- __name__ = "HoerbuchIn"
- __type__ = "crypter"
+ __name__ = "HoerbuchIn"
+ __type__ = "crypter"
__version__ = "0.6"
- __pattern__ = r'http://(?:www\.)?hoerbuch\.in/(wp/horbucher/\d+/.+/|tp/out.php\?.+|protection/folder_\d+\.html)'
+ __pattern__ = r'http://(?:www\.)?hoerbuch\.in/(wp/horbucher/\d+/.+/|tp/out\.php\?.+|protection/folder_\d+\.html)'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Hoerbuch.in decrypter plugin"""
- __authors__ = [("spoob", "spoob@pyload.org"),
- ("mkaay", "mkaay@mkaay.de")]
+ __license__ = "GPLv3"
+ __authors__ = [("spoob", "spoob@pyload.org"),
+ ("mkaay", "mkaay@mkaay.de")]
article = re.compile("http://(?:www\.)?hoerbuch\.in/wp/horbucher/\d+/.+/")
@@ -27,8 +30,8 @@ class HoerbuchIn(Crypter):
self.pyfile = pyfile
if self.article.match(pyfile.url):
- src = self.load(pyfile.url)
- soup = BeautifulSoup(src, convertEntities=BeautifulStoneSoup.HTML_ENTITIES)
+ html = self.load(pyfile.url)
+ soup = BeautifulSoup(html, convertEntities=BeautifulStoneSoup.HTML_ENTITIES)
abookname = soup.find("a", attrs={"rel": "bookmark"}).text
for a in soup.findAll("a", attrs={"href": self.protection}):
@@ -39,18 +42,19 @@ class HoerbuchIn(Crypter):
else:
self.urls = self.decryptFolder(pyfile.url)
+
def decryptFolder(self, url):
m = self.protection.search(url)
if m is None:
- self.fail("Bad URL")
+ self.fail(_("Bad URL"))
url = m.group(0)
self.pyfile.url = url
- src = self.load(url, post={"viewed": "adpg"})
+ html = self.load(url, post={"viewed": "adpg"})
links = []
pattern = re.compile("http://www\.hoerbuch\.in/protection/(\w+)/(.*?)\"")
- for hoster, lid in pattern.findall(src):
+ for hoster, lid in pattern.findall(html):
self.req.lastURL = url
self.load("http://www.hoerbuch.in/protection/%s/%s" % (hoster, lid))
links.append(self.req.lastEffectiveURL)
diff --git a/pyload/plugins/crypter/HotfileFolderCom.py b/pyload/plugins/crypter/HotfileFolderCom.py
deleted file mode 100644
index 8c9b5a0da..000000000
--- a/pyload/plugins/crypter/HotfileFolderCom.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from pyload.plugins.internal.DeadCrypter import DeadCrypter
-
-
-class HotfileFolderCom(DeadCrypter):
- __name__ = "HotfileFolderCom"
- __type__ = "crypter"
- __version__ = "0.3"
-
- __pattern__ = r'https?://(?:www\.)?hotfile\.com/list/\w+/\w+'
-
- __description__ = """Hotfile.com folder decrypter plugin"""
- __authors__ = [("RaNaN", "RaNaN@pyload.org")]
diff --git a/pyload/plugins/crypter/ILoadTo.py b/pyload/plugins/crypter/ILoadTo.py
index 6f4f98fe4..e04e43a00 100644
--- a/pyload/plugins/crypter/ILoadTo.py
+++ b/pyload/plugins/crypter/ILoadTo.py
@@ -4,11 +4,13 @@ from pyload.plugins.internal.DeadCrypter import DeadCrypter
class ILoadTo(DeadCrypter):
- __name__ = "ILoadTo"
- __type__ = "crypter"
+ __name__ = "ILoadTo"
+ __type__ = "crypter"
__version__ = "0.11"
- __pattern__ = r'http://(?:www\.)?iload\.to/go/\d+-[\w\.-]+/'
+ __pattern__ = r'http://(?:www\.)?iload\.to/go/\d+-[\w.-]+/'
+ __config__ = []
__description__ = """Iload.to decrypter plugin"""
- __authors__ = [("hzpz", None)]
+ __license__ = "GPLv3"
+ __authors__ = [("hzpz", None)]
diff --git a/pyload/plugins/crypter/ImgurComAlbum.py b/pyload/plugins/crypter/ImgurComAlbum.py
index 417a36837..1dc717ca9 100644
--- a/pyload/plugins/crypter/ImgurComAlbum.py
+++ b/pyload/plugins/crypter/ImgurComAlbum.py
@@ -5,17 +5,20 @@ from pyload.utils import uniqify
class ImgurComAlbum(SimpleCrypter):
- __name__ = "ImgurComAlbum"
- __type__ = "crypter"
- __version__ = "0.5"
+ __name__ = "ImgurComAlbum"
+ __type__ = "crypter"
+ __version__ = "0.51"
__pattern__ = r'https?://(?:www\.|m\.)?imgur\.com/(a|gallery|)/?\w{5,7}'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Imgur.com decrypter plugin"""
- __authors__ = [("nath_schwarz", "nathan.notwhite@gmail.com")]
+ __license__ = "GPLv3"
+ __authors__ = [("nath_schwarz", "nathan.notwhite@gmail.com")]
- TITLE_PATTERN = r'(.+?) - Imgur'
+ NAME_PATTERN = r'(?P<N>.+?) - Imgur'
LINK_PATTERN = r'i\.imgur\.com/\w{7}s?\.(?:jpeg|jpg|png|gif|apng)'
diff --git a/pyload/plugins/crypter/LetitbitNetFolder.py b/pyload/plugins/crypter/LetitbitNetFolder.py
index b40e3ed8c..b2e1d7f7b 100644
--- a/pyload/plugins/crypter/LetitbitNetFolder.py
+++ b/pyload/plugins/crypter/LetitbitNetFolder.py
@@ -5,15 +5,18 @@ from pyload.plugins.base.Crypter import Crypter
class LetitbitNetFolder(Crypter):
- __name__ = "LetitbitNetFolder"
- __type__ = "crypter"
+ __name__ = "LetitbitNetFolder"
+ __type__ = "crypter"
__version__ = "0.1"
- __pattern__ = r'http://(?:www\.)?letitbit.net/folder/\w+'
+ __pattern__ = r'http://(?:www\.)?letitbit\.net/folder/\w+'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Letitbit.net folder decrypter plugin"""
- __authors__ = [("DHMH", "webmaster@pcProfil.de"),
- ("z00nx", "z00nx0@gmail.com")]
+ __license__ = "GPLv3"
+ __authors__ = [("DHMH", "webmaster@pcProfil.de"),
+ ("z00nx", "z00nx0@gmail.com")]
FOLDER_PATTERN = r'<table>(.*)</table>'
@@ -23,11 +26,8 @@ class LetitbitNetFolder(Crypter):
def decrypt(self, pyfile):
html = self.load(pyfile.url)
- folder = re.search(self.FOLDER_PATTERN, html, re.DOTALL)
+ folder = re.search(self.FOLDER_PATTERN, html, re.S)
if folder is None:
- self.fail("Parse error (FOLDER)")
+ self.error(_("FOLDER_PATTERN not found"))
self.urls.extend(re.findall(self.LINK_PATTERN, folder.group(0)))
-
- if not self.urls:
- self.fail('Could not extract any links')
diff --git a/pyload/plugins/crypter/LinkSaveIn.py b/pyload/plugins/crypter/LinkSaveIn.py
index ad9468ae6..d6ad6abb7 100644
--- a/pyload/plugins/crypter/LinkSaveIn.py
+++ b/pyload/plugins/crypter/LinkSaveIn.py
@@ -9,19 +9,22 @@ import re
from Crypto.Cipher import AES
-from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+from module.plugins.internal.SimpleCrypter import SimpleCrypter
from pyload.utils import html_unescape
class LinkSaveIn(SimpleCrypter):
- __name__ = "LinkSaveIn"
- __type__ = "crypter"
+ __name__ = "LinkSaveIn"
+ __type__ = "crypter"
__version__ = "2.02"
- __pattern__ = r'http://(?:www\.)?linksave.in/(?P<id>\w+)$'
+ __pattern__ = r'http://(?:www\.)?linksave\.in/(?P<id>\w+)$'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """LinkSave.in decrypter plugin"""
- __authors__ = [("fragonib", "fragonib[AT]yahoo[DOT]es")]
+ __license__ = "GPLv3"
+ __authors__ = [("fragonib", "fragonib[AT]yahoo[DOT]es")]
COOKIES = [(".linksave.in", "Linksave_Language", "english")]
@@ -32,7 +35,6 @@ class LinkSaveIn(SimpleCrypter):
def setup(self):
- self.html = None
self.fileid = None
self.captcha = False
self.package = None
@@ -73,8 +75,6 @@ class LinkSaveIn(SimpleCrypter):
# Pack
if package_links:
self.packages = [(package_name, package_links, folder_name)]
- else:
- self.fail('Could not extract any links')
def isOnline(self):
@@ -121,11 +121,10 @@ class LinkSaveIn(SimpleCrypter):
def handleErrors(self):
if "The visitorpassword you have entered is wrong" in self.html:
self.logDebug("Incorrect password, please set right password on 'Edit package' form and retry")
- self.fail("Incorrect password, please set right password on 'Edit package' form and retry")
+ self.fail(_("Incorrect password, please set right password on 'Edit package' form and retry"))
if self.captcha:
if "Wrong code. Please retry" in self.html:
- self.logDebug("Invalid captcha, retrying")
self.invalidCaptcha()
self.retry()
else:
@@ -140,7 +139,7 @@ class LinkSaveIn(SimpleCrypter):
elif type_ == "web":
return self.handleWebLinks()
else:
- self.fail('unknown source type "%s" (this is probably a bug)' % type_)
+ self.error('Unknown source type "%s" (this is probably a bug)' % type_)
def handleWebLinks(self):
@@ -156,18 +155,25 @@ class LinkSaveIn(SimpleCrypter):
for i, weblink_id in enumerate(ids):
try:
webLink = "http://linksave.in/%s" % weblink_id
+
self.logDebug("Decrypting Web link %d, %s" % (i + 1, webLink))
+
fwLink = "http://linksave.in/fw-%s" % weblink_id
- response = self.load(fwLink)
- jscode = re.findall(r'<script type="text/javascript">(.*)</script>', response)[-1]
+ res = self.load(fwLink)
+
+ jscode = re.findall(r'<script type="text/javascript">(.*)</script>', res)[-1]
jseval = self.js.eval("document = { write: function(e) { return e; } }; %s" % jscode)
dlLink = re.search(r'http://linksave\.in/dl-\w+', jseval).group(0)
self.logDebug("JsEngine returns value [%s] for redirection link" % dlLink)
- response = self.load(dlLink)
- link = html_unescape(re.search(r'<iframe src="(.+?)"', response).group(1))
+
+ res = self.load(dlLink)
+ link = html_unescape(re.search(r'<iframe src="(.+?)"', res).group(1))
+
package_links.append(link)
+
except Exception, detail:
self.logDebug("Error decrypting Web link %s, %s" % (webLink, detail))
+
return package_links
@@ -176,8 +182,8 @@ class LinkSaveIn(SimpleCrypter):
type_ = type_.lower()
self.logDebug("Seach for %s Container links" % type_.upper())
if not type_.isalnum(): # check to prevent broken re-pattern (cnl2,rsdf,ccf,dlc,web are all alpha-numeric)
- self.fail('unknown container type "%s" (this is probably a bug)' % type_)
- pattern = r"\('%s_link'\).href=unescape\('(.*?\.%s)'\)" % (type_, type_)
+ self.error('Unknown container type "%s" (this is probably a bug)' % type_)
+ pattern = r'\(\'%s_link\'\).href=unescape\(\'(.*?\.%s)\'\)' % (type_, type_)
containersLinks = re.findall(pattern, self.html)
self.logDebug("Found %d %s Container links" % (len(containersLinks), type_.upper()))
for containerLink in containersLinks:
@@ -197,7 +203,7 @@ class LinkSaveIn(SimpleCrypter):
for (crypted, jk) in zip(vcrypted, vjk):
package_links.extend(self._getLinks(crypted, jk))
except:
- self.fail("Unable to decrypt CNL2 links")
+ self.fail(_("Unable to decrypt CNL2 links"))
return package_links
diff --git a/pyload/plugins/crypter/LinkdecrypterCom.py b/pyload/plugins/crypter/LinkdecrypterCom.py
index 1573bd8c9..9c0d364e6 100644
--- a/pyload/plugins/crypter/LinkdecrypterCom.py
+++ b/pyload/plugins/crypter/LinkdecrypterCom.py
@@ -5,15 +5,18 @@ from pyload.plugins.base.Crypter import Crypter
class LinkdecrypterCom(Crypter):
- __name__ = "LinkdecrypterCom"
- __type__ = "crypter"
+ __name__ = "LinkdecrypterCom"
+ __type__ = "crypter"
__version__ = "0.27"
- __pattern__ = None
+ __pattern__ = r'^unmatchable$'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Linkdecrypter.com"""
- __authors__ = [("zoidberg", "zoidberg@mujmail.cz"),
- ("flowlee", None)]
+ __license__ = "GPLv3"
+ __authors__ = [("zoidberg", "zoidberg@mujmail.cz"),
+ ("flowlee", None)]
TEXTAREA_PATTERN = r'<textarea name="links" wrap="off" readonly="1" class="caja_des">(.+)</textarea>'
@@ -23,16 +26,13 @@ class LinkdecrypterCom(Crypter):
def decrypt(self, pyfile):
-
self.passwords = self.getPassword().splitlines()
# API not working anymore
self.urls = self.decryptHTML()
- if not self.urls:
- self.fail('Could not extract any links')
- def decryptAPI(self):
+ def decryptAPI(self):
get_dict = {"t": "link", "url": self.pyfile.url, "lcache": "1"}
self.html = self.load('http://linkdecrypter.com/api', get=get_dict)
if self.html.startswith('http://'):
@@ -46,19 +46,19 @@ class LinkdecrypterCom(Crypter):
self.logError("API", self.html)
if self.html == 'INTERRUPTION(PASSWORD)':
- self.fail("No or incorrect password")
+ self.fail(_("No or incorrect password"))
return None
- def decryptHTML(self):
+ def decryptHTML(self):
retries = 5
post_dict = {"link_cache": "on", "pro_links": self.pyfile.url, "modo_links": "text"}
self.html = self.load('http://linkdecrypter.com/', post=post_dict, cookies=True, decode=True)
while self.passwords or retries:
- m = re.search(self.TEXTAREA_PATTERN, self.html, flags=re.DOTALL)
+ m = re.search(self.TEXTAREA_PATTERN, self.html, flags=re.S)
if m:
return [x for x in m.group(1).splitlines() if '[LINK-ERROR]' not in x]
@@ -69,7 +69,7 @@ class LinkdecrypterCom(Crypter):
m = re.search(r"<p><i><b>([^<]+)</b></i></p>", self.html)
msg = m.group(1) if m else ""
- self.logInfo("Captcha protected link", result_type, msg)
+ self.logInfo(_("Captcha protected link"), result_type, msg)
captcha = self.decryptCaptcha(captcha_url, result_type=result_type)
if result_type == "positional":
@@ -80,10 +80,10 @@ class LinkdecrypterCom(Crypter):
elif self.PASSWORD_PATTERN in self.html:
if self.passwords:
password = self.passwords.pop(0)
- self.logInfo("Password protected link, trying " + password)
+ self.logInfo(_("Password protected link, trying ") + password)
self.html = self.load('http://linkdecrypter.com/', post={'password': password}, decode=True)
else:
- self.fail("No or incorrect password")
+ self.fail(_("No or incorrect password"))
else:
retries -= 1
diff --git a/pyload/plugins/crypter/LixIn.py b/pyload/plugins/crypter/LixIn.py
index 2f1331833..6d0494c57 100644
--- a/pyload/plugins/crypter/LixIn.py
+++ b/pyload/plugins/crypter/LixIn.py
@@ -6,18 +6,21 @@ from pyload.plugins.base.Crypter import Crypter
class LixIn(Crypter):
- __name__ = "LixIn"
- __type__ = "crypter"
+ __name__ = "LixIn"
+ __type__ = "crypter"
__version__ = "0.22"
__pattern__ = r'http://(?:www\.)?lix\.in/(?P<ID>.+)'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Lix.in decrypter plugin"""
- __authors__ = [("spoob", "spoob@pyload.org")]
+ __license__ = "GPLv3"
+ __authors__ = [("spoob", "spoob@pyload.org")]
- CAPTCHA_PATTERN = r'<img src="(?P<image>captcha_img.php\?.*?)"'
- SUBMIT_PATTERN = r"value='continue.*?'"
+ CAPTCHA_PATTERN = r'<img src="(?P<image>captcha_img\.php\?.*?)"'
+ SUBMIT_PATTERN = r'value=\'continue.*?\''
LINK_PATTERN = r'name="ifram" src="(?P<link>.*?)"'
@@ -26,7 +29,7 @@ class LixIn(Crypter):
m = re.match(self.__pattern__, url)
if m is None:
- self.fail("couldn't identify file id")
+ self.error(_("Unable to identify file ID"))
id = m.group("ID")
self.logDebug("File id is %s" % id)
@@ -35,11 +38,11 @@ class LixIn(Crypter):
m = re.search(self.SUBMIT_PATTERN, self.html)
if m is None:
- self.fail("link doesn't seem valid")
+ self.error(_("Link doesn't seem valid"))
m = re.search(self.CAPTCHA_PATTERN, self.html)
if m:
- for _ in xrange(5):
+ for _i in xrange(5):
m = re.search(self.CAPTCHA_PATTERN, self.html)
if m:
self.logDebug("Trying captcha")
@@ -53,7 +56,7 @@ class LixIn(Crypter):
m = re.search(self.LINK_PATTERN, self.html)
if m is None:
- self.fail("can't find destination url")
+ self.error(_("Unable to find destination url"))
else:
self.urls = [m.group("link")]
self.logDebug("Found link %s, adding to package" % self.urls[0])
diff --git a/pyload/plugins/crypter/LofCc.py b/pyload/plugins/crypter/LofCc.py
index 24950cab4..955ae56d7 100644
--- a/pyload/plugins/crypter/LofCc.py
+++ b/pyload/plugins/crypter/LofCc.py
@@ -4,11 +4,13 @@ from pyload.plugins.internal.DeadCrypter import DeadCrypter
class LofCc(DeadCrypter):
- __name__ = "LofCc"
- __type__ = "crypter"
+ __name__ = "LofCc"
+ __type__ = "crypter"
__version__ = "0.21"
- __pattern__ = r'http://(?:www\.)?lof.cc/(.*)'
+ __pattern__ = r'http://(?:www\.)?lof\.cc/(.*)'
+ __config__ = []
__description__ = """Lof.cc decrypter plugin"""
- __authors__ = [("mkaay", "mkaay@mkaay.de")]
+ __license__ = "GPLv3"
+ __authors__ = [("mkaay", "mkaay@mkaay.de")]
diff --git a/pyload/plugins/crypter/MBLinkInfo.py b/pyload/plugins/crypter/MBLinkInfo.py
index 9e63bc05d..98d4c09e6 100644
--- a/pyload/plugins/crypter/MBLinkInfo.py
+++ b/pyload/plugins/crypter/MBLinkInfo.py
@@ -4,12 +4,14 @@ from pyload.plugins.internal.DeadCrypter import DeadCrypter
class MBLinkInfo(DeadCrypter):
- __name__ = "MBLinkInfo"
- __type__ = "crypter"
+ __name__ = "MBLinkInfo"
+ __type__ = "crypter"
__version__ = "0.03"
__pattern__ = r'http://(?:www\.)?mblink\.info/?\?id=(\d+)'
+ __config__ = []
__description__ = """MBLink.info decrypter plugin"""
- __authors__ = [("Gummibaer", "Gummibaer@wiki-bierkiste.de"),
- ("stickell", "l.stickell@yahoo.it")]
+ __license__ = "GPLv3"
+ __authors__ = [("Gummibaer", "Gummibaer@wiki-bierkiste.de"),
+ ("stickell", "l.stickell@yahoo.it")]
diff --git a/pyload/plugins/crypter/MediafireComFolder.py b/pyload/plugins/crypter/MediafireComFolder.py
index f5f6389ef..43f87b821 100644
--- a/pyload/plugins/crypter/MediafireComFolder.py
+++ b/pyload/plugins/crypter/MediafireComFolder.py
@@ -7,18 +7,21 @@ from pyload.utils import json_loads
class MediafireComFolder(Crypter):
- __name__ = "MediafireComFolder"
- __type__ = "crypter"
+ __name__ = "MediafireComFolder"
+ __type__ = "crypter"
__version__ = "0.14"
__pattern__ = r'http://(?:www\.)?mediafire\.com/(folder/|\?sharekey=|\?\w{13}($|[/#]))'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Mediafire.com folder decrypter plugin"""
- __authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
+ __license__ = "GPLv3"
+ __authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
- FOLDER_KEY_PATTERN = r"var afI= '(\w+)';"
- FILE_URL_PATTERN = r'<meta property="og:url" content="http://www.mediafire.com/\?(\w+)"/>'
+ FOLDER_KEY_PATTERN = r'var afI= \'(\w+)'
+ LINK_PATTERN = r'<meta property="og:url" content="http://www\.mediafire\.com/\?(\w+)"/>'
def decrypt(self, pyfile):
@@ -28,7 +31,7 @@ class MediafireComFolder(Crypter):
if result == 0:
# load and parse html
html = self.load(pyfile.url)
- m = re.search(self.FILE_URL_PATTERN, html)
+ m = re.search(self.LINK_PATTERN, html)
if m:
# file page
self.urls.append("http://www.mediafire.com/file/%s" % m.group(1))
@@ -51,6 +54,3 @@ class MediafireComFolder(Crypter):
self.offline()
else:
self.urls.append(url)
-
- if not self.urls:
- self.fail('Could not extract any links')
diff --git a/pyload/plugins/crypter/Movie2kTo.py b/pyload/plugins/crypter/Movie2kTo.py
index 80ef4f871..bb00e2eed 100644
--- a/pyload/plugins/crypter/Movie2kTo.py
+++ b/pyload/plugins/crypter/Movie2kTo.py
@@ -4,11 +4,13 @@ from pyload.plugins.internal.DeadCrypter import DeadCrypter
class Movie2kTo(DeadCrypter):
- __name__ = "Movie2kTo"
- __type__ = "crypter"
+ __name__ = "Movie2kTo"
+ __type__ = "crypter"
__version__ = "0.51"
__pattern__ = r'http://(?:www\.)?movie2k\.to/(.*)\.html'
+ __config__ = []
__description__ = """Movie2k.to decrypter plugin"""
- __authors__ = [("4Christopher", "4Christopher@gmx.de")]
+ __license__ = "GPLv3"
+ __authors__ = [("4Christopher", "4Christopher@gmx.de")]
diff --git a/pyload/plugins/crypter/MultiUpOrg.py b/pyload/plugins/crypter/MultiUpOrg.py
index 86dbb339f..81e204c72 100644
--- a/pyload/plugins/crypter/MultiUpOrg.py
+++ b/pyload/plugins/crypter/MultiUpOrg.py
@@ -7,17 +7,20 @@ from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
class MultiUpOrg(SimpleCrypter):
- __name__ = "MultiUpOrg"
- __type__ = "crypter"
- __version__ = "0.02"
+ __name__ = "MultiUpOrg"
+ __type__ = "crypter"
+ __version__ = "0.03"
__pattern__ = r'http://(?:www\.)?multiup\.org/(en|fr)/(?P<TYPE>project|download|miror)/\w+(/\w+)?'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """MultiUp.org crypter plugin"""
- __authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
+ __license__ = "GPLv3"
+ __authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
- TITLE_PATTERN = r'<title>.*(?:Project|Projet|ownload|élécharger) (.+?) (?:\(|- )'
+ NAME_PATTERN = r'<title>.*(?:Project|Projet|ownload|élécharger) (?P<N>.+?) (\(|- )'
def getLinks(self):
diff --git a/pyload/plugins/crypter/MultiloadCz.py b/pyload/plugins/crypter/MultiloadCz.py
index 7dd9dabc6..e233dce99 100644
--- a/pyload/plugins/crypter/MultiloadCz.py
+++ b/pyload/plugins/crypter/MultiloadCz.py
@@ -5,16 +5,19 @@ from pyload.plugins.base.Crypter import Crypter
class MultiloadCz(Crypter):
- __name__ = "MultiloadCz"
- __type__ = "crypter"
+ __name__ = "MultiloadCz"
+ __type__ = "crypter"
__version__ = "0.4"
- __pattern__ = r'http://(?:[^/]*\.)?multiload.cz/(stahnout|slozka)/.*'
- __config__ = [("usedHoster", "str", "Prefered hoster list (bar-separated) ", ""),
- ("ignoredHoster", "str", "Ignored hoster list (bar-separated) ", "")]
+ __pattern__ = r'http://(?:[^/]*\.)?multiload\.cz/(stahnout|slozka)/.*'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True),
+ ("usedHoster", "str", "Prefered hoster list (bar-separated)", ""),
+ ("ignoredHoster", "str", "Ignored hoster list (bar-separated)", "")]
__description__ = """Multiload.cz decrypter plugin"""
- __authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
+ __license__ = "GPLv3"
+ __authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
FOLDER_PATTERN = r'<form action="" method="get"><textarea[^>]*>([^>]*)</textarea></form>'
@@ -37,6 +40,3 @@ class MultiloadCz(Crypter):
if not self.urls:
ignored_set = set(self.getConfig("ignoredHoster").split('|'))
self.urls.extend([x[1] for x in m if x[0] not in ignored_set])
-
- if not self.urls:
- self.fail('Could not extract any links')
diff --git a/pyload/plugins/crypter/MultiuploadCom.py b/pyload/plugins/crypter/MultiuploadCom.py
index ee2bb277a..61295bc85 100644
--- a/pyload/plugins/crypter/MultiuploadCom.py
+++ b/pyload/plugins/crypter/MultiuploadCom.py
@@ -4,11 +4,12 @@ from pyload.plugins.internal.DeadCrypter import DeadCrypter
class MultiuploadCom(DeadCrypter):
- __name__ = "MultiuploadCom"
- __type__ = "crypter"
+ __name__ = "MultiuploadCom"
+ __type__ = "crypter"
__version__ = "0.02"
__pattern__ = r'http://(?:www\.)?multiupload\.(com|nl)/\w+'
- __description__ = """MultiUpload.com decrypter plugin"""
- __authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
+ __description__ = """ MultiUpload.com decrypter plugin """
+ __license__ = "GPLv3"
+ __authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
diff --git a/pyload/plugins/crypter/NCryptIn.py b/pyload/plugins/crypter/NCryptIn.py
index 287cbb87f..28eb40a63 100644
--- a/pyload/plugins/crypter/NCryptIn.py
+++ b/pyload/plugins/crypter/NCryptIn.py
@@ -11,15 +11,18 @@ from pyload.plugins.internal.CaptchaService import ReCaptcha
class NCryptIn(Crypter):
- __name__ = "NCryptIn"
- __type__ = "crypter"
- __version__ = "1.32"
+ __name__ = "NCryptIn"
+ __type__ = "crypter"
+ __version__ = "1.33"
- __pattern__ = r'http://(?:www\.)?ncrypt.in/(?P<type>folder|link|frame)-([^/\?]+)'
+ __pattern__ = r'http://(?:www\.)?ncrypt\.in/(?P<type>folder|link|frame)-([^/\?]+)'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """NCrypt.in decrypter plugin"""
- __authors__ = [("fragonib", "fragonib[AT]yahoo[DOT]es"),
- ("stickell", "l.stickell@yahoo.it")]
+ __license__ = "GPLv3"
+ __authors__ = [("fragonib", "fragonib[AT]yahoo[DOT]es"),
+ ("stickell", "l.stickell@yahoo.it")]
JK_KEY = "jk"
@@ -30,11 +33,11 @@ class NCryptIn(Crypter):
def setup(self):
self.package = None
- self.html = None
self.cleanedHtml = None
self.links_source_order = ["cnl2", "rsdf", "ccf", "dlc", "web"]
self.protection_type = None
+
def decrypt(self, pyfile):
# Init
self.package = pyfile.package()
@@ -72,17 +75,19 @@ class NCryptIn(Crypter):
package_links = set(package_links)
# Pack and return links
- if not package_links:
- self.fail('Could not extract any links')
- self.packages = [(package_name, package_links, folder_name)]
+ if package_links:
+ self.packages = [(package_name, package_links, folder_name)]
+
def isSingleLink(self):
link_type = re.match(self.__pattern__, self.pyfile.url).group('type')
return link_type in ("link", "frame")
+
def requestFolderHome(self):
return self.load(self.pyfile.url, decode=True)
+
def removeHtmlCrap(self, content):
patterns = (r'(type="hidden".*?(name=".*?")?.*?value=".*?")',
r'display:none;">(.*?)</(div|span)>',
@@ -90,18 +95,20 @@ class NCryptIn(Crypter):
r'<table class="global">(.*?)</table>',
r'<iframe\s+style="display:none(.*?)</iframe>')
for pattern in patterns:
- rexpr = re.compile(pattern, re.DOTALL)
+ rexpr = re.compile(pattern, re.S)
content = re.sub(rexpr, "", content)
return content
+
def isOnline(self):
if "Your folder does not exist" in self.cleanedHtml:
self.logDebug("File not m")
return False
return True
+
def isProtected(self):
- form = re.search(r'<form.*?name.*?protected.*?>(.*?)</form>', self.cleanedHtml, re.DOTALL)
+ form = re.search(r'<form.*?name.*?protected.*?>(.*?)</form>', self.cleanedHtml, re.S)
if form is not None:
content = form.group(1)
for keyword in ("password", "captcha"):
@@ -111,6 +118,7 @@ class NCryptIn(Crypter):
return True
return False
+
def getPackageInfo(self):
m = re.search(self.NAME_PATTERN, self.html)
if m:
@@ -122,11 +130,11 @@ class NCryptIn(Crypter):
self.logDebug("Package info not m, defaulting to pyfile name [%s] and folder [%s]" % (name, folder))
return name, folder
- def unlockProtection(self):
+ def unlockProtection(self):
postData = {}
- form = re.search(r'<form name="protected"(.*?)</form>', self.cleanedHtml, re.DOTALL).group(1)
+ form = re.search(r'<form name="protected"(.*?)</form>', self.cleanedHtml, re.S).group(1)
# Submit package password
if "password" in form:
@@ -157,7 +165,7 @@ class NCryptIn(Crypter):
self.logDebug("CircleCaptcha protected")
captcha_img_url = "http://ncrypt.in/classes/captcha/circlecaptcha.php"
coords = self.decryptCaptcha(captcha_img_url, forceUser=True, imgtype="png", result_type='positional')
- self.logDebug("Captcha resolved, coords [%s]" % coords)
+ self.logDebug("Captcha resolved, coords [%s]" % str(coords))
postData['circle.x'] = coords[0]
postData['circle.y'] = coords[1]
@@ -165,20 +173,21 @@ class NCryptIn(Crypter):
postData['submit_protected'] = 'Continue to folder'
return self.load(self.pyfile.url, post=postData, decode=True)
+
def handleErrors(self):
if self.protection_type == "password":
if "This password is invalid!" in self.cleanedHtml:
self.logDebug("Incorrect password, please set right password on 'Edit package' form and retry")
- self.fail("Incorrect password, please set right password on 'Edit package' form and retry")
+ self.fail(_("Incorrect password, please set right password on 'Edit package' form and retry"))
if self.protection_type == "captcha":
if "The securitycheck was wrong!" in self.cleanedHtml:
- self.logDebug("Invalid captcha, retrying")
self.invalidCaptcha()
self.retry()
else:
self.correctCaptcha()
+
def handleLinkSource(self, link_source_type):
# Check for JS engine
require_js_engine = link_source_type in ("cnl2", "rsdf", "ccf", "dlc")
@@ -196,10 +205,10 @@ class NCryptIn(Crypter):
elif link_source_type == "web":
return self.handleWebLinks()
else:
- self.fail('unknown source type "%s" (this is probably a bug)' % link_source_type)
+ self.error('Unknown source type "%s" (this is probably a bug)' % link_source_type)
- def handleSingleLink(self):
+ def handleSingleLink(self):
self.logDebug("Handling Single link")
package_links = []
@@ -210,8 +219,8 @@ class NCryptIn(Crypter):
return package_links
- def handleCNL2(self):
+ def handleCNL2(self):
self.logDebug("Handling CNL2 links")
package_links = []
@@ -221,16 +230,16 @@ class NCryptIn(Crypter):
for (crypted, jk) in zip(vcrypted, vjk):
package_links.extend(self._getLinks(crypted, jk))
except:
- self.fail("Unable to decrypt CNL2 links")
+ self.fail(_("Unable to decrypt CNL2 links"))
return package_links
- def handleContainers(self):
+ def handleContainers(self):
self.logDebug("Handling Container links")
package_links = []
- pattern = r"/container/(rsdf|dlc|ccf)/([a-z0-9]+)"
+ pattern = r'/container/(rsdf|dlc|ccf)/(\w+)'
containersLinks = re.findall(pattern, self.html)
self.logDebug("Decrypting %d Container links" % len(containersLinks))
for containerLink in containersLinks:
@@ -239,10 +248,10 @@ class NCryptIn(Crypter):
return package_links
- def handleWebLinks(self):
+ def handleWebLinks(self):
self.logDebug("Handling Web links")
- pattern = r"(http://ncrypt\.in/link-.*?=)"
+ pattern = r'(http://ncrypt\.in/link-.*?=)'
links = re.findall(pattern, self.html)
package_links = []
@@ -255,6 +264,7 @@ class NCryptIn(Crypter):
return package_links
+
def decryptLink(self, link):
try:
url = link.replace("link-", "frame-")
@@ -263,8 +273,8 @@ class NCryptIn(Crypter):
except Exception, detail:
self.logDebug("Error decrypting link %s, %s" % (link, detail))
- def _getCipherParams(self):
+ def _getCipherParams(self):
pattern = r'<input.*?name="%s".*?value="(.*?)"'
# Get jk
@@ -279,6 +289,7 @@ class NCryptIn(Crypter):
self.logDebug("Detected %d crypted blocks" % len(vcrypted))
return vcrypted, vjk
+
def _getLinks(self, crypted, jk):
# Get key
jreturn = self.js.eval("%s f()" % jk)
diff --git a/pyload/plugins/crypter/NetfolderIn.py b/pyload/plugins/crypter/NetfolderIn.py
index 8bc41ddeb..bba72c047 100644
--- a/pyload/plugins/crypter/NetfolderIn.py
+++ b/pyload/plugins/crypter/NetfolderIn.py
@@ -6,38 +6,32 @@ from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
class NetfolderIn(SimpleCrypter):
- __name__ = "NetfolderIn"
- __type__ = "crypter"
- __version__ = "0.7"
+ __name__ = "NetfolderIn"
+ __type__ = "crypter"
+ __version__ = "0.72"
- __pattern__ = r'http://(?:www\.)?netfolder.in/((?P<id1>\w+)/\w+|folder.php\?folder_id=(?P<id2>\w+))'
+ __pattern__ = r'http://(?:www\.)?netfolder\.in/((?P<id1>\w+)/\w+|folder\.php\?folder_id=(?P<id2>\w+))'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """NetFolder.in decrypter plugin"""
- __authors__ = [("RaNaN", "RaNaN@pyload.org"),
- ("fragonib", "fragonib[AT]yahoo[DOT]es")]
+ __license__ = "GPLv3"
+ __authors__ = [("RaNaN", "RaNaN@pyload.org"),
+ ("fragonib", "fragonib[AT]yahoo[DOT]es")]
- TITLE_PATTERN = r'<div class="Text">Inhalt des Ordners <span.*>(.+)</span></div>'
+ NAME_PATTERN = r'<div class="Text">Inhalt des Ordners <span.*>(?P<N>.+)</span></div>'
- def decrypt(self, pyfile):
- # Request package
- self.html = self.load(pyfile.url)
+ def prepare(self):
+ super(NetfolderIn, self).prepare()
# Check for password protection
if self.isPasswordProtected():
self.html = self.submitPassword()
if not self.html:
- self.fail("Incorrect password, please set right password on Add package form and retry")
+ self.fail(_("Incorrect password, please set right password on Add package form and retry"))
- # Get package name and folder
- (package_name, folder_name) = self.getPackageNameAndFolder()
-
- # Get package links
- package_links = self.getLinks()
-
- # Set package
- self.packages = [(package_name, package_links, folder_name)]
def isPasswordProtected(self):
if '<input type="password" name="password"' in self.html:
@@ -45,6 +39,7 @@ class NetfolderIn(SimpleCrypter):
return True
return False
+
def submitPassword(self):
# Gather data
try:
@@ -68,6 +63,7 @@ class NetfolderIn(SimpleCrypter):
return html
+
def getLinks(self):
links = re.search(r'name="list" value="(.*?)"', self.html).group(1).split(",")
self.logDebug("Package has %d links" % len(links))
diff --git a/pyload/plugins/crypter/NosvideoCom.py b/pyload/plugins/crypter/NosvideoCom.py
index b22546636..5bd3b16a0 100644
--- a/pyload/plugins/crypter/NosvideoCom.py
+++ b/pyload/plugins/crypter/NosvideoCom.py
@@ -4,15 +4,18 @@ from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
class NosvideoCom(SimpleCrypter):
- __name__ = "NosvideoCom"
- __type__ = "crypter"
- __version__ = "0.02"
+ __name__ = "NosvideoCom"
+ __type__ = "crypter"
+ __version__ = "0.03"
__pattern__ = r'http://(?:www\.)?nosvideo\.com/\?v=\w+'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Nosvideo.com decrypter plugin"""
- __authors__ = [("igel", "igelkun@myopera.com")]
+ __license__ = "GPLv3"
+ __authors__ = [("igel", "igelkun@myopera.com")]
- LINK_PATTERN = r'href="(http://(?:w{3}\.)?nosupload.com/\?d=\w+)"'
- TITLE_PATTERN = r'<[tT]itle>Watch (.+?)<'
+ LINK_PATTERN = r'href="(http://(?:w{3}\.)?nosupload\.com/\?d=\w+)"'
+ NAME_PATTERN = r'<[tT]itle>Watch (?P<N>.+?)<'
diff --git a/pyload/plugins/crypter/OneKhDe.py b/pyload/plugins/crypter/OneKhDe.py
index 84560995e..d980f9bad 100644
--- a/pyload/plugins/crypter/OneKhDe.py
+++ b/pyload/plugins/crypter/OneKhDe.py
@@ -7,26 +7,30 @@ from pyload.plugins.base.Crypter import Crypter
class OneKhDe(Crypter):
- __name__ = "OneKhDe"
- __type__ = "crypter"
+ __name__ = "OneKhDe"
+ __type__ = "crypter"
__version__ = "0.1"
- __pattern__ = r'http://(?:www\.)?1kh.de/f/'
+ __pattern__ = r'http://(?:www\.)?1kh\.de/f/'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """1kh.de decrypter plugin"""
- __authors__ = [("spoob", "spoob@pyload.org")]
+ __license__ = "GPLv3"
+ __authors__ = [("spoob", "spoob@pyload.org")]
def __init__(self, parent):
Crypter.__init__(self, parent)
self.parent = parent
- self.html = None
+
def file_exists(self):
""" returns True or False
"""
return True
+
def proceed(self, url, location):
url = self.parent.url
self.html = self.load(url)
diff --git a/pyload/plugins/crypter/OronComFolder.py b/pyload/plugins/crypter/OronComFolder.py
index 8991642b6..dad59099f 100644
--- a/pyload/plugins/crypter/OronComFolder.py
+++ b/pyload/plugins/crypter/OronComFolder.py
@@ -4,11 +4,13 @@ from pyload.plugins.internal.DeadCrypter import DeadCrypter
class OronComFolder(DeadCrypter):
- __name__ = "OronComFolder"
- __type__ = "crypter"
+ __name__ = "OronComFolder"
+ __type__ = "crypter"
__version__ = "0.11"
- __pattern__ = r'http://(?:www\.)?oron.com/folder/\w+'
+ __pattern__ = r'http://(?:www\.)?oron\.com/folder/\w+'
+ __config__ = []
__description__ = """Oron.com folder decrypter plugin"""
- __authors__ = [("DHMH", "webmaster@pcProfil.de")]
+ __license__ = "GPLv3"
+ __authors__ = [("DHMH", "webmaster@pcProfil.de")]
diff --git a/pyload/plugins/crypter/PastebinCom.py b/pyload/plugins/crypter/PastebinCom.py
index bb5fd2a42..e47698752 100644
--- a/pyload/plugins/crypter/PastebinCom.py
+++ b/pyload/plugins/crypter/PastebinCom.py
@@ -4,15 +4,18 @@ from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
class PastebinCom(SimpleCrypter):
- __name__ = "PastebinCom"
- __type__ = "crypter"
- __version__ = "0.02"
+ __name__ = "PastebinCom"
+ __type__ = "crypter"
+ __version__ = "0.03"
__pattern__ = r'http://(?:www\.)?pastebin\.com/\w+'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Pastebin.com decrypter plugin"""
- __authors__ = [("stickell", "l.stickell@yahoo.it")]
+ __license__ = "GPLv3"
+ __authors__ = [("stickell", "l.stickell@yahoo.it")]
LINK_PATTERN = r'<div class="de\d+">(https?://[^ <]+)(?:[^<]*)</div>'
- TITLE_PATTERN = r'<div class="paste_box_line1" title="([^"]+)">'
+ NAME_PATTERN = r'<div class="paste_box_line1" title="(?P<N>[^"]+)">'
diff --git a/pyload/plugins/crypter/QuickshareCzFolder.py b/pyload/plugins/crypter/QuickshareCzFolder.py
index c6f0280a2..7a4a7fb03 100644
--- a/pyload/plugins/crypter/QuickshareCzFolder.py
+++ b/pyload/plugins/crypter/QuickshareCzFolder.py
@@ -5,27 +5,27 @@ from pyload.plugins.base.Crypter import Crypter
class QuickshareCzFolder(Crypter):
- __name__ = "QuickshareCzFolder"
- __type__ = "crypter"
+ __name__ = "QuickshareCzFolder"
+ __type__ = "crypter"
__version__ = "0.1"
- __pattern__ = r'http://(?:www\.)?quickshare.cz/slozka-\d+.*'
+ __pattern__ = r'http://(?:www\.)?quickshare\.cz/slozka-\d+.*'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Quickshare.cz folder decrypter plugin"""
- __authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
+ __license__ = "GPLv3"
+ __authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
FOLDER_PATTERN = r'<textarea[^>]*>(.*?)</textarea>'
- LINK_PATTERN = r'(http://www.quickshare.cz/\S+)'
+ LINK_PATTERN = r'(http://www\.quickshare\.cz/\S+)'
def decrypt(self, pyfile):
html = self.load(pyfile.url)
- m = re.search(self.FOLDER_PATTERN, html, re.DOTALL)
+ m = re.search(self.FOLDER_PATTERN, html, re.S)
if m is None:
- self.fail("Parse error (FOLDER)")
+ self.error(_("FOLDER_PATTERN not found"))
self.urls.extend(re.findall(self.LINK_PATTERN, m.group(1)))
-
- if not self.urls:
- self.fail('Could not extract any links')
diff --git a/pyload/plugins/crypter/RSLayerCom.py b/pyload/plugins/crypter/RSLayerCom.py
index d93593459..70c04a10c 100644
--- a/pyload/plugins/crypter/RSLayerCom.py
+++ b/pyload/plugins/crypter/RSLayerCom.py
@@ -4,11 +4,13 @@ from pyload.plugins.internal.DeadCrypter import DeadCrypter
class RSLayerCom(DeadCrypter):
- __name__ = "RSLayerCom"
- __type__ = "crypter"
+ __name__ = "RSLayerCom"
+ __type__ = "crypter"
__version__ = "0.21"
- __pattern__ = r'http://(?:www\.)?rs-layer.com/directory-'
+ __pattern__ = r'http://(?:www\.)?rs-layer\.com/directory-'
+ __config__ = []
__description__ = """RS-Layer.com decrypter plugin"""
- __authors__ = [("hzpz", None)]
+ __license__ = "GPLv3"
+ __authors__ = [("hzpz", None)]
diff --git a/pyload/plugins/crypter/RelinkUs.py b/pyload/plugins/crypter/RelinkUs.py
index 30d9eba48..8a31d2acd 100644
--- a/pyload/plugins/crypter/RelinkUs.py
+++ b/pyload/plugins/crypter/RelinkUs.py
@@ -10,38 +10,46 @@ from pyload.plugins.base.Crypter import Crypter
class RelinkUs(Crypter):
- __name__ = "RelinkUs"
- __type__ = "crypter"
- __version__ = "3.0"
+ __name__ = "RelinkUs"
+ __type__ = "crypter"
+ __version__ = "3.1"
- __pattern__ = r'http://(?:www\.)?relink.us/(f/|((view|go).php\?id=))(?P<id>.+)'
+ __pattern__ = r'http://(?:www\.)?relink\.us/(f/|((view|go)\.php\?id=))(?P<id>.+)'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Relink.us decrypter plugin"""
- __authors__ = [("fragonib", "fragonib[AT]yahoo[DOT]es")]
+ __license__ = "GPLv3"
+ __authors__ = [("fragonib", "fragonib[AT]yahoo[DOT]es"),
+ ("AndroKev", "neureither.kevin@gmail.com")]
- # Constants
PREFERRED_LINK_SOURCES = ["cnl2", "dlc", "web"]
OFFLINE_TOKEN = r'<title>Tattooside'
- PASSWORD_TOKEN = r'container_password\.php'
+
+ PASSWORD_TOKEN = r'container_password.php'
PASSWORD_ERROR_ROKEN = r'You have entered an incorrect password'
- PASSWORD_SUBMIT_URL = r'http://www\.relink\.us/container_password\.php'
- CAPTCHA_TOKEN = r'container_captcha\.php'
+ PASSWORD_SUBMIT_URL = r'http://www.relink.us/container_password.php'
+
+ CAPTCHA_TOKEN = r'container_captcha.php'
CAPTCHA_ERROR_ROKEN = r'You have solved the captcha wrong'
- CAPTCHA_IMG_URL = r'http://www\.relink\.us/core/captcha/circlecaptcha\.php'
- CAPTCHA_SUBMIT_URL = r'http://www\.relink\.us/container_captcha\.php'
- FILE_TITLE_REGEX = r'<th>Title</th><td><i>(.*)</i></td></tr>'
+ CAPTCHA_IMG_URL = r'http://www.relink.us/core/captcha/circlecaptcha.php'
+ CAPTCHA_SUBMIT_URL = r'http://www.relink.us/container_captcha.php'
+
+ FILE_TITLE_REGEX = r'<th>Title</th><td>(.*)</td></tr>'
FILE_NOTITLE = r'No title'
CNL2_FORM_REGEX = r'<form id="cnl_form-(.*?)</form>'
CNL2_FORMINPUT_REGEX = r'<input.*?name="%s".*?value="(.*?)"'
CNL2_JK_KEY = "jk"
CNL2_CRYPTED_KEY = "crypted"
+
DLC_LINK_REGEX = r'<a href=".*?" class="dlc_button" target="_blank">'
- DLC_DOWNLOAD_URL = r'http://www\.relink\.us/download\.php'
- WEB_FORWARD_REGEX = r"getFile\('(?P<link>.+)'\)"
- WEB_FORWARD_URL = r'http://www\.relink\.us/frame\.php'
+ DLC_DOWNLOAD_URL = r'http://www.relink.us/download.php'
+
+ WEB_FORWARD_REGEX = r'getFile\(\'(?P<link>.+)\'\)'
+ WEB_FORWARD_URL = r'http://www.relink.us/frame.php'
WEB_LINK_REGEX = r'<iframe name="Container" height="100%" frameborder="no" width="100%" src="(?P<link>.+)"></iframe>'
@@ -49,9 +57,9 @@ class RelinkUs(Crypter):
self.fileid = None
self.package = None
self.password = None
- self.html = None
self.captcha = False
+
def decrypt(self, pyfile):
# Init
self.initPackage(pyfile)
@@ -87,49 +95,55 @@ class RelinkUs(Crypter):
# Pack
if package_links:
self.packages = [(package_name, package_links, folder_name)]
- else:
- self.fail('Could not extract any links')
+
def initPackage(self, pyfile):
self.fileid = re.match(self.__pattern__, pyfile.url).group('id')
self.package = pyfile.package()
self.password = self.getPassword()
+
def requestPackage(self):
self.html = self.load(self.pyfile.url, decode=True)
+
def isOnline(self):
if self.OFFLINE_TOKEN in self.html:
self.logDebug("File not found")
return False
return True
+
def isPasswordProtected(self):
if self.PASSWORD_TOKEN in self.html:
self.logDebug("Links are password protected")
return True
+
def isCaptchaProtected(self):
if self.CAPTCHA_TOKEN in self.html:
self.logDebug("Links are captcha protected")
return True
return False
+
def unlockPasswordProtection(self):
self.logDebug("Submitting password [%s] for protected links" % self.password)
passwd_url = self.PASSWORD_SUBMIT_URL + "?id=%s" % self.fileid
passwd_data = {'id': self.fileid, 'password': self.password, 'pw': 'submit'}
self.html = self.load(passwd_url, post=passwd_data, decode=True)
+
def unlockCaptchaProtection(self):
self.logDebug("Request user positional captcha resolving")
captcha_img_url = self.CAPTCHA_IMG_URL + "?id=%s" % self.fileid
coords = self.decryptCaptcha(captcha_img_url, forceUser=True, imgtype="png", result_type='positional')
- self.logDebug("Captcha resolved, coords [%s]" % coords)
+ self.logDebug("Captcha resolved, coords [%s]" % str(coords))
captcha_post_url = self.CAPTCHA_SUBMIT_URL + "?id=%s" % self.fileid
captcha_post_data = {'button.x': coords[0], 'button.y': coords[1], 'captcha': 'submit'}
self.html = self.load(captcha_post_url, post=captcha_post_data, decode=True)
+
def getPackageInfo(self):
name = folder = None
@@ -150,20 +164,21 @@ class RelinkUs(Crypter):
# Return package info
return name, folder
+
def handleErrors(self):
if self.PASSWORD_ERROR_ROKEN in self.html:
msg = "Incorrect password, please set right password on 'Edit package' form and retry"
self.logDebug(msg)
- self.fail(msg)
+ self.fail(_(msg))
if self.captcha:
if self.CAPTCHA_ERROR_ROKEN in self.html:
- self.logDebug("Invalid captcha, retrying")
self.invalidCaptcha()
self.retry()
else:
self.correctCaptcha()
+
def handleLinkSource(self, source):
if source == 'cnl2':
return self.handleCNL2Links()
@@ -172,12 +187,13 @@ class RelinkUs(Crypter):
elif source == 'web':
return self.handleWEBLinks()
else:
- self.fail('Unknown source [%s] (this is probably a bug)' % source)
+ self.error('Unknown source type "%s" (this is probably a bug)' % source)
+
def handleCNL2Links(self):
self.logDebug("Search for CNL2 links")
package_links = []
- m = re.search(self.CNL2_FORM_REGEX, self.html, re.DOTALL)
+ m = re.search(self.CNL2_FORM_REGEX, self.html, re.S)
if m is not None:
cnl2_form = m.group(1)
try:
@@ -188,6 +204,7 @@ class RelinkUs(Crypter):
self.logDebug("Unable to decrypt CNL2 links")
return package_links
+
def handleDLCLinks(self):
self.logDebug("Search for DLC links")
package_links = []
@@ -199,14 +216,14 @@ class RelinkUs(Crypter):
dlc = self.load(container_url)
dlc_filename = self.fileid + ".dlc"
dlc_filepath = os.path.join(self.config['general']['download_folder'], dlc_filename)
- f = open(dlc_filepath, "wb")
- f.write(dlc)
- f.close()
+ with open(dlc_filepath, "wb") as f:
+ f.write(dlc)
package_links.append(dlc_filepath)
except:
- self.logDebug("Unable to download DLC container")
+ self.fail("Unable to download DLC container")
return package_links
+
def handleWEBLinks(self):
self.logDebug("Search for WEB links")
package_links = []
@@ -225,19 +242,21 @@ class RelinkUs(Crypter):
self.wait()
return package_links
+
def _getCipherParams(self, cnl2_form):
# Get jk
jk_re = self.CNL2_FORMINPUT_REGEX % self.CNL2_JK_KEY
- vjk = re.findall(jk_re, cnl2_form, re.IGNORECASE)
+ vjk = re.findall(jk_re, cnl2_form, re.I)
# Get crypted
crypted_re = self.CNL2_FORMINPUT_REGEX % RelinkUs.CNL2_CRYPTED_KEY
- vcrypted = re.findall(crypted_re, cnl2_form, re.IGNORECASE)
+ vcrypted = re.findall(crypted_re, cnl2_form, re.I)
# Log and return
self.logDebug("Detected %d crypted blocks" % len(vcrypted))
return vcrypted, vjk
+
def _getLinks(self, crypted, jk):
# Get key
jreturn = self.js.eval("%s f()" % jk)
diff --git a/pyload/plugins/crypter/SafelinkingNet.py b/pyload/plugins/crypter/SafelinkingNet.py
index 12ba3c853..1d8ad7cf6 100644
--- a/pyload/plugins/crypter/SafelinkingNet.py
+++ b/pyload/plugins/crypter/SafelinkingNet.py
@@ -12,49 +12,48 @@ from pyload.plugins.internal.CaptchaService import SolveMedia
class SafelinkingNet(Crypter):
- __name__ = "SafelinkingNet"
- __type__ = "crypter"
- __version__ = "0.1"
+ __name__ = "SafelinkingNet"
+ __type__ = "crypter"
+ __version__ = "0.11"
- __pattern__ = r'https?://(?:www\.)?safelinking.net/([pd])/\w+'
+ __pattern__ = r'https?://(?:www\.)?safelinking\.net/([pd])/\w+'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Safelinking.net decrypter plugin"""
- __authors__ = [("quareevo", "quareevo@arcor.de")]
+ __license__ = "GPLv3"
+ __authors__ = [("quareevo", "quareevo@arcor.de")]
- SOLVEMEDIA_PATTERN = "solvemediaApiKey = '([\w\.\-_]+)';"
+ SOLVEMEDIA_PATTERN = "solvemediaApiKey = '([\w.-]+)';"
def decrypt(self, pyfile):
url = pyfile.url
+
if re.match(self.__pattern__, url).group(1) == "d":
- self.req.http.c.setopt(FOLLOWLOCATION, 0)
- self.load(url)
- m = re.search("^Location: (.+)$", self.req.http.header, re.MULTILINE)
- if m:
- self.urls = [m.group(1)]
+
+ header = self.load(url, just_header=True)
+ if 'location' in header:
+ self.urls = [header['location']]
else:
- self.fail("Couldn't find forwarded Link")
+ self.error(_("Couldn't find forwarded Link"))
else:
- password = ""
postData = {"post-protect": "1"}
- self.html = self.load(url)
-
if "link-password" in self.html:
- password = pyfile.package().password
- postData['link-password'] = password
+ postData['link-password'] = self.getPassword()
if "altcaptcha" in self.html:
- for _ in xrange(5):
+ for _i in xrange(5):
m = re.search(self.SOLVEMEDIA_PATTERN, self.html)
if m:
captchaKey = m.group(1)
captcha = SolveMedia(self)
captchaProvider = "Solvemedia"
else:
- self.fail("Error parsing captcha")
+ self.fail(_("Error parsing captcha"))
challenge, response = captcha.challenge(captchaKey)
postData['adcopy_challenge'] = challenge
@@ -62,7 +61,7 @@ class SafelinkingNet(Crypter):
self.html = self.load(url, post=postData)
if "The password you entered was incorrect" in self.html:
- self.fail("Incorrect Password")
+ self.fail(_("Incorrect Password"))
if not "The CAPTCHA code you entered was wrong" in self.html:
break
diff --git a/pyload/plugins/crypter/SecuredIn.py b/pyload/plugins/crypter/SecuredIn.py
index 4416c2e71..21ebff060 100644
--- a/pyload/plugins/crypter/SecuredIn.py
+++ b/pyload/plugins/crypter/SecuredIn.py
@@ -4,11 +4,13 @@ from pyload.plugins.internal.DeadCrypter import DeadCrypter
class SecuredIn(DeadCrypter):
- __name__ = "SecuredIn"
- __type__ = "crypter"
+ __name__ = "SecuredIn"
+ __type__ = "crypter"
__version__ = "0.21"
- __pattern__ = r'http://(?:www\.)?secured\.in/download-[\d]+-[\w]{8}\.html'
+ __pattern__ = r'http://(?:www\.)?secured\.in/download-[\d]+-\w{8}\.html'
+ __config__ = []
__description__ = """Secured.in decrypter plugin"""
- __authors__ = [("mkaay", "mkaay@mkaay.de")]
+ __license__ = "GPLv3"
+ __authors__ = [("mkaay", "mkaay@mkaay.de")]
diff --git a/pyload/plugins/crypter/ShareLinksBiz.py b/pyload/plugins/crypter/ShareLinksBiz.py
index 796643e8d..0c646eda8 100644
--- a/pyload/plugins/crypter/ShareLinksBiz.py
+++ b/pyload/plugins/crypter/ShareLinksBiz.py
@@ -9,23 +9,26 @@ from pyload.plugins.base.Crypter import Crypter
class ShareLinksBiz(Crypter):
- __name__ = "ShareLinksBiz"
- __type__ = "crypter"
- __version__ = "1.13"
+ __name__ = "ShareLinksBiz"
+ __type__ = "crypter"
+ __version__ = "1.14"
__pattern__ = r'http://(?:www\.)?(share-links|s2l)\.biz/(?P<ID>_?\w+)'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Share-Links.biz decrypter plugin"""
- __authors__ = [("fragonib", "fragonib[AT]yahoo[DOT]es")]
+ __license__ = "GPLv3"
+ __authors__ = [("fragonib", "fragonib[AT]yahoo[DOT]es")]
def setup(self):
self.baseUrl = None
self.fileId = None
self.package = None
- self.html = None
self.captcha = False
+
def decrypt(self, pyfile):
# Init
self.initFile(pyfile)
@@ -60,6 +63,7 @@ class ShareLinksBiz(Crypter):
# Pack
self.packages = [(package_name, package_links, package_folder)]
+
def initFile(self, pyfile):
url = pyfile.url
if 's2l.biz' in url:
@@ -68,29 +72,34 @@ class ShareLinksBiz(Crypter):
self.fileId = re.match(self.__pattern__, url).group('ID')
self.package = pyfile.package()
+
def isOnline(self):
if "No usable content was found" in self.html:
self.logDebug("File not found")
return False
return True
+
def isPasswordProtected(self):
if re.search(r'''<form.*?id="passwordForm".*?>''', self.html):
self.logDebug("Links are protected")
return True
return False
+
def isCaptchaProtected(self):
if '<map id="captchamap"' in self.html:
self.logDebug("Links are captcha protected")
return True
return False
+
def unblockServer(self):
imgs = re.findall(r"(/template/images/.*?\.gif)", self.html)
for img in imgs:
self.load(self.baseUrl + img)
+
def unlockPasswordProtection(self):
password = self.getPassword()
self.logDebug("Submitting password [%s] for protected links" % password)
@@ -98,6 +107,7 @@ class ShareLinksBiz(Crypter):
url = self.baseUrl + '/' + self.fileId
self.html = self.load(url, post=post, decode=True)
+
def unlockCaptchaProtection(self):
# Get captcha map
captchaMap = self._getCaptchaMap()
@@ -108,19 +118,17 @@ class ShareLinksBiz(Crypter):
captchaUrl = self.baseUrl + '/captcha.gif?d=%s&PHPSESSID=%s' % (m.group(1), m.group(2))
self.logDebug("Waiting user for correct position")
coords = self.decryptCaptcha(captchaUrl, forceUser=True, imgtype="gif", result_type='positional')
- self.logDebug("Captcha resolved, coords [%s]" % coords)
+ self.logDebug("Captcha resolved, coords [%s]" % str(coords))
# Resolve captcha
href = self._resolveCoords(coords, captchaMap)
if href is None:
- self.logDebug("Invalid captcha resolving, retrying")
self.invalidCaptcha()
- self.setWait(5, False)
- self.wait()
- self.retry()
+ self.retry(wait_time=5)
url = self.baseUrl + href
self.html = self.load(url, decode=True)
+
def _getCaptchaMap(self):
mapp = {}
for m in re.finditer(r'<area shape="rect" coords="(.*?)" href="(.*?)"', self.html):
@@ -129,34 +137,34 @@ class ShareLinksBiz(Crypter):
mapp[rect] = href
return mapp
+
def _resolveCoords(self, coords, captchaMap):
x, y = coords
- for rect, href in captchaMap.items():
+ for rect, href in captchaMap.iteritems():
x1, y1, x2, y2 = rect
if (x >= x1 and x <= x2) and (y >= y1 and y <= y2):
return href
+
def handleErrors(self):
if "The inserted password was wrong" in self.html:
self.logDebug("Incorrect password, please set right password on 'Edit package' form and retry")
- self.fail("Incorrect password, please set right password on 'Edit package' form and retry")
+ self.fail(_("Incorrect password, please set right password on 'Edit package' form and retry"))
if self.captcha:
if "Your choice was wrong" in self.html:
- self.logDebug("Invalid captcha, retrying")
self.invalidCaptcha()
- self.setWait(5)
- self.wait()
- self.retry()
+ self.retry(wait_time=5)
else:
self.correctCaptcha()
+
def getPackageInfo(self):
name = folder = None
# Extract from web package header
title_re = r'<h2><img.*?/>(.*)</h2>'
- m = re.search(title_re, self.html, re.DOTALL)
+ m = re.search(title_re, self.html, re.S)
if m is not None:
title = m.group(1).strip()
if 'unnamed' not in title:
@@ -172,38 +180,45 @@ class ShareLinksBiz(Crypter):
# Return package info
return name, folder
+
def handleWebLinks(self):
package_links = []
self.logDebug("Handling Web links")
#@TODO: Gather paginated web links
- pattern = r"javascript:_get\('(.*?)', \d+, ''\)"
+ pattern = r'javascript:_get\(\'(.*?)\', \d+, \'\'\)'
ids = re.findall(pattern, self.html)
self.logDebug("Decrypting %d Web links" % len(ids))
for i, ID in enumerate(ids):
try:
self.logDebug("Decrypting Web link %d, [%s]" % (i + 1, ID))
+
dwLink = self.baseUrl + "/get/lnk/" + ID
- response = self.load(dwLink)
- code = re.search(r'frm/(\d+)', response).group(1)
+ res = self.load(dwLink)
+
+ code = re.search(r'frm/(\d+)', res).group(1)
fwLink = self.baseUrl + "/get/frm/" + code
- response = self.load(fwLink)
- jscode = re.search(r'<script language="javascript">\s*eval\((.*)\)\s*</script>', response,
- re.DOTALL).group(1)
+ res = self.load(fwLink)
+
+ jscode = re.search(r'<script language="javascript">\s*eval\((.*)\)\s*</script>', res, re.S).group(1)
jscode = self.js.eval("f = %s" % jscode)
jslauncher = "window=''; parent={frames:{Main:{location:{href:''}}},location:''}; %s; parent.frames.Main.location.href"
+
dlLink = self.js.eval(jslauncher % jscode)
+
self.logDebug("JsEngine returns value [%s] for redirection link" % dlLink)
+
package_links.append(dlLink)
except Exception, detail:
self.logDebug("Error decrypting Web link [%s], %s" % (ID, detail))
return package_links
+
def handleContainers(self):
package_links = []
self.logDebug("Handling Container links")
- pattern = r"javascript:_get\('(.*?)', 0, '(rsdf|ccf|dlc)'\)"
+ pattern = r'javascript:_get\(\'(.*?)\', 0, \'(rsdf|ccf|dlc)\'\)'
containersLinks = re.findall(pattern, self.html)
self.logDebug("Decrypting %d Container links" % len(containersLinks))
for containerLink in containersLinks:
@@ -211,6 +226,7 @@ class ShareLinksBiz(Crypter):
package_links.append(link)
return package_links
+
def handleCNL2(self):
package_links = []
self.logDebug("Handling CNL2 links")
@@ -220,15 +236,16 @@ class ShareLinksBiz(Crypter):
(crypted, jk) = self._getCipherParams()
package_links.extend(self._getLinks(crypted, jk))
except:
- self.fail("Unable to decrypt CNL2 links")
+ self.fail(_("Unable to decrypt CNL2 links"))
return package_links
+
def _getCipherParams(self):
# Request CNL2
- code = re.search(r'ClicknLoad.swf\?code=(.*?)"', self.html).group(1)
- url = "%s/get/cnl2/%s" % (self.baseUrl, code)
- response = self.load(url)
- params = response.split(";;")
+ code = re.search(r'ClicknLoad.swf\?code=(.*?)"', self.html).group(1)
+ url = "%s/get/cnl2/%s" % (self.baseUrl, code)
+ res = self.load(url)
+ params = res.split(";;")
# Get jk
strlist = list(base64.standard_b64decode(params[1]))
@@ -243,6 +260,7 @@ class ShareLinksBiz(Crypter):
# Log and return
return crypted, jk
+
def _getLinks(self, crypted, jk):
# Get key
jreturn = self.js.eval("%s f()" % jk)
diff --git a/pyload/plugins/crypter/ShareRapidComFolder.py b/pyload/plugins/crypter/ShareRapidComFolder.py
deleted file mode 100644
index a6f9eb334..000000000
--- a/pyload/plugins/crypter/ShareRapidComFolder.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
-
-
-class ShareRapidComFolder(SimpleCrypter):
- __name__ = "ShareRapidComFolder"
- __type__ = "crypter"
- __version__ = "0.01"
-
- __pattern__ = r'http://(?:www\.)?((share(-?rapid\.(biz|com|cz|info|eu|net|org|pl|sk)|-(central|credit|free|net)\.cz|-ms\.net)|(s-?rapid|rapids)\.(cz|sk))|(e-stahuj|mediatack|premium-rapidshare|rapidshare-premium|qiuck)\.cz|kadzet\.com|stahuj-zdarma\.eu|strelci\.net|universal-share\.com)/(slozka/.+)'
-
- __description__ = """Share-Rapid.com folder decrypter plugin"""
- __authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
-
-
- LINK_PATTERN = r'<td class="soubor"[^>]*><a href="([^"]+)">'
diff --git a/pyload/plugins/crypter/SpeedLoadOrgFolder.py b/pyload/plugins/crypter/SpeedLoadOrgFolder.py
index 39a237953..5b66b7ea6 100644
--- a/pyload/plugins/crypter/SpeedLoadOrgFolder.py
+++ b/pyload/plugins/crypter/SpeedLoadOrgFolder.py
@@ -4,11 +4,13 @@ from pyload.plugins.internal.DeadCrypter import DeadCrypter
class SpeedLoadOrgFolder(DeadCrypter):
- __name__ = "SpeedLoadOrgFolder"
- __type__ = "crypter"
+ __name__ = "SpeedLoadOrgFolder"
+ __type__ = "crypter"
__version__ = "0.3"
__pattern__ = r'http://(?:www\.)?speedload\.org/(\d+~f$|folder/\d+/)'
+ __config__ = []
__description__ = """Speedload decrypter plugin"""
- __authors__ = [("stickell", "l.stickell@yahoo.it")]
+ __license__ = "GPLv3"
+ __authors__ = [("stickell", "l.stickell@yahoo.it")]
diff --git a/pyload/plugins/crypter/StealthTo.py b/pyload/plugins/crypter/StealthTo.py
index ce89a6f35..6177a116a 100644
--- a/pyload/plugins/crypter/StealthTo.py
+++ b/pyload/plugins/crypter/StealthTo.py
@@ -4,11 +4,13 @@ from pyload.plugins.internal.DeadCrypter import DeadCrypter
class StealthTo(DeadCrypter):
- __name__ = "StealthTo"
- __type__ = "crypter"
+ __name__ = "StealthTo"
+ __type__ = "crypter"
__version__ = "0.2"
__pattern__ = r'http://(?:www\.)?stealth\.to/folder/.+'
+ __config__ = []
__description__ = """Stealth.to decrypter plugin"""
- __authors__ = [("spoob", "spoob@pyload.org")]
+ __license__ = "GPLv3"
+ __authors__ = [("spoob", "spoob@pyload.org")]
diff --git a/pyload/plugins/crypter/TnyCz.py b/pyload/plugins/crypter/TnyCz.py
index dc065b8ea..b2a777da2 100644
--- a/pyload/plugins/crypter/TnyCz.py
+++ b/pyload/plugins/crypter/TnyCz.py
@@ -6,17 +6,20 @@ import re
class TnyCz(SimpleCrypter):
- __name__ = "TnyCz"
- __type__ = "crypter"
- __version__ = "0.02"
+ __name__ = "TnyCz"
+ __type__ = "crypter"
+ __version__ = "0.03"
__pattern__ = r'http://(?:www\.)?tny\.cz/\w+'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Tny.cz decrypter plugin"""
- __authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
+ __license__ = "GPLv3"
+ __authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
- TITLE_PATTERN = r'<title>(.+) - .+</title>'
+ NAME_PATTERN = r'<title>(?P<N>.+) - .+</title>'
def getLinks(self):
diff --git a/pyload/plugins/crypter/TrailerzoneInfo.py b/pyload/plugins/crypter/TrailerzoneInfo.py
index 8cb6a01a2..deee3e23b 100644
--- a/pyload/plugins/crypter/TrailerzoneInfo.py
+++ b/pyload/plugins/crypter/TrailerzoneInfo.py
@@ -4,11 +4,13 @@ from pyload.plugins.internal.DeadCrypter import DeadCrypter
class TrailerzoneInfo(DeadCrypter):
- __name__ = "TrailerzoneInfo"
- __type__ = "crypter"
+ __name__ = "TrailerzoneInfo"
+ __type__ = "crypter"
__version__ = "0.03"
- __pattern__ = r'http://(?:www\.)?trailerzone.info/.*?'
+ __pattern__ = r'http://(?:www\.)?trailerzone\.info/.*?'
+ __config__ = []
__description__ = """TrailerZone.info decrypter plugin"""
- __authors__ = [("godofdream", "soilfiction@gmail.com")]
+ __license__ = "GPLv3"
+ __authors__ = [("godofdream", "soilfiction@gmail.com")]
diff --git a/pyload/plugins/crypter/TurbobitNetFolder.py b/pyload/plugins/crypter/TurbobitNetFolder.py
index b5b611ad6..096cc92c0 100644
--- a/pyload/plugins/crypter/TurbobitNetFolder.py
+++ b/pyload/plugins/crypter/TurbobitNetFolder.py
@@ -7,18 +7,21 @@ from pyload.utils import json_loads
class TurbobitNetFolder(SimpleCrypter):
- __name__ = "TurbobitNetFolder"
- __type__ = "crypter"
- __version__ = "0.04"
+ __name__ = "TurbobitNetFolder"
+ __type__ = "crypter"
+ __version__ = "0.05"
__pattern__ = r'http://(?:www\.)?turbobit\.net/download/folder/(?P<ID>\w+)'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Turbobit.net folder decrypter plugin"""
- __authors__ = [("stickell", "l.stickell@yahoo.it"),
- ("Walter Purcaro", "vuolter@gmail.com")]
+ __license__ = "GPLv3"
+ __authors__ = [("stickell", "l.stickell@yahoo.it"),
+ ("Walter Purcaro", "vuolter@gmail.com")]
- TITLE_PATTERN = r"src='/js/lib/grid/icon/folder.png'> <span>(.+?)</span>"
+ NAME_PATTERN = r'src=\'/js/lib/grid/icon/folder.png\'> <span>(?P<N>.+?)</span>'
def _getLinks(self, id, page=1):
@@ -34,6 +37,7 @@ class TurbobitNetFolder(SimpleCrypter):
else:
return
+
def getLinks(self):
id = re.match(self.__pattern__, self.pyfile.url).group("ID")
fixurl = lambda id: "http://turbobit.net/%s.html" % id
diff --git a/pyload/plugins/crypter/TusfilesNetFolder.py b/pyload/plugins/crypter/TusfilesNetFolder.py
index 245cb20bf..e8da59736 100644
--- a/pyload/plugins/crypter/TusfilesNetFolder.py
+++ b/pyload/plugins/crypter/TusfilesNetFolder.py
@@ -4,23 +4,26 @@ import math
import re
from urlparse import urljoin
-from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+from module.plugins.internal.XFSCrypter import XFSCrypter
-class TusfilesNetFolder(SimpleCrypter):
- __name__ = "TusfilesNetFolder"
- __type__ = "crypter"
- __version__ = "0.03"
+class TusfilesNetFolder(XFSCrypter):
+ __name__ = "TusfilesNetFolder"
+ __type__ = "crypter"
+ __version__ = "0.06"
- __pattern__ = r'https?://(?:www\.)?tusfiles\.net/go/(?P<ID>\w+)/?'
+ __pattern__ = r'https?://(?:www\.)?tusfiles\.net/go/(?P<ID>\w+)'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Tusfiles.net folder decrypter plugin"""
- __authors__ = [("Walter Purcaro", "vuolter@gmail.com"),
- ("stickell", "l.stickell@yahoo.it")]
+ __license__ = "GPLv3"
+ __authors__ = [("Walter Purcaro", "vuolter@gmail.com"),
+ ("stickell", "l.stickell@yahoo.it")]
- LINK_PATTERN = r'<TD align=left><a href="(.*?)">'
- TITLE_PATTERN = r'<Title>.*?\: (.+) folder</Title>'
+ HOSTER_DOMAIN = "tusfiles.net"
+
PAGES_PATTERN = r'>\((\d+) \w+\)<'
URL_REPLACEMENTS = [(__pattern__, r'https://www.tusfiles.net/go/\g<ID>/')]
@@ -29,6 +32,7 @@ class TusfilesNetFolder(SimpleCrypter):
def loadPage(self, page_n):
return self.load(urljoin(self.pyfile.url, str(page_n)), decode=True)
+
def handleMultiPages(self):
pages = re.search(self.PAGES_PATTERN, self.html)
if pages:
@@ -38,4 +42,4 @@ class TusfilesNetFolder(SimpleCrypter):
for p in xrange(2, pages + 1):
self.html = self.loadPage(p)
- self.package_links += self.getLinks()
+ self.links += self.getLinks()
diff --git a/pyload/plugins/crypter/UlozToFolder.py b/pyload/plugins/crypter/UlozToFolder.py
index 1d25fff6f..da1cb61b9 100644
--- a/pyload/plugins/crypter/UlozToFolder.py
+++ b/pyload/plugins/crypter/UlozToFolder.py
@@ -5,14 +5,17 @@ from pyload.plugins.base.Crypter import Crypter
class UlozToFolder(Crypter):
- __name__ = "UlozToFolder"
- __type__ = "crypter"
+ __name__ = "UlozToFolder"
+ __type__ = "crypter"
__version__ = "0.2"
- __pattern__ = r'http://(?:www\.)?(uloz\.to|ulozto\.(cz|sk|net)|bagruj.cz|zachowajto.pl)/(m|soubory)/.*'
+ __pattern__ = r'http://(?:www\.)?(uloz\.to|ulozto\.(cz|sk|net)|bagruj\.cz|zachowajto\.pl)/(m|soubory)/.*'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Uloz.to folder decrypter plugin"""
- __authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
+ __license__ = "GPLv3"
+ __authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
FOLDER_PATTERN = r'<ul class="profile_files">(.*?)</ul>'
@@ -25,10 +28,10 @@ class UlozToFolder(Crypter):
new_links = []
for i in xrange(1, 100):
- self.logInfo("Fetching links from page %i" % i)
- m = re.search(self.FOLDER_PATTERN, html, re.DOTALL)
+ self.logInfo(_("Fetching links from page %i") % i)
+ m = re.search(self.FOLDER_PATTERN, html, re.S)
if m is None:
- self.fail("Parse error (FOLDER)")
+ self.error(_("FOLDER_PATTERN not found"))
new_links.extend(re.findall(self.LINK_PATTERN, m.group(1)))
m = re.search(self.NEXT_PAGE_PATTERN, html)
@@ -37,9 +40,7 @@ class UlozToFolder(Crypter):
else:
break
else:
- self.logInfo("Limit of 99 pages reached, aborting")
+ self.logInfo(_("Limit of 99 pages reached, aborting"))
if new_links:
self.urls = [map(lambda s: "http://ulozto.net/%s" % s, new_links)]
- else:
- self.fail('Could not extract any links')
diff --git a/pyload/plugins/crypter/UploadableChFolder.py b/pyload/plugins/crypter/UploadableChFolder.py
index a3b77eaaa..8fff41c16 100644
--- a/pyload/plugins/crypter/UploadableChFolder.py
+++ b/pyload/plugins/crypter/UploadableChFolder.py
@@ -4,18 +4,21 @@ from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
class UploadableChFolder(SimpleCrypter):
- __name__ = "UploadableChFolder"
- __type__ = "crypter"
- __version__ = "0.02"
+ __name__ = "UploadableChFolder"
+ __type__ = "crypter"
+ __version__ = "0.03"
__pattern__ = r'http://(?:www\.)?uploadable\.ch/list/\w+'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Uploadable.ch folder decrypter plugin"""
- __authors__ = [("guidobelix", "guidobelix@hotmail.it"),
- ("Walter Purcaro", "vuolter@gmail.com")]
+ __license__ = "GPLv3"
+ __authors__ = [("guidobelix", "guidobelix@hotmail.it"),
+ ("Walter Purcaro", "vuolter@gmail.com")]
LINK_PATTERN = r'"(.+?)" class="icon_zipfile">'
- TITLE_PATTERN = r'<div class="folder"><span>&nbsp;</span>(.+?)</div>'
+ NAME_PATTERN = r'<div class="folder"><span>&nbsp;</span>(?P<N>.+?)</div>'
OFFLINE_PATTERN = r'We are sorry... The URL you entered cannot be found on the server.'
TEMP_OFFLINE_PATTERN = r'<div class="icon_err">'
diff --git a/pyload/plugins/crypter/UploadedToFolder.py b/pyload/plugins/crypter/UploadedToFolder.py
index 223c419d7..359ba92d0 100644
--- a/pyload/plugins/crypter/UploadedToFolder.py
+++ b/pyload/plugins/crypter/UploadedToFolder.py
@@ -2,37 +2,33 @@
import re
-from pyload.plugins.internal.SimpleCrypter import SimpleCrypter
+from urlparse import urljoin
+
+from module.plugins.internal.SimpleCrypter import SimpleCrypter
class UploadedToFolder(SimpleCrypter):
- __name__ = "UploadedToFolder"
- __type__ = "crypter"
- __version__ = "0.4"
+ __name__ = "UploadedToFolder"
+ __type__ = "crypter"
+ __version__ = "0.42"
__pattern__ = r'http://(?:www\.)?(uploaded|ul)\.(to|net)/(f|folder|list)/(?P<id>\w+)'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """UploadedTo decrypter plugin"""
- __authors__ = [("stickell", "l.stickell@yahoo.it")]
+ __license__ = "GPLv3"
+ __authors__ = [("stickell", "l.stickell@yahoo.it")]
PLAIN_PATTERN = r'<small class="date"><a href="(?P<plain>[\w/]+)" onclick='
- TITLE_PATTERN = r'<title>(.+?)<'
-
+ NAME_PATTERN = r'<title>(?P<N>.+?)<'
- def decrypt(self, pyfile):
- self.html = self.load(pyfile.url)
-
- package_name, folder_name = self.getPackageNameAndFolder()
+ def getLinks(self):
m = re.search(self.PLAIN_PATTERN, self.html)
- if m:
- plain_link = 'http://uploaded.net/' + m.group('plain')
- else:
- self.fail('Parse error - Unable to find plain url list')
-
- self.html = self.load(plain_link)
- package_links = self.html.split('\n')[:-1]
- self.logDebug("Package has %d links" % len(package_links))
+ if m is None:
+ self.error(_("PLAIN_PATTERN not found"))
- self.packages = [(package_name, package_links, folder_name)]
+ plain_link = urljoin("http://uploaded.net/", m.group('plain'))
+ return self.load(plain_link).split('\n')[:-1]
diff --git a/pyload/plugins/crypter/WiiReloadedOrg.py b/pyload/plugins/crypter/WiiReloadedOrg.py
index 0e3aef6d6..3c48044b0 100644
--- a/pyload/plugins/crypter/WiiReloadedOrg.py
+++ b/pyload/plugins/crypter/WiiReloadedOrg.py
@@ -4,11 +4,13 @@ from pyload.plugins.internal.DeadCrypter import DeadCrypter
class WiiReloadedOrg(DeadCrypter):
- __name__ = "WiiReloadedOrg"
- __type__ = "crypter"
+ __name__ = "WiiReloadedOrg"
+ __type__ = "crypter"
__version__ = "0.11"
__pattern__ = r'http://(?:www\.)?wii-reloaded\.org/protect/get\.php\?i=.+'
+ __config__ = []
__description__ = """Wii-Reloaded.org decrypter plugin"""
- __authors__ = [("hzpz", None)]
+ __license__ = "GPLv3"
+ __authors__ = [("hzpz", None)]
diff --git a/pyload/plugins/crypter/XupPl.py b/pyload/plugins/crypter/XupPl.py
index 798572285..87c93a305 100644
--- a/pyload/plugins/crypter/XupPl.py
+++ b/pyload/plugins/crypter/XupPl.py
@@ -4,14 +4,17 @@ from pyload.plugins.base.Crypter import Crypter
class XupPl(Crypter):
- __name__ = "XupPl"
- __type__ = "crypter"
+ __name__ = "XupPl"
+ __type__ = "crypter"
__version__ = "0.1"
__pattern__ = r'https?://(?:[^/]*\.)?xup\.pl/.*'
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
__description__ = """Xup.pl decrypter plugin"""
- __authors__ = [("z00nx", "z00nx0@gmail.com")]
+ __license__ = "GPLv3"
+ __authors__ = [("z00nx", "z00nx0@gmail.com")]
def decrypt(self, pyfile):
@@ -19,4 +22,4 @@ class XupPl(Crypter):
if 'location' in header:
self.urls = [header['location']]
else:
- self.fail('Unable to find link')
+ self.fail(_("Unable to find link"))
diff --git a/pyload/plugins/crypter/YoutubeBatch.py b/pyload/plugins/crypter/YoutubeBatch.py
index b48e792c0..7cb0e2f0a 100644
--- a/pyload/plugins/crypter/YoutubeBatch.py
+++ b/pyload/plugins/crypter/YoutubeBatch.py
@@ -8,29 +8,34 @@ from pyload.utils import json_loads
from pyload.plugins.base.Crypter import Crypter
from pyload.utils import safe_join
-API_URL = "AIzaSyCKnWLNlkX-L4oD1aEzqqhRw1zczeD6_k0"
-
class YoutubeBatch(Crypter):
- __name__ = "YoutubeBatch"
- __type__ = "crypter"
- __version__ = "1.00"
+ __name__ = "YoutubeBatch"
+ __type__ = "crypter"
+ __version__ = "1.01"
__pattern__ = r'https?://(?:www\.|m\.)?youtube\.com/(?P<TYPE>user|playlist|view_play_list)(/|.*?[?&](?:list|p)=)(?P<ID>[\w-]+)'
- __config__ = [("likes", "bool", "Grab user (channel) liked videos", False),
+ __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
+ ("subfolder_per_package", "bool", "Create a subfolder for each package", True),
+ ("likes", "bool", "Grab user (channel) liked videos", False),
("favorites", "bool", "Grab user (channel) favorite videos", False),
("uploads", "bool", "Grab channel unplaylisted videos", True)]
__description__ = """Youtube.com channel & playlist decrypter plugin"""
- __authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
+ __license__ = "GPLv3"
+ __authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
+
+
+ API_KEY = "AIzaSyCKnWLNlkX-L4oD1aEzqqhRw1zczeD6_k0"
def api_response(self, ref, req):
- req.update({"key": API_KEY})
+ req.update({"key": self.API_KEY})
url = urljoin("https://www.googleapis.com/youtube/v3/", ref)
page = self.load(url, get=req)
return json_loads(page)
+
def getChannel(self, user):
channels = self.api_response("channels", {"part": "id,snippet,contentDetails", "forUsername": user, "maxResults": "50"})
if channels['items']:
@@ -40,6 +45,7 @@ class YoutubeBatch(Crypter):
"relatedPlaylists": channel['contentDetails']['relatedPlaylists'],
"user": user} # One lone channel for user?
+
def getPlaylist(self, p_id):
playlists = self.api_response("playlists", {"part": "snippet", "id": p_id})
if playlists['items']:
@@ -49,6 +55,7 @@ class YoutubeBatch(Crypter):
"channelId": playlist['snippet']['channelId'],
"channelTitle": playlist['snippet']['channelTitle']}
+
def _getPlaylists(self, id, token=None):
req = {"part": "id", "maxResults": "50", "channelId": id}
if token:
@@ -63,9 +70,11 @@ class YoutubeBatch(Crypter):
for item in self._getPlaylists(id, playlists['nextPageToken']):
yield item
+
def getPlaylists(self, ch_id):
return map(self.getPlaylist, self._getPlaylists(ch_id))
+
def _getVideosId(self, id, token=None):
req = {"part": "contentDetails", "maxResults": "50", "playlistId": id}
if token:
@@ -80,9 +89,11 @@ class YoutubeBatch(Crypter):
for item in self._getVideosId(id, playlist['nextPageToken']):
yield item
+
def getVideosId(self, p_id):
return list(self._getVideosId(p_id))
+
def decrypt(self, pyfile):
m = re.match(self.__pattern__, pyfile.url)
m_id = m.group("ID")
@@ -114,7 +125,7 @@ class YoutubeBatch(Crypter):
playlists = [self.getPlaylist(m_id)]
if not playlists:
- self.fail("No playlist available")
+ self.fail(_("No playlist available"))
addedvideos = []
urlize = lambda x: "https://www.youtube.com/watch?v=" + x