summaryrefslogtreecommitdiffstats
path: root/module/plugins/crypter
diff options
context:
space:
mode:
Diffstat (limited to 'module/plugins/crypter')
-rw-r--r--module/plugins/crypter/BitshareComFolder.py18
-rw-r--r--module/plugins/crypter/C1neonCom.py4
-rw-r--r--module/plugins/crypter/ChipDe.py13
-rw-r--r--module/plugins/crypter/CrockoComFolder.py4
-rw-r--r--module/plugins/crypter/CryptItCom.py4
-rw-r--r--module/plugins/crypter/CzshareComFolder.py18
-rw-r--r--module/plugins/crypter/DDLMusicOrg.py8
-rw-r--r--module/plugins/crypter/DailymotionBatch.py39
-rw-r--r--module/plugins/crypter/DataHuFolder.py19
-rw-r--r--module/plugins/crypter/DdlstorageComFolder.py27
-rw-r--r--module/plugins/crypter/DepositfilesComFolder.py4
-rw-r--r--module/plugins/crypter/Dereferer.py25
-rw-r--r--module/plugins/crypter/DlProtectCom.py28
-rw-r--r--module/plugins/crypter/DontKnowMe.py14
-rw-r--r--module/plugins/crypter/DownloadVimeoCom.py30
-rw-r--r--module/plugins/crypter/DuckCryptInfo.py44
-rw-r--r--module/plugins/crypter/DuploadOrgFolder.py18
-rw-r--r--module/plugins/crypter/EasybytezComFolder.py20
-rw-r--r--module/plugins/crypter/EmbeduploadCom.py30
-rw-r--r--module/plugins/crypter/FilebeerInfoFolder.py4
-rw-r--r--module/plugins/crypter/FilecloudIoFolder.py18
-rw-r--r--module/plugins/crypter/FilefactoryComFolder.py56
-rw-r--r--module/plugins/crypter/FilerNetFolder.py22
-rw-r--r--module/plugins/crypter/FileserveComFolder.py10
-rw-r--r--module/plugins/crypter/FilestubeCom.py22
-rw-r--r--module/plugins/crypter/FiletramCom.py22
-rw-r--r--module/plugins/crypter/FiredriveComFolder.py28
-rw-r--r--module/plugins/crypter/FourChanOrg.py16
-rw-r--r--module/plugins/crypter/FreakhareComFolder.py19
-rw-r--r--module/plugins/crypter/FreetexthostCom.py21
-rw-r--r--module/plugins/crypter/FshareVnFolder.py4
-rw-r--r--module/plugins/crypter/GooGl.py23
-rw-r--r--module/plugins/crypter/HoerbuchIn.py18
-rw-r--r--module/plugins/crypter/HotfileFolderCom.py7
-rw-r--r--module/plugins/crypter/ILoadTo.py6
-rw-r--r--module/plugins/crypter/ImgurComAlbum.py24
-rw-r--r--module/plugins/crypter/LetitbitNetFolder.py13
-rw-r--r--module/plugins/crypter/LinkSaveIn.py23
-rw-r--r--module/plugins/crypter/LinkdecrypterCom.py45
-rw-r--r--module/plugins/crypter/LixIn.py39
-rw-r--r--module/plugins/crypter/LofCc.py4
-rw-r--r--module/plugins/crypter/MBLinkInfo.py4
-rw-r--r--module/plugins/crypter/MediafireComFolder.py31
-rw-r--r--module/plugins/crypter/Movie2kTo.py4
-rw-r--r--module/plugins/crypter/MultiUpOrg.py22
-rw-r--r--module/plugins/crypter/MultiloadCz.py28
-rw-r--r--module/plugins/crypter/MultiuploadCom.py26
-rw-r--r--module/plugins/crypter/NCryptIn.py45
-rw-r--r--module/plugins/crypter/NetfolderIn.py12
-rw-r--r--module/plugins/crypter/NosvideoCom.py6
-rw-r--r--module/plugins/crypter/OneKhDe.py9
-rwxr-xr-xmodule/plugins/crypter/OronComFolder.py4
-rw-r--r--module/plugins/crypter/PastebinCom.py18
-rw-r--r--module/plugins/crypter/QuickshareCzFolder.py16
-rw-r--r--module/plugins/crypter/RSLayerCom.py6
-rw-r--r--module/plugins/crypter/RelinkUs.py47
-rw-r--r--module/plugins/crypter/SafelinkingNet.py34
-rw-r--r--module/plugins/crypter/SecuredIn.py4
-rw-r--r--module/plugins/crypter/SerienjunkiesOrg.py62
-rw-r--r--module/plugins/crypter/ShareLinksBiz.py12
-rw-r--r--module/plugins/crypter/ShareRapidComFolder.py4
-rw-r--r--module/plugins/crypter/SpeedLoadOrgFolder.py18
-rw-r--r--module/plugins/crypter/StealthTo.py45
-rw-r--r--module/plugins/crypter/TnyCz.py22
-rw-r--r--module/plugins/crypter/TrailerzoneInfo.py4
-rw-r--r--module/plugins/crypter/TurbobitNetFolder.py25
-rw-r--r--module/plugins/crypter/TusfilesNetFolder.py23
-rw-r--r--module/plugins/crypter/UlozToFolder.py19
-rw-r--r--module/plugins/crypter/UploadableChFolder.py21
-rw-r--r--module/plugins/crypter/UploadedToFolder.py19
-rw-r--r--module/plugins/crypter/WiiReloadedOrg.py6
-rw-r--r--module/plugins/crypter/XupPl.py7
-rw-r--r--module/plugins/crypter/YoutubeBatch.py83
73 files changed, 665 insertions, 832 deletions
diff --git a/module/plugins/crypter/BitshareComFolder.py b/module/plugins/crypter/BitshareComFolder.py
index 7139c26a6..219dabce8 100644
--- a/module/plugins/crypter/BitshareComFolder.py
+++ b/module/plugins/crypter/BitshareComFolder.py
@@ -1,18 +1,4 @@
# -*- coding: utf-8 -*-
-############################################################################
-# This program is free software: you can redistribute it and/or modify #
-# it under the terms of the GNU Affero General Public License as #
-# published by the Free Software Foundation, either version 3 of the #
-# License, or (at your option) any later version. #
-# #
-# This program is distributed in the hope that it will be useful, #
-# but WITHOUT ANY WARRANTY; without even the implied warranty of #
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
-# GNU Affero General Public License for more details. #
-# #
-# You should have received a copy of the GNU Affero General Public License #
-# along with this program. If not, see <http://www.gnu.org/licenses/>. #
-############################################################################
from module.plugins.internal.SimpleCrypter import SimpleCrypter
@@ -20,8 +6,10 @@ from module.plugins.internal.SimpleCrypter import SimpleCrypter
class BitshareComFolder(SimpleCrypter):
__name__ = "BitshareComFolder"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?bitshare\.com/\?d=\w+'
__version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?bitshare\.com/\?d=\w+'
+
__description__ = """Bitshare.com folder decrypter plugin"""
__author_name__ = "stickell"
__author_mail__ = "l.stickell@yahoo.it"
diff --git a/module/plugins/crypter/C1neonCom.py b/module/plugins/crypter/C1neonCom.py
index 8923cfc32..829ed63d6 100644
--- a/module/plugins/crypter/C1neonCom.py
+++ b/module/plugins/crypter/C1neonCom.py
@@ -6,8 +6,10 @@ from module.plugins.internal.DeadCrypter import DeadCrypter
class C1neonCom(DeadCrypter):
__name__ = "C1neonCom"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?c1neon.com/.*?'
__version__ = "0.05"
+
+ __pattern__ = r'http://(?:www\.)?c1neon.com/.*?'
+
__description__ = """C1neon.com decrypter plugin"""
__author_name__ = "godofdream"
__author_mail__ = "soilfiction@gmail.com"
diff --git a/module/plugins/crypter/ChipDe.py b/module/plugins/crypter/ChipDe.py
index 529ec6918..a75cc5e0e 100644
--- a/module/plugins/crypter/ChipDe.py
+++ b/module/plugins/crypter/ChipDe.py
@@ -7,18 +7,21 @@ from module.plugins.Crypter import Crypter
class ChipDe(Crypter):
__name__ = "ChipDe"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?chip.de/video/.*\.html'
__version__ = "0.1"
+
+ __pattern__ = r'http://(?:www\.)?chip.de/video/.*\.html'
+
__description__ = """Chip.de decrypter plugin"""
__author_name__ = "4Christopher"
__author_mail__ = "4Christopher@gmx.de"
+
def decrypt(self, pyfile):
self.html = self.load(pyfile.url)
try:
- url = re.search(r'"(http://video.chip.de/\d+?/.*)"', self.html).group(1)
- self.logDebug('The file URL is %s' % url)
+ f = re.search(r'"(http://video.chip.de/\d+?/.*)"', self.html)
except:
self.fail('Failed to find the URL')
-
- self.packages.append((pyfile.package().name, [url], pyfile.package().folder))
+ else:
+ self.urls = [f.group(1)]
+ self.logDebug('The file URL is %s' % self.urls[0])
diff --git a/module/plugins/crypter/CrockoComFolder.py b/module/plugins/crypter/CrockoComFolder.py
index e64e63534..56abeac29 100644
--- a/module/plugins/crypter/CrockoComFolder.py
+++ b/module/plugins/crypter/CrockoComFolder.py
@@ -6,8 +6,10 @@ from module.plugins.internal.SimpleCrypter import SimpleCrypter
class CrockoComFolder(SimpleCrypter):
__name__ = "CrockoComFolder"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?crocko.com/f/.*'
__version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?crocko.com/f/.*'
+
__description__ = """Crocko.com folder decrypter plugin"""
__author_name__ = "zoidberg"
__author_mail__ = "zoidberg@mujmail.cz"
diff --git a/module/plugins/crypter/CryptItCom.py b/module/plugins/crypter/CryptItCom.py
index 6f8fbaa1a..66c5e7ca7 100644
--- a/module/plugins/crypter/CryptItCom.py
+++ b/module/plugins/crypter/CryptItCom.py
@@ -6,8 +6,10 @@ from module.plugins.internal.DeadCrypter import DeadCrypter
class CryptItCom(DeadCrypter):
__name__ = "CryptItCom"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?crypt-it\.com/(s|e|d|c)/[\w]+'
__version__ = "0.11"
+
+ __pattern__ = r'http://(?:www\.)?crypt-it\.com/(s|e|d|c)/[\w]+'
+
__description__ = """Crypt-it.com decrypter plugin"""
__author_name__ = "jeix"
__author_mail__ = "jeix@hasnomail.de"
diff --git a/module/plugins/crypter/CzshareComFolder.py b/module/plugins/crypter/CzshareComFolder.py
index d1ba8335c..64affc867 100644
--- a/module/plugins/crypter/CzshareComFolder.py
+++ b/module/plugins/crypter/CzshareComFolder.py
@@ -7,25 +7,25 @@ from module.plugins.Crypter import Crypter
class CzshareComFolder(Crypter):
__name__ = "CzshareComFolder"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?(czshare|sdilej)\.(com|cz)/folders/.*'
__version__ = "0.2"
+
+ __pattern__ = r'http://(?:www\.)?(czshare|sdilej)\.(com|cz)/folders/.*'
+
__description__ = """Czshare.com folder decrypter plugin, now Sdilej.cz"""
__author_name__ = "zoidberg"
__author_mail__ = "zoidberg@mujmail.cz"
FOLDER_PATTERN = r'<tr class="subdirectory">\s*<td>\s*<table>(.*?)</table>'
LINK_PATTERN = r'<td class="col2"><a href="([^"]+)">info</a></td>'
- #NEXT_PAGE_PATTERN = r'<a class="next " href="/([^"]+)">&nbsp;</a>'
+
def decrypt(self, pyfile):
html = self.load(pyfile.url)
- new_links = []
- found = re.search(self.FOLDER_PATTERN, html, re.DOTALL)
- if found is None: self.fail("Parse error (FOLDER)")
- new_links.extend(re.findall(self.LINK_PATTERN, found.group(1)))
+ m = re.search(self.FOLDER_PATTERN, html, re.DOTALL)
+ if m is None:
+ self.fail("Parse error (FOLDER)")
- if new_links:
- self.core.files.addLinks(new_links, pyfile.package().id)
- else:
+ 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/module/plugins/crypter/DDLMusicOrg.py b/module/plugins/crypter/DDLMusicOrg.py
index 27cff3f9d..f5e7203d3 100644
--- a/module/plugins/crypter/DDLMusicOrg.py
+++ b/module/plugins/crypter/DDLMusicOrg.py
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
import re
+
from time import sleep
from module.plugins.Crypter import Crypter
@@ -9,12 +10,15 @@ from module.plugins.Crypter import Crypter
class DDLMusicOrg(Crypter):
__name__ = "DDLMusicOrg"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?ddl-music\.org/captcha/ddlm_cr\d\.php\?\d+\?\d+'
__version__ = "0.3"
+
+ __pattern__ = r'http://(?:www\.)?ddl-music\.org/captcha/ddlm_cr\d\.php\?\d+\?\d+'
+
__description__ = """Ddl-music.org decrypter plugin"""
__author_name__ = "mkaay"
__author_mail__ = "mkaay@mkaay.de"
+
def setup(self):
self.multiDL = False
@@ -39,6 +43,6 @@ class DDLMusicOrg(Crypter):
"linknr": linknr})
m = re.search(r"<form id=\"ff\" action=\"(.*?)\" method=\"post\">", htmlwithlink)
if m:
- self.packages.append((pyfile.package().name, [m.group(1)], pyfile.package().folder))
+ self.urls = [m.group(1)]
else:
self.retry()
diff --git a/module/plugins/crypter/DailymotionBatch.py b/module/plugins/crypter/DailymotionBatch.py
index 5c0dd9cec..e43d4e1fd 100644
--- a/module/plugins/crypter/DailymotionBatch.py
+++ b/module/plugins/crypter/DailymotionBatch.py
@@ -1,24 +1,8 @@
# -*- coding: utf-8 -*-
-"""
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License,
- or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>.
-
- @author: Walter Purcaro
-"""
+import re
from urlparse import urljoin
-import re
from module.common.json_layer import json_loads
from module.plugins.Crypter import Crypter
@@ -28,12 +12,15 @@ from module.utils import save_join
class DailymotionBatch(Crypter):
__name__ = "DailymotionBatch"
__type__ = "crypter"
- __pattern__ = r'https?://(?:www\.)?dailymotion\.com/((playlists/)?(?P<TYPE>playlist|user)/)?(?P<ID>[\w^_]+)(?(TYPE)|#)'
__version__ = "0.01"
+
+ __pattern__ = r'https?://(?:www\.)?dailymotion\.com/((playlists/)?(?P<TYPE>playlist|user)/)?(?P<ID>[\w^_]+)(?(TYPE)|#)'
+
__description__ = """Dailymotion.com channel & playlist decrypter"""
__author_name__ = "Walter Purcaro"
__author_mail__ = "vuolter@gmail.com"
+
def api_response(self, ref, req=None):
url = urljoin("https://api.dailymotion.com/", ref)
page = self.load(url, get=req)
@@ -47,8 +34,8 @@ class DailymotionBatch(Crypter):
if "error" in playlist:
return
- name = playlist["name"]
- owner = playlist["owner.screenname"]
+ name = playlist['name']
+ owner = playlist['owner.screenname']
return name, owner
def _getPlaylists(self, user_id, page=1):
@@ -59,10 +46,10 @@ class DailymotionBatch(Crypter):
if "error" in user:
return
- for playlist in user["list"]:
- yield playlist["id"]
+ for playlist in user['list']:
+ yield playlist['id']
- if user["has_more"]:
+ if user['has_more']:
for item in self._getPlaylists(user_id, page + 1):
yield item
@@ -77,10 +64,10 @@ class DailymotionBatch(Crypter):
if "error" in playlist:
return
- for video in playlist["list"]:
- yield video["url"]
+ for video in playlist['list']:
+ yield video['url']
- if playlist["has_more"]:
+ if playlist['has_more']:
for item in self._getVideos(id, page + 1):
yield item
diff --git a/module/plugins/crypter/DataHuFolder.py b/module/plugins/crypter/DataHuFolder.py
index 04ef152fc..4f6116100 100644
--- a/module/plugins/crypter/DataHuFolder.py
+++ b/module/plugins/crypter/DataHuFolder.py
@@ -1,18 +1,4 @@
# -*- coding: utf-8 -*-
-############################################################################
-# This program is free software: you can redistribute it and/or modify #
-# it under the terms of the GNU Affero General Public License as #
-# published by the Free Software Foundation, either version 3 of the #
-# License, or (at your option) any later version. #
-# #
-# This program is distributed in the hope that it will be useful, #
-# but WITHOUT ANY WARRANTY; without even the implied warranty of #
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
-# GNU Affero General Public License for more details. #
-# #
-# You should have received a copy of the GNU Affero General Public License #
-# along with this program. If not, see <http://www.gnu.org/licenses/>. #
-############################################################################
import re
@@ -22,8 +8,10 @@ from module.plugins.internal.SimpleCrypter import SimpleCrypter
class DataHuFolder(SimpleCrypter):
__name__ = "DataHuFolder"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?data.hu/dir/\w+'
__version__ = "0.03"
+
+ __pattern__ = r'http://(?:www\.)?data.hu/dir/\w+'
+
__description__ = """Data.hu folder decrypter plugin"""
__author_name__ = ("crash", "stickell")
__author_mail__ = "l.stickell@yahoo.it"
@@ -31,6 +19,7 @@ class DataHuFolder(SimpleCrypter):
LINK_PATTERN = r"<a href='(http://data\.hu/get/.+)' target='_blank'>\1</a>"
TITLE_PATTERN = ur'<title>(?P<title>.+) Let\xf6lt\xe9se</title>'
+
def decrypt(self, pyfile):
self.html = self.load(pyfile.url, decode=True)
diff --git a/module/plugins/crypter/DdlstorageComFolder.py b/module/plugins/crypter/DdlstorageComFolder.py
index 6501de822..3b1dc6dd6 100644
--- a/module/plugins/crypter/DdlstorageComFolder.py
+++ b/module/plugins/crypter/DdlstorageComFolder.py
@@ -1,29 +1,18 @@
# -*- coding: utf-8 -*-
-############################################################################
-# This program is free software: you can redistribute it and/or modify #
-# it under the terms of the GNU Affero General Public License as #
-# published by the Free Software Foundation, either version 3 of the #
-# License, or (at your option) any later version. #
-# #
-# This program is distributed in the hope that it will be useful, #
-# but WITHOUT ANY WARRANTY; without even the implied warranty of #
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
-# GNU Affero General Public License for more details. #
-# #
-# You should have received a copy of the GNU Affero General Public License #
-# along with this program. If not, see <http://www.gnu.org/licenses/>. #
-############################################################################
-from module.plugins.internal.SimpleCrypter import SimpleCrypter
+from module.plugins.internal.DeadCrypter import DeadCrypter, create_getInfo
-class DdlstorageComFolder(SimpleCrypter):
+class DdlstorageComFolder(DeadCrypter):
__name__ = "DdlstorageComFolder"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?ddlstorage.com/folder/\w{10}'
- __version__ = "0.02"
+ __version__ = "0.03"
+
+ __pattern__ = r'https?://(?:www\.)?ddlstorage\.com/folder/\w+'
+
__description__ = """DDLStorage.com folder decrypter plugin"""
__author_name__ = ("godofdream", "stickell")
__author_mail__ = ("soilfiction@gmail.com", "l.stickell@yahoo.it")
- LINK_PATTERN = '<a class="sub_title" style="text-decoration:none;" href="(http://www.ddlstorage.com/.*)">'
+
+getInfo = create_getInfo(SpeedLoadOrg)
diff --git a/module/plugins/crypter/DepositfilesComFolder.py b/module/plugins/crypter/DepositfilesComFolder.py
index 74d199e12..b7c273f0b 100644
--- a/module/plugins/crypter/DepositfilesComFolder.py
+++ b/module/plugins/crypter/DepositfilesComFolder.py
@@ -6,8 +6,10 @@ from module.plugins.internal.SimpleCrypter import SimpleCrypter
class DepositfilesComFolder(SimpleCrypter):
__name__ = "DepositfilesComFolder"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?depositfiles.com/folders/\w+'
__version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?depositfiles.com/folders/\w+'
+
__description__ = """Depositfiles.com folder decrypter plugin"""
__author_name__ = "zoidberg"
__author_mail__ = "zoidberg@mujmail.cz"
diff --git a/module/plugins/crypter/Dereferer.py b/module/plugins/crypter/Dereferer.py
index 4b6309c17..21529ddfd 100644
--- a/module/plugins/crypter/Dereferer.py
+++ b/module/plugins/crypter/Dereferer.py
@@ -1,22 +1,8 @@
# -*- coding: utf-8 -*-
-"""
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License,
- or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>.
-"""
-
import re
-import urllib
+
+from urllib import unquote
from module.plugins.Crypter import Crypter
@@ -24,12 +10,15 @@ from module.plugins.Crypter import Crypter
class Dereferer(Crypter):
__name__ = "Dereferer"
__type__ = "crypter"
- __pattern__ = r'https?://([^/]+)/.*?(?P<url>(ht|f)tps?(://|%3A%2F%2F).*)'
__version__ = "0.1"
+
+ __pattern__ = r'https?://([^/]+)/.*?(?P<url>(ht|f)tps?(://|%3A%2F%2F).*)'
+
__description__ = """Crypter for dereferers"""
__author_name__ = "zoidberg"
__author_mail__ = "zoidberg@mujmail.cz"
+
def decrypt(self, pyfile):
link = re.match(self.__pattern__, pyfile.url).group('url')
- self.core.files.addLinks([urllib.unquote(link).rstrip('+')], pyfile.package().id)
+ self.urls = [unquote(link).rstrip('+')]
diff --git a/module/plugins/crypter/DlProtectCom.py b/module/plugins/crypter/DlProtectCom.py
index dbe5bf705..4c958437a 100644
--- a/module/plugins/crypter/DlProtectCom.py
+++ b/module/plugins/crypter/DlProtectCom.py
@@ -1,22 +1,7 @@
# -*- coding: utf-8 -*-
-###############################################################################
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# @author: Walter Purcaro
-###############################################################################
import re
+
from base64 import urlsafe_b64encode
from time import time
@@ -26,13 +11,16 @@ from module.plugins.internal.SimpleCrypter import SimpleCrypter
class DlProtectCom(SimpleCrypter):
__name__ = "DlProtectCom"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?dl-protect\.com/((en|fr)/)?(?P<ID>\w+)'
__version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?dl-protect\.com/((en|fr)/)?(?P<ID>\w+)'
+
__description__ = """Dl-protect.com decrypter plugin"""
__author_name__ = "Walter Purcaro"
__author_mail__ = "vuolter@gmail.com"
- OFFLINE_PATTERN = ">Unfortunately, the link you are looking for is not found"
+ OFFLINE_PATTERN = r'>Unfortunately, the link you are looking for is not found'
+
def getLinks(self):
# Direct link with redirect
@@ -55,14 +43,14 @@ class DlProtectCom(SimpleCrypter):
post_req.update({"i": b64time, "submitform": "Decrypt+link"})
if ">Password :" in self.html:
- post_req["pwd"] = self.getPassword()
+ post_req['pwd'] = self.getPassword()
if ">Security Code" in self.html:
captcha_id = re.search(r'/captcha\.php\?uid=(.+?)"', self.html).group(1)
captcha_url = "http://www.dl-protect.com/captcha.php?uid=" + captcha_id
captcha_code = self.decryptCaptcha(captcha_url, imgtype="gif")
- post_req["secure"] = captcha_code
+ post_req['secure'] = captcha_code
self.html = self.load(self.pyfile.url, post=post_req)
diff --git a/module/plugins/crypter/DontKnowMe.py b/module/plugins/crypter/DontKnowMe.py
index 42a38e98f..23fbb8d52 100644
--- a/module/plugins/crypter/DontKnowMe.py
+++ b/module/plugins/crypter/DontKnowMe.py
@@ -1,7 +1,8 @@
# -*- coding: utf-8 -*-
import re
-import urllib
+
+from urllib import unquote
from module.plugins.Crypter import Crypter
@@ -9,14 +10,17 @@ from module.plugins.Crypter import Crypter
class DontKnowMe(Crypter):
__name__ = "DontKnowMe"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?dontknow.me/at/\?.+$'
__version__ = "0.1"
+
+ __pattern__ = r'http://(?:www\.)?dontknow.me/at/\?.+$'
+
__description__ = """DontKnow.me decrypter plugin"""
__author_name__ = "selaux"
- __author_mail__ = ""
+ __author_mail__ = None
+
+ LINK_PATTERN = r'http://dontknow.me/at/\?(.+)$'
- LINK_PATTERN = r"http://dontknow.me/at/\?(.+)$"
def decrypt(self, pyfile):
link = re.findall(self.LINK_PATTERN, pyfile.url)[0]
- self.core.files.addLinks([urllib.unquote(link)], pyfile.package().id)
+ self.urls = [unquote(link)]
diff --git a/module/plugins/crypter/DownloadVimeoCom.py b/module/plugins/crypter/DownloadVimeoCom.py
deleted file mode 100644
index 3e137bab1..000000000
--- a/module/plugins/crypter/DownloadVimeoCom.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-import HTMLParser
-from module.plugins.Crypter import Crypter
-
-
-class DownloadVimeoCom(Crypter):
- __name__ = 'DownloadVimeoCom'
- __type__ = 'crypter'
- __pattern__ = r'(?:http://vimeo\.com/\d*|http://smotri\.com/video/view/\?id=.*)'
- __version__ = '0.1'
- __description__ = """Vimeo.com decrypter plugin"""
- __author_name__ = "4Christopher"
- __author_mail__ = "4Christopher@gmx.de"
-
- BASE_URL = 'http://downloadvimeo.com'
-
- def decrypt(self, pyfile):
- self.package = pyfile.package()
- html = self.load('%s/generate?url=%s' % (self.BASE_URL, pyfile.url))
- h = HTMLParser.HTMLParser()
- try:
- f = re.search(r'cmd quality="(?P<quality>[^"]+?)">\s*?(?P<URL>[^<]*?)</cmd>', html)
- except:
- self.logDebug('Failed to find the URL')
- else:
- url = h.unescape(f.group('URL'))
- self.logDebug('Quality: %s, URL: %s' % (f.group('quality'), url))
- self.packages.append((self.package.name, [url], self.package.folder))
diff --git a/module/plugins/crypter/DuckCryptInfo.py b/module/plugins/crypter/DuckCryptInfo.py
index f44bac2e9..e7a5a59e9 100644
--- a/module/plugins/crypter/DuckCryptInfo.py
+++ b/module/plugins/crypter/DuckCryptInfo.py
@@ -1,48 +1,52 @@
# -*- coding: utf-8 -*-
import re
+
from module.lib.BeautifulSoup import BeautifulSoup
+
from module.plugins.Crypter import Crypter
class DuckCryptInfo(Crypter):
__name__ = "DuckCryptInfo"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?duckcrypt.info/(folder|wait|link)/(\w+)/?(\w*)'
__version__ = "0.02"
+
+ __pattern__ = r'http://(?:www\.)?duckcrypt.info/(folder|wait|link)/(\w+)/?(\w*)'
+
__description__ = """DuckCrypt.info decrypter plugin"""
__author_name__ = "godofdream"
__author_mail__ = "soilfiction@gmail.com"
TIMER_PATTERN = r'<span id="timer">(.*)</span>'
+
def decrypt(self, pyfile):
url = pyfile.url
# seems we don't need to wait
#src = self.req.load(str(url))
- #found = re.search(self.TIMER_PATTERN, src)
- #if found:
- # self.logDebug("Sleeping for" % found.group(1))
- # self.setWait(int(found.group(1)) ,False)
- found = re.match(self.__pattern__, url)
- if not found:
+ #m = re.search(self.TIMER_PATTERN, src)
+ #if m:
+ # self.logDebug("Sleeping for" % m.group(1))
+ # self.setWait(int(m.group(1)) ,False)
+ m = re.match(self.__pattern__, url)
+ if m is None:
self.fail('Weird error in link')
- if str(found.group(1)) == "link":
+ if str(m.group(1)) == "link":
self.handleLink(url)
else:
- self.handleFolder(found)
+ self.handleFolder(m)
-
- def handleFolder(self, found):
- src = self.load("http://duckcrypt.info/ajax/auth.php?hash=" + str(found.group(2)))
- found = re.match(self.__pattern__, src)
- self.logDebug("Redirectet to " + str(found.group(0)))
- src = self.load(str(found.group(0)))
+ def handleFolder(self, m):
+ src = self.load("http://duckcrypt.info/ajax/auth.php?hash=" + str(m.group(2)))
+ m = re.match(self.__pattern__, src)
+ self.logDebug("Redirectet to " + str(m.group(0)))
+ src = self.load(str(m.group(0)))
soup = BeautifulSoup(src)
cryptlinks = soup.findAll("div", attrs={"class": "folderbox"})
self.logDebug("Redirectet to " + str(cryptlinks))
if not cryptlinks:
- self.fail('no links found - (Plugin out of date?)')
+ self.fail('no links m - (Plugin out of date?)')
for clink in cryptlinks:
if clink.find("a"):
self.handleLink(clink.find("a")['href'])
@@ -50,8 +54,6 @@ class DuckCryptInfo(Crypter):
def handleLink(self, url):
src = self.load(url)
soup = BeautifulSoup(src)
- link = soup.find("iframe")["src"]
- if not link:
- self.logDebug('no links found - (Plugin out of date?)')
- else:
- self.core.files.addLinks([link], self.pyfile.package().id)
+ self.urls = [soup.find("iframe")['src']]
+ if not self.urls:
+ self.logDebug('no links m - (Plugin out of date?)')
diff --git a/module/plugins/crypter/DuploadOrgFolder.py b/module/plugins/crypter/DuploadOrgFolder.py
index 4913bdf2e..6f764f687 100644
--- a/module/plugins/crypter/DuploadOrgFolder.py
+++ b/module/plugins/crypter/DuploadOrgFolder.py
@@ -1,18 +1,4 @@
# -*- coding: utf-8 -*-
-############################################################################
-# This program is free software: you can redistribute it and/or modify #
-# it under the terms of the GNU Affero General Public License as #
-# published by the Free Software Foundation, either version 3 of the #
-# License, or (at your option) any later version. #
-# #
-# This program is distributed in the hope that it will be useful, #
-# but WITHOUT ANY WARRANTY; without even the implied warranty of #
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
-# GNU Affero General Public License for more details. #
-# #
-# You should have received a copy of the GNU Affero General Public License #
-# along with this program. If not, see <http://www.gnu.org/licenses/>. #
-############################################################################
from module.plugins.internal.SimpleCrypter import SimpleCrypter
@@ -20,8 +6,10 @@ from module.plugins.internal.SimpleCrypter import SimpleCrypter
class DuploadOrgFolder(SimpleCrypter):
__name__ = "DuploadOrgFolder"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?dupload\.org/folder/\d+/'
__version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?dupload\.org/folder/\d+/'
+
__description__ = """Dupload.org folder decrypter plugin"""
__author_name__ = "stickell"
__author_mail__ = "l.stickell@yahoo.it"
diff --git a/module/plugins/crypter/EasybytezComFolder.py b/module/plugins/crypter/EasybytezComFolder.py
index b4a6284fc..7832bef5f 100644
--- a/module/plugins/crypter/EasybytezComFolder.py
+++ b/module/plugins/crypter/EasybytezComFolder.py
@@ -1,18 +1,4 @@
# -*- coding: utf-8 -*-
-############################################################################
-# This program is free software: you can redistribute it and/or modify #
-# it under the terms of the GNU Affero General Public License as #
-# published by the Free Software Foundation, either version 3 of the #
-# License, or (at your option) any later version. #
-# #
-# This program is distributed in the hope that it will be useful, #
-# but WITHOUT ANY WARRANTY; without even the implied warranty of #
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
-# GNU Affero General Public License for more details. #
-# #
-# You should have received a copy of the GNU Affero General Public License #
-# along with this program. If not, see <http://www.gnu.org/licenses/>. #
-############################################################################
from module.plugins.internal.SimpleCrypter import SimpleCrypter
@@ -20,13 +6,15 @@ from module.plugins.internal.SimpleCrypter import SimpleCrypter
class EasybytezComFolder(SimpleCrypter):
__name__ = "EasybytezComFolder"
__type__ = "crypter"
+ __version__ = "0.06"
+
__pattern__ = r'http://(?:www\.)?easybytez\.com/users/(?P<ID>\d+/\d+)'
- __version__ = "0.05"
+
__description__ = """Easybytez.com decrypter plugin"""
__author_name__ = "stickell"
__author_mail__ = "l.stickell@yahoo.it"
- FILE_URL_REPLACEMENTS = [(__pattern__, r"http://www.easybytez.com/users/\g<ID>?per_page=10000")]
+ 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+: (?P<title>.+) folder</Title>'
diff --git a/module/plugins/crypter/EmbeduploadCom.py b/module/plugins/crypter/EmbeduploadCom.py
index fbccf71aa..6b876ed7f 100644
--- a/module/plugins/crypter/EmbeduploadCom.py
+++ b/module/plugins/crypter/EmbeduploadCom.py
@@ -8,42 +8,43 @@ from module.network.HTTPRequest import BadHeader
class EmbeduploadCom(Crypter):
__name__ = "EmbeduploadCom"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?embedupload.com/\?d=.*'
__version__ = "0.02"
- __description__ = """EmbedUpload.com decrypter plugin"""
+
+ __pattern__ = r'http://(?:www\.)?embedupload.com/\?d=.*'
__config__ = [("preferedHoster", "str", "Prefered hoster list (bar-separated) ", "embedupload"),
("ignoredHoster", "str", "Ignored hoster list (bar-separated) ", "")]
+
+ __description__ = """EmbedUpload.com decrypter plugin"""
__author_name__ = "zoidberg"
__author_mail__ = "zoidberg@mujmail.cz"
LINK_PATTERN = r'<div id="([^"]+)"[^>]*>\s*<a href="([^"]+)" target="_blank" (?:class="DownloadNow"|style="color:red")>'
+
def decrypt(self, pyfile):
self.html = self.load(pyfile.url, decode=True)
tmp_links = []
- new_links = []
- found = re.findall(self.LINK_PATTERN, self.html)
- if found:
+ m = re.findall(self.LINK_PATTERN, self.html)
+ if m:
prefered_set = set(self.getConfig("preferedHoster").split('|'))
prefered_set = map(lambda s: s.lower().split('.')[0], prefered_set)
print "PF", prefered_set
- tmp_links.extend([x[1] for x in found if x[0] in prefered_set])
- self.getLocation(tmp_links, new_links)
+ tmp_links.extend([x[1] for x in m if x[0] in prefered_set])
+ self.urls = self.getLocation(tmp_links)
- if not new_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
- tmp_links.extend([x[1] for x in found if x[0] not in ignored_set])
- self.getLocation(tmp_links, new_links)
+ tmp_links.extend([x[1] for x in m if x[0] not in ignored_set])
+ self.urls = self.getLocation(tmp_links)
- if new_links:
- self.core.files.addLinks(new_links, pyfile.package().id)
- else:
+ if not self.urls:
self.fail('Could not extract any links')
- def getLocation(self, tmp_links, new_links):
+ def getLocation(self, tmp_links):
+ new_links = []
for link in tmp_links:
try:
header = self.load(link, just_header=True)
@@ -51,3 +52,4 @@ class EmbeduploadCom(Crypter):
new_links.append(header['location'])
except BadHeader:
pass
+ return new_links
diff --git a/module/plugins/crypter/FilebeerInfoFolder.py b/module/plugins/crypter/FilebeerInfoFolder.py
index f5818e072..0743dcb0f 100644
--- a/module/plugins/crypter/FilebeerInfoFolder.py
+++ b/module/plugins/crypter/FilebeerInfoFolder.py
@@ -6,8 +6,10 @@ from module.plugins.internal.DeadCrypter import DeadCrypter
class FilebeerInfoFolder(DeadCrypter):
__name__ = "FilebeerInfoFolder"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?filebeer\.info/(\d+~f).*'
__version__ = "0.02"
+
+ __pattern__ = r'http://(?:www\.)?filebeer\.info/(\d+~f).*'
+
__description__ = """Filebeer.info folder decrypter plugin"""
__author_name__ = "zoidberg"
__author_mail__ = "zoidberg@mujmail.cz"
diff --git a/module/plugins/crypter/FilecloudIoFolder.py b/module/plugins/crypter/FilecloudIoFolder.py
new file mode 100644
index 000000000..9ec950061
--- /dev/null
+++ b/module/plugins/crypter/FilecloudIoFolder.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from module.plugins.internal.SimpleCrypter import SimpleCrypter
+
+
+class FilecloudIoFolder(SimpleCrypter):
+ __name__ = "FilecloudIoFolder"
+ __type__ = "crypter"
+ __version__ = "0.01"
+
+ __pattern__ = r'https?://(?:www\.)?(filecloud\.io|ifile\.it)/_\w+'
+
+ __description__ = """Filecloud.io folder decrypter plugin"""
+ __author_name__ = "Walter Purcaro"
+ __author_mail__ = "vuolter@gmail.com"
+
+ LINK_PATTERN = r'href="(http://filecloud.io/\w+)" title'
+ TITLE_PATTERN = r'>(?P<title>.+?) - filecloud.io<'
diff --git a/module/plugins/crypter/FilefactoryComFolder.py b/module/plugins/crypter/FilefactoryComFolder.py
index aece1a01d..562c56732 100644
--- a/module/plugins/crypter/FilefactoryComFolder.py
+++ b/module/plugins/crypter/FilefactoryComFolder.py
@@ -1,45 +1,25 @@
# -*- coding: utf-8 -*-
-import re
-from module.plugins.Crypter import Crypter
+from module.plugins.internal.SimpleCrypter import SimpleCrypter
-class FilefactoryComFolder(Crypter):
+class FilefactoryComFolder(SimpleCrypter):
__name__ = "FilefactoryComFolder"
__type__ = "crypter"
- __pattern__ = r'(http://(?:www\.)?filefactory\.com/f/\w+).*'
- __version__ = "0.1"
+ __version__ = "0.2"
+
+ __pattern__ = r'https?://(?:www\.)?filefactory\.com/(?:f|folder)/\w+'
+
__description__ = """Filefactory.com folder decrypter plugin"""
- __author_name__ = "zoidberg"
- __author_mail__ = "zoidberg@mujmail.cz"
-
- FOLDER_PATTERN = r'<table class="items" cellspacing="0" cellpadding="0">(.*?)</table>'
- LINK_PATTERN = r'<td class="name"><a href="([^"]+)">'
- PAGINATOR_PATTERN = r'<div class="list">\s*<label>Pages</label>\s*<ul>(.*?)</ul>\s*</div>'
- NEXT_PAGE_PATTERN = r'<li class="current">.*?</li>\s*<li class=""><a href="([^"]+)">'
-
- def decrypt(self, pyfile):
- url_base = re.match(self.__pattern__, pyfile.url).group(1)
- html = self.load(url_base)
-
- new_links = []
- for i in xrange(1, 100):
- self.logInfo("Fetching links from page %i" % i)
- found = re.search(self.FOLDER_PATTERN, html, re.DOTALL)
- if found is None: self.fail("Parse error (FOLDER)")
-
- new_links.extend(re.findall(self.LINK_PATTERN, found.group(1)))
-
- try:
- paginator = re.search(self.PAGINATOR_PATTERN, html, re.DOTALL).group(1)
- next_page = re.search(self.NEXT_PAGE_PATTERN, paginator).group(1)
- html = self.load("%s/%s" % (url_base, next_page))
- except Exception, e:
- break
- else:
- self.logInfo("Limit of 99 pages reached, aborting")
-
- if new_links:
- self.core.files.addLinks(new_links, pyfile.package().id)
- else:
- self.fail('Could not extract any links')
+ __author_name__ = "stickell"
+ __author_mail__ = "l.stickell@yahoo.it"
+
+ LINK_PATTERN = r'<td><a href="([^"]+)">'
+ TITLE_PATTERN = r'<h1>Files in <span>(?P<title>.+)</span></h1>'
+ PAGES_PATTERN = r'data-paginator-totalPages="(?P<pages>\d+)"'
+
+ SH_COOKIES = [('.filefactory.com', 'locale', 'en_US.utf8')]
+
+
+ def loadPage(self, page_n):
+ return self.load(self.pyfile.url, get={'page': page_n})
diff --git a/module/plugins/crypter/FilerNetFolder.py b/module/plugins/crypter/FilerNetFolder.py
new file mode 100644
index 000000000..9951661b5
--- /dev/null
+++ b/module/plugins/crypter/FilerNetFolder.py
@@ -0,0 +1,22 @@
+import re
+
+from module.plugins.internal.SimpleCrypter import SimpleCrypter
+
+
+class FilerNetFolder(SimpleCrypter):
+ __name__ = "FilerNetFolder"
+ __type__ = "crypter"
+ __version__ = "0.3"
+
+ __pattern__ = r'https?://filer\.net/folder/\w{16}'
+
+ __description__ = """Filer.net decrypter plugin"""
+ __author_name_ = ("nath_schwarz", "stickell")
+ __author_mail_ = ("nathan.notwhite@gmail.com", "l.stickell@yahoo.it")
+
+ LINK_PATTERN = r'href="(/get/\w{16})">(?!<)'
+ TITLE_PATTERN = r'<h3>(?P<title>.+) - <small'
+
+
+ def getLinks(self):
+ return ['http://filer.net%s' % link for link in re.findall(self.LINK_PATTERN, self.html)]
diff --git a/module/plugins/crypter/FileserveComFolder.py b/module/plugins/crypter/FileserveComFolder.py
index c3c8b58fe..2db6baf0e 100644
--- a/module/plugins/crypter/FileserveComFolder.py
+++ b/module/plugins/crypter/FileserveComFolder.py
@@ -8,8 +8,10 @@ from module.plugins.Crypter import Crypter
class FileserveComFolder(Crypter):
__name__ = "FileserveComFolder"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?fileserve.com/list/\w+'
__version__ = "0.11"
+
+ __pattern__ = r'http://(?:www\.)?fileserve.com/list/\w+'
+
__description__ = """FileServe.com folder decrypter plugin"""
__author_name__ = "fionnc"
__author_mail__ = "fionnc@gmail.com"
@@ -17,17 +19,19 @@ class FileserveComFolder(Crypter):
FOLDER_PATTERN = r'<table class="file_list">(.*?)</table>'
LINK_PATTERN = r'<a href="([^"]+)" class="sheet_icon wbold">'
+
def decrypt(self, pyfile):
html = self.load(pyfile.url)
new_links = []
folder = re.search(self.FOLDER_PATTERN, html, re.DOTALL)
- if folder is None: self.fail("Parse error (FOLDER)")
+ if folder is None:
+ self.fail("Parse error (FOLDER)")
new_links.extend(re.findall(self.LINK_PATTERN, folder.group(1)))
if new_links:
- self.core.files.addLinks(map(lambda s: "http://fileserve.com%s" % s, new_links), pyfile.package().id)
+ self.urls = [map(lambda s: "http://fileserve.com%s" % s, new_links)]
else:
self.fail('Could not extract any links')
diff --git a/module/plugins/crypter/FilestubeCom.py b/module/plugins/crypter/FilestubeCom.py
index f4f09e878..f0aaaa579 100644
--- a/module/plugins/crypter/FilestubeCom.py
+++ b/module/plugins/crypter/FilestubeCom.py
@@ -1,18 +1,4 @@
# -*- coding: utf-8 -*-
-############################################################################
-# This program is free software: you can redistribute it and/or modify #
-# it under the terms of the GNU Affero General Public License as #
-# published by the Free Software Foundation, either version 3 of the #
-# License, or (at your option) any later version. #
-# #
-# This program is distributed in the hope that it will be useful, #
-# but WITHOUT ANY WARRANTY; without even the implied warranty of #
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
-# GNU Affero General Public License for more details. #
-# #
-# You should have received a copy of the GNU Affero General Public License #
-# along with this program. If not, see <http://www.gnu.org/licenses/>. #
-############################################################################
from module.plugins.internal.SimpleCrypter import SimpleCrypter
@@ -20,11 +6,13 @@ from module.plugins.internal.SimpleCrypter import SimpleCrypter
class FilestubeCom(SimpleCrypter):
__name__ = "FilestubeCom"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?filestube\.(?:com|to)/\w+'
__version__ = "0.03"
+
+ __pattern__ = r'http://(?:www\.)?filestube\.(?:com|to)/\w+'
+
__description__ = """Filestube.com decrypter plugin"""
__author_name__ = "stickell"
__author_mail__ = "l.stickell@yahoo.it"
- LINK_PATTERN = r"<a class=\"file-link-main(?: noref)?\" [^>]* href=\"(http://[^\"]+)"
- TITLE_PATTERN = r"<h1\s*> (?P<title>.+) download\s*</h1>"
+ LINK_PATTERN = r'<a class=\"file-link-main(?: noref)?\" [^>]* href=\"(http://[^\"]+)'
+ TITLE_PATTERN = r'<h1\s*> (?P<title>.+) download\s*</h1>'
diff --git a/module/plugins/crypter/FiletramCom.py b/module/plugins/crypter/FiletramCom.py
index 8cdf32ad5..7052955cf 100644
--- a/module/plugins/crypter/FiletramCom.py
+++ b/module/plugins/crypter/FiletramCom.py
@@ -1,18 +1,4 @@
# -*- coding: utf-8 -*-
-############################################################################
-# This program is free software: you can redistribute it and/or modify #
-# it under the terms of the GNU Affero General Public License as #
-# published by the Free Software Foundation, either version 3 of the #
-# License, or (at your option) any later version. #
-# #
-# This program is distributed in the hope that it will be useful, #
-# but WITHOUT ANY WARRANTY; without even the implied warranty of #
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
-# GNU Affero General Public License for more details. #
-# #
-# You should have received a copy of the GNU Affero General Public License #
-# along with this program. If not, see <http://www.gnu.org/licenses/>. #
-############################################################################
from module.plugins.internal.SimpleCrypter import SimpleCrypter
@@ -20,11 +6,13 @@ from module.plugins.internal.SimpleCrypter import SimpleCrypter
class FiletramCom(SimpleCrypter):
__name__ = "FiletramCom"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?filetram.com/[^/]+/.+'
__version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?filetram.com/[^/]+/.+'
+
__description__ = """Filetram.com decrypter plugin"""
__author_name__ = ("igel", "stickell")
__author_mail__ = ("igelkun@myopera.com", "l.stickell@yahoo.it")
- LINK_PATTERN = r"\s+(http://.+)"
- TITLE_PATTERN = r"<title>(?P<title>[^<]+) - Free Download[^<]*</title>"
+ LINK_PATTERN = r'\s+(http://.+)'
+ TITLE_PATTERN = r'<title>(?P<title>[^<]+) - Free Download[^<]*</title>'
diff --git a/module/plugins/crypter/FiredriveComFolder.py b/module/plugins/crypter/FiredriveComFolder.py
new file mode 100644
index 000000000..a94d0847f
--- /dev/null
+++ b/module/plugins/crypter/FiredriveComFolder.py
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from module.plugins.internal.SimpleCrypter import SimpleCrypter
+
+
+class FiredriveComFolder(SimpleCrypter):
+ __name__ = "FiredriveComFolder"
+ __type__ = "crypter"
+ __version__ = "0.01"
+
+ __pattern__ = r'https?://(?:www\.)?(firedrive|putlocker)\.com/share/.+'
+
+ __description__ = """Firedrive.com folder decrypter plugin"""
+ __author_name__ = "Walter Purcaro"
+ __author_mail__ = "vuolter@gmail.com"
+
+ LINK_PATTERN = r'<div class="pf_item pf_(file|folder).+?public=\'(.+?)\''
+ TITLE_PATTERN = r'>Shared Folder "(?P<title>.+)" | 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))
diff --git a/module/plugins/crypter/FourChanOrg.py b/module/plugins/crypter/FourChanOrg.py
index 010451c46..c497fa799 100644
--- a/module/plugins/crypter/FourChanOrg.py
+++ b/module/plugins/crypter/FourChanOrg.py
@@ -1,4 +1,6 @@
# -*- coding: utf-8 -*-
+#
+# Based on 4chandl by Roland Beermann (https://gist.github.com/enkore/3492599)
import re
@@ -6,20 +8,18 @@ from module.plugins.Crypter import Crypter
class FourChanOrg(Crypter):
- # Based on 4chandl by Roland Beermann
- # https://gist.github.com/enkore/3492599
__name__ = "FourChanOrg"
__type__ = "crypter"
__version__ = "0.3"
+
__pattern__ = r'http://(?:www\.)?boards\.4chan.org/\w+/res/(\d+)'
+
__description__ = """4chan.org folder decrypter plugin"""
+ __author_name__ = None
+ __author_mail__ = None
+
def decrypt(self, pyfile):
pagehtml = self.load(pyfile.url)
-
images = set(re.findall(r'(images\.4chan\.org/[^/]*/src/[^"<]*)', pagehtml))
- urls = []
- for image in images:
- urls.append("http://" + image)
-
- self.core.files.addLinks(urls, pyfile.package().id)
+ self.urls = ["http://" + image for image in images]
diff --git a/module/plugins/crypter/FreakhareComFolder.py b/module/plugins/crypter/FreakhareComFolder.py
index c5df7ff17..2a6877891 100644
--- a/module/plugins/crypter/FreakhareComFolder.py
+++ b/module/plugins/crypter/FreakhareComFolder.py
@@ -1,18 +1,4 @@
# -*- coding: utf-8 -*-
-############################################################################
-# This program is free software: you can redistribute it and/or modify #
-# it under the terms of the GNU Affero General Public License as #
-# published by the Free Software Foundation, either version 3 of the #
-# License, or (at your option) any later version. #
-# #
-# This program is distributed in the hope that it will be useful, #
-# but WITHOUT ANY WARRANTY; without even the implied warranty of #
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
-# GNU Affero General Public License for more details. #
-# #
-# You should have received a copy of the GNU Affero General Public License #
-# along with this program. If not, see <http://www.gnu.org/licenses/>. #
-############################################################################
import re
@@ -22,8 +8,10 @@ from module.plugins.internal.SimpleCrypter import SimpleCrypter
class FreakhareComFolder(SimpleCrypter):
__name__ = "FreakhareComFolder"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?freakshare\.com/folder/.+'
__version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?freakshare\.com/folder/.+'
+
__description__ = """Freakhare.com folder decrypter plugin"""
__author_name__ = "stickell"
__author_mail__ = "l.stickell@yahoo.it"
@@ -32,6 +20,7 @@ class FreakhareComFolder(SimpleCrypter):
TITLE_PATTERN = r'Folder:</b> (?P<title>.+)'
PAGES_PATTERN = r'Pages: +(?P<pages>\d+)'
+
def loadPage(self, page_n):
if not hasattr(self, 'f_id') and not hasattr(self, 'f_md5'):
m = re.search(r'http://freakshare.com/\?x=folder&f_id=(\d+)&f_md5=(\w+)', self.html)
diff --git a/module/plugins/crypter/FreetexthostCom.py b/module/plugins/crypter/FreetexthostCom.py
index e5c9c3d21..bd8a90ce5 100644
--- a/module/plugins/crypter/FreetexthostCom.py
+++ b/module/plugins/crypter/FreetexthostCom.py
@@ -1,18 +1,4 @@
# -*- coding: utf-8 -*-
-############################################################################
-# This program is free software: you can redistribute it and/or modify #
-# it under the terms of the GNU Affero General Public License as #
-# published by the Free Software Foundation, either version 3 of the #
-# License, or (at your option) any later version. #
-# #
-# This program is distributed in the hope that it will be useful, #
-# but WITHOUT ANY WARRANTY; without even the implied warranty of #
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
-# GNU Affero General Public License for more details. #
-# #
-# You should have received a copy of the GNU Affero General Public License #
-# along with this program. If not, see <http://www.gnu.org/licenses/>. #
-############################################################################
import re
@@ -22,15 +8,18 @@ from module.plugins.internal.SimpleCrypter import SimpleCrypter
class FreetexthostCom(SimpleCrypter):
__name__ = "FreetexthostCom"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?freetexthost\.com/\w+'
__version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?freetexthost\.com/\w+'
+
__description__ = """Freetexthost.com decrypter plugin"""
__author_name__ = "stickell"
__author_mail__ = "l.stickell@yahoo.it"
+
def getLinks(self):
m = re.search(r'<div id="contentsinner">\s*(.+)<div class="viewcount">', self.html, re.DOTALL)
- if not m:
+ if m is None:
self.fail('Unable to extract links | Plugin may be out-of-date')
links = m.group(1)
return links.strip().split("<br />\r\n")
diff --git a/module/plugins/crypter/FshareVnFolder.py b/module/plugins/crypter/FshareVnFolder.py
index 6e67905d9..5976ff6d5 100644
--- a/module/plugins/crypter/FshareVnFolder.py
+++ b/module/plugins/crypter/FshareVnFolder.py
@@ -6,8 +6,10 @@ from module.plugins.internal.SimpleCrypter import SimpleCrypter
class FshareVnFolder(SimpleCrypter):
__name__ = "FshareVnFolder"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?fshare.vn/folder/.*'
__version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?fshare.vn/folder/.*'
+
__description__ = """Fshare.vn folder decrypter plugin"""
__author_name__ = "zoidberg"
__author_mail__ = "zoidberg@mujmail.cz"
diff --git a/module/plugins/crypter/GooGl.py b/module/plugins/crypter/GooGl.py
index 15f0a9a8c..1d9c2801f 100644
--- a/module/plugins/crypter/GooGl.py
+++ b/module/plugins/crypter/GooGl.py
@@ -1,18 +1,4 @@
# -*- coding: utf-8 -*-
-############################################################################
-# This program is free software: you can redistribute it and/or modify #
-# it under the terms of the GNU Affero General Public License as #
-# published by the Free Software Foundation, either version 3 of the #
-# License, or (at your option) any later version. #
-# #
-# This program is distributed in the hope that it will be useful, #
-# but WITHOUT ANY WARRANTY; without even the implied warranty of #
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
-# GNU Affero General Public License for more details. #
-# #
-# You should have received a copy of the GNU Affero General Public License #
-# along with this program. If not, see <http://www.gnu.org/licenses/>. #
-############################################################################
from module.plugins.Crypter import Crypter
from module.common.json_layer import json_loads
@@ -21,13 +7,16 @@ from module.common.json_layer import json_loads
class GooGl(Crypter):
__name__ = "GooGl"
__type__ = "crypter"
- __pattern__ = r'https?://(?:www\.)?goo\.gl/\w+'
__version__ = "0.01"
+
+ __pattern__ = r'https?://(?:www\.)?goo\.gl/\w+'
+
__description__ = """Goo.gl decrypter plugin"""
__author_name__ = "stickell"
__author_mail__ = "l.stickell@yahoo.it"
- API_URL = 'https://www.googleapis.com/urlshortener/v1/url'
+ API_URL = "https://www.googleapis.com/urlshortener/v1/url"
+
def decrypt(self, pyfile):
rep = self.load(self.API_URL, get={'shortUrl': pyfile.url})
@@ -35,6 +24,6 @@ class GooGl(Crypter):
rep = json_loads(rep)
if 'longUrl' in rep:
- self.core.files.addLinks([rep['longUrl']], pyfile.package().id)
+ self.urls = [rep['longUrl']]
else:
self.fail('Unable to expand shortened link')
diff --git a/module/plugins/crypter/HoerbuchIn.py b/module/plugins/crypter/HoerbuchIn.py
index c6773b3f0..924ce5d3a 100644
--- a/module/plugins/crypter/HoerbuchIn.py
+++ b/module/plugins/crypter/HoerbuchIn.py
@@ -2,15 +2,18 @@
import re
-from module.plugins.Crypter import Crypter
from module.lib.BeautifulSoup import BeautifulSoup, BeautifulStoneSoup
+from module.plugins.Crypter import Crypter
+
class HoerbuchIn(Crypter):
__name__ = "HoerbuchIn"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?hoerbuch\.in/(wp/horbucher/\d+/.+/|tp/out.php\?.+|protection/folder_\d+\.html)'
__version__ = "0.6"
+
+ __pattern__ = r'http://(?:www\.)?hoerbuch\.in/(wp/horbucher/\d+/.+/|tp/out.php\?.+|protection/folder_\d+\.html)'
+
__description__ = """Hoerbuch.in decrypter plugin"""
__author_name__ = ("spoob", "mkaay")
__author_mail__ = ("spoob@pyload.org", "mkaay@mkaay.de")
@@ -18,6 +21,7 @@ class HoerbuchIn(Crypter):
article = re.compile("http://(?:www\.)?hoerbuch\.in/wp/horbucher/\d+/.+/")
protection = re.compile("http://(?:www\.)?hoerbuch\.in/protection/folder_\d+.html")
+
def decrypt(self, pyfile):
self.pyfile = pyfile
@@ -28,17 +32,15 @@ class HoerbuchIn(Crypter):
abookname = soup.find("a", attrs={"rel": "bookmark"}).text
for a in soup.findAll("a", attrs={"href": self.protection}):
package = "%s (%s)" % (abookname, a.previousSibling.previousSibling.text[:-1])
- links = self.decryptFolder(a["href"])
+ links = self.decryptFolder(a['href'])
- self.packages.append((package, links, pyfile.package().folder))
+ self.packages.append((package, links, package))
else:
- links = self.decryptFolder(pyfile.url)
-
- self.packages.append((pyfile.package().name, links, pyfile.package().folder))
+ self.urls = self.decryptFolder(pyfile.url)
def decryptFolder(self, url):
m = self.protection.search(url)
- if not m:
+ if m is None:
self.fail("Bad URL")
url = m.group(0)
diff --git a/module/plugins/crypter/HotfileFolderCom.py b/module/plugins/crypter/HotfileFolderCom.py
index 3a4a9d70a..3efd8fc87 100644
--- a/module/plugins/crypter/HotfileFolderCom.py
+++ b/module/plugins/crypter/HotfileFolderCom.py
@@ -8,12 +8,15 @@ from module.plugins.Crypter import Crypter
class HotfileFolderCom(Crypter):
__name__ = "HotfileFolderCom"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?hotfile.com/list/\w+/\w+'
__version__ = "0.1"
+
+ __pattern__ = r'http://(?:www\.)?hotfile.com/list/\w+/\w+'
+
__description__ = """Hotfile.com folder decrypter plugin"""
__author_name__ = "RaNaN"
__author_mail__ = "RaNaN@pyload.org"
+
def decrypt(self, pyfile):
html = self.load(pyfile.url)
@@ -24,4 +27,4 @@ class HotfileFolderCom(Crypter):
new_links = [x[0] for x in new_links]
- self.packages.append((name, new_links, name))
+ self.packages = [(name, new_links, name)]
diff --git a/module/plugins/crypter/ILoadTo.py b/module/plugins/crypter/ILoadTo.py
index 3a388d41f..d7818570a 100644
--- a/module/plugins/crypter/ILoadTo.py
+++ b/module/plugins/crypter/ILoadTo.py
@@ -6,8 +6,10 @@ from module.plugins.internal.DeadCrypter import DeadCrypter
class ILoadTo(DeadCrypter):
__name__ = "ILoadTo"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?iload\.to/go/\d+-[\w\.-]+/'
__version__ = "0.11"
+
+ __pattern__ = r'http://(?:www\.)?iload\.to/go/\d+-[\w\.-]+/'
+
__description__ = """Iload.to decrypter plugin"""
__author_name__ = "hzpz"
- __author_mail__ = ""
+ __author_mail__ = None
diff --git a/module/plugins/crypter/ImgurComAlbum.py b/module/plugins/crypter/ImgurComAlbum.py
new file mode 100644
index 000000000..eb1f4441a
--- /dev/null
+++ b/module/plugins/crypter/ImgurComAlbum.py
@@ -0,0 +1,24 @@
+import re
+
+from module.plugins.internal.SimpleCrypter import SimpleCrypter
+from module.utils import uniqify
+
+
+class ImgurComAlbum(SimpleCrypter):
+ __name__ = "ImgurComAlbum"
+ __type__ = "crypter"
+ __version__ = "0.4"
+
+ __pattern__ = r'https?://(?:www\.|m\.)?imgur\.com/(a|gallery|)/?\w{5,7}'
+
+ __description__ = """Imgur.com decrypter plugin"""
+ __author_name_ = "nath_schwarz"
+ __author_mail_ = "nathan.notwhite@gmail.com"
+
+ TITLE_PATTERN = r'(?P<title>.+) - Imgur'
+ LINK_PATTERN = r'i\.imgur\.com/\w{7}s?\.(?:jpeg|jpg|png|gif|apng)'
+
+
+ def getLinks(self):
+ f = lambda url: "http://" + re.sub(r'(\w{7})s\.', r'\1.', url)
+ return uniqify(map(f, re.findall(self.LINK_PATTERN, self.html)))
diff --git a/module/plugins/crypter/LetitbitNetFolder.py b/module/plugins/crypter/LetitbitNetFolder.py
index 8e994984b..0297d2007 100644
--- a/module/plugins/crypter/LetitbitNetFolder.py
+++ b/module/plugins/crypter/LetitbitNetFolder.py
@@ -7,8 +7,10 @@ from module.plugins.Crypter import Crypter
class LetitbitNetFolder(Crypter):
__name__ = "LetitbitNetFolder"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?letitbit.net/folder/\w+'
__version__ = "0.1"
+
+ __pattern__ = r'http://(?:www\.)?letitbit.net/folder/\w+'
+
__description__ = """Letitbit.net folder decrypter plugin"""
__author_name__ = ("DHMH", "z00nx")
__author_mail__ = ("webmaster@pcProfil.de", "z00nx0@gmail.com")
@@ -16,18 +18,15 @@ class LetitbitNetFolder(Crypter):
FOLDER_PATTERN = r'<table>(.*)</table>'
LINK_PATTERN = r'<a href="([^"]+)" target="_blank">'
+
def decrypt(self, pyfile):
html = self.load(pyfile.url)
- new_links = []
-
folder = re.search(self.FOLDER_PATTERN, html, re.DOTALL)
if folder is None:
self.fail("Parse error (FOLDER)")
- new_links.extend(re.findall(self.LINK_PATTERN, folder.group(0)))
+ self.urls.extend(re.findall(self.LINK_PATTERN, folder.group(0)))
- if new_links:
- self.core.files.addLinks(new_links, pyfile.package().id)
- else:
+ if not self.urls:
self.fail('Could not extract any links')
diff --git a/module/plugins/crypter/LinkSaveIn.py b/module/plugins/crypter/LinkSaveIn.py
index 85dde6c87..060a434d2 100644
--- a/module/plugins/crypter/LinkSaveIn.py
+++ b/module/plugins/crypter/LinkSaveIn.py
@@ -1,10 +1,7 @@
# -*- coding: utf-8 -*-
-
#
-# v2.01 - hagg
# * cnl2 and web links are skipped if JS is not available (instead of failing the package)
# * only best available link source is used (priority: cnl2>rsdf>ccf>dlc>web
-#
import base64
import binascii
@@ -18,8 +15,10 @@ from module.unescape import unescape
class LinkSaveIn(Crypter):
__name__ = "LinkSaveIn"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?linksave.in/(?P<id>\w+)$'
__version__ = "2.01"
+
+ __pattern__ = r'http://(?:www\.)?linksave.in/(?P<id>\w+)$'
+
__description__ = """LinkSave.in decrypter plugin"""
__author_name__ = "fragonib"
__author_mail__ = "fragonib[AT]yahoo[DOT]es"
@@ -27,21 +26,21 @@ class LinkSaveIn(Crypter):
# Constants
_JK_KEY_ = "jk"
_CRYPTED_KEY_ = "crypted"
- HOSTER_DOMAIN = "linksave.in"
+ HOSTER_NAME = "linksave.in"
+
def setup(self):
self.html = None
self.fileid = None
self.captcha = False
self.package = None
- self.preferred_sources = ['cnl2', 'rsdf', 'ccf', 'dlc', 'web']
+ self.preferred_sources = ["cnl2", "rsdf", "ccf", "dlc", "web"]
def decrypt(self, pyfile):
-
# Init
self.package = pyfile.package()
self.fileid = re.match(self.__pattern__, pyfile.url).group('id')
- self.req.cj.setCookie(self.HOSTER_DOMAIN, "Linksave_Language", "english")
+ self.req.cj.setCookie(self.HOSTER_NAME, "Linksave_Language", "english")
# Request package
self.html = self.load(pyfile.url)
@@ -124,11 +123,11 @@ class LinkSaveIn(Crypter):
self.correctCaptcha()
def handleLinkSource(self, type_):
- if type_ == 'cnl2':
+ if type_ == "cnl2":
return self.handleCNL2()
- elif type_ in ('rsdf', 'ccf', 'dlc'):
+ elif type_ in ("rsdf", "ccf", "dlc"):
return self.handleContainer(type_)
- elif type_ == 'web':
+ elif type_ == "web":
return self.handleWebLinks()
else:
self.fail('unknown source type "%s" (this is probably a bug)' % type_)
@@ -189,7 +188,6 @@ class LinkSaveIn(Crypter):
return package_links
def _getCipherParams(self):
-
# Get jk
jk_re = r'<INPUT.*?NAME="%s".*?VALUE="(.*?)"' % LinkSaveIn._JK_KEY_
vjk = re.findall(jk_re, self.html)
@@ -203,7 +201,6 @@ class LinkSaveIn(Crypter):
return vcrypted, vjk
def _getLinks(self, crypted, jk):
-
# Get key
jreturn = self.js.eval("%s f()" % jk)
self.logDebug("JsEngine returns value [%s]" % jreturn)
diff --git a/module/plugins/crypter/LinkdecrypterCom.py b/module/plugins/crypter/LinkdecrypterCom.py
index a6e6faa40..21f05b962 100644
--- a/module/plugins/crypter/LinkdecrypterCom.py
+++ b/module/plugins/crypter/LinkdecrypterCom.py
@@ -1,22 +1,5 @@
# -*- coding: utf-8 -*-
-"""
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License,
- or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>.
-
- @author: zoidberg
-"""
-
import re
from module.plugins.Crypter import Crypter
@@ -25,6 +8,9 @@ class LinkdecrypterCom(Crypter):
__name__ = "LinkdecrypterCom"
__type__ = "crypter"
__version__ = "0.27"
+
+ __pattern__ = None
+
__description__ = """Linkdecrypter.com"""
__author_name__ = ("zoidberg", "flowlee")
__author_mail__ = ("zoidberg@mujmail.cz", "")
@@ -34,15 +20,14 @@ class LinkdecrypterCom(Crypter):
CAPTCHA_PATTERN = r'<img class="captcha" src="(.+?)"(.*?)>'
REDIR_PATTERN = r'<i>(Click <a href="./">here</a> if your browser does not redirect you).</i>'
+
def decrypt(self, pyfile):
self.passwords = self.getPassword().splitlines()
# API not working anymore
- new_links = self.decryptHTML()
- if new_links:
- self.core.files.addLinks(new_links, pyfile.package().id)
- else:
+ self.urls = self.decryptHTML()
+ if not self.urls:
self.fail('Could not extract any links')
def decryptAPI(self):
@@ -72,17 +57,17 @@ class LinkdecrypterCom(Crypter):
self.html = self.load('http://linkdecrypter.com/', post=post_dict, cookies=True, decode=True)
while self.passwords or retries:
- found = re.search(self.TEXTAREA_PATTERN, self.html, flags=re.DOTALL)
- if found:
- return [x for x in found.group(1).splitlines() if '[LINK-ERROR]' not in x]
+ m = re.search(self.TEXTAREA_PATTERN, self.html, flags=re.DOTALL)
+ if m:
+ return [x for x in m.group(1).splitlines() if '[LINK-ERROR]' not in x]
- found = re.search(self.CAPTCHA_PATTERN, self.html)
- if found:
- captcha_url = 'http://linkdecrypter.com/' + found.group(1)
- result_type = "positional" if "getPos" in found.group(2) else "textual"
+ m = re.search(self.CAPTCHA_PATTERN, self.html)
+ if m:
+ captcha_url = 'http://linkdecrypter.com/' + m.group(1)
+ result_type = "positional" if "getPos" in m.group(2) else "textual"
- found = re.search(r"<p><i><b>([^<]+)</b></i></p>", self.html)
- msg = found.group(1) if found else ""
+ 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)
captcha = self.decryptCaptcha(captcha_url, result_type=result_type)
diff --git a/module/plugins/crypter/LixIn.py b/module/plugins/crypter/LixIn.py
index 619a474f2..cdf87eeb2 100644
--- a/module/plugins/crypter/LixIn.py
+++ b/module/plugins/crypter/LixIn.py
@@ -8,39 +8,42 @@ from module.plugins.Crypter import Crypter
class LixIn(Crypter):
__name__ = "LixIn"
__type__ = "crypter"
- __pattern__ = r'http://(www.)?lix.in/(?P<id>.*)'
__version__ = "0.22"
+
+ __pattern__ = r'http://(www.)?lix.in/(?P<id>.*)'
+
__description__ = """Lix.in decrypter plugin"""
__author_name__ = "spoob"
__author_mail__ = "spoob@pyload.org"
- CAPTCHA_PATTERN = '<img src="(?P<image>captcha_img.php\?.*?)"'
+ CAPTCHA_PATTERN = r'<img src="(?P<image>captcha_img.php\?.*?)"'
SUBMIT_PATTERN = r"value='continue.*?'"
LINK_PATTERN = r'name="ifram" src="(?P<link>.*?)"'
+
def decrypt(self, pyfile):
url = pyfile.url
- matches = re.match(self.__pattern__, url)
- if not matches:
+ m = re.match(self.__pattern__, url)
+ if m is None:
self.fail("couldn't identify file id")
- id = matches.group("id")
+ id = m.group("id")
self.logDebug("File id is %s" % id)
self.html = self.req.load(url, decode=True)
- matches = re.search(self.SUBMIT_PATTERN, self.html)
- if not matches:
+ m = re.search(self.SUBMIT_PATTERN, self.html)
+ if m is None:
self.fail("link doesn't seem valid")
- matches = re.search(self.CAPTCHA_PATTERN, self.html)
- if matches:
+ m = re.search(self.CAPTCHA_PATTERN, self.html)
+ if m:
for _ in xrange(5):
- matches = re.search(self.CAPTCHA_PATTERN, self.html)
- if matches:
+ m = re.search(self.CAPTCHA_PATTERN, self.html)
+ if m:
self.logDebug("trying captcha")
- captcharesult = self.decryptCaptcha("http://lix.in/" + matches.group("image"))
+ captcharesult = self.decryptCaptcha("http://lix.in/" + m.group("image"))
self.html = self.req.load(url, decode=True,
post={"capt": captcharesult, "submit": "submit", "tiny": id})
else:
@@ -48,11 +51,9 @@ class LixIn(Crypter):
else:
self.html = self.req.load(url, decode=True, post={"submit": "submit", "tiny": id})
- matches = re.search(self.LINK_PATTERN, self.html)
- if not matches:
+ m = re.search(self.LINK_PATTERN, self.html)
+ if m is None:
self.fail("can't find destination url")
-
- new_link = matches.group("link")
- self.logDebug("Found link %s, adding to package" % new_link)
-
- self.packages.append((pyfile.package().name, [new_link], pyfile.package().name))
+ else:
+ self.urls = [m.group("link")]
+ self.logDebug("Found link %s, adding to package" % self.urls[0])
diff --git a/module/plugins/crypter/LofCc.py b/module/plugins/crypter/LofCc.py
index a17d58884..8a5cd86ee 100644
--- a/module/plugins/crypter/LofCc.py
+++ b/module/plugins/crypter/LofCc.py
@@ -6,8 +6,10 @@ from module.plugins.internal.DeadCrypter import DeadCrypter
class LofCc(DeadCrypter):
__name__ = "LofCc"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?lof.cc/(.*)'
__version__ = "0.21"
+
+ __pattern__ = r'http://(?:www\.)?lof.cc/(.*)'
+
__description__ = """Lof.cc decrypter plugin"""
__author_name__ = "mkaay"
__author_mail__ = "mkaay@mkaay.de"
diff --git a/module/plugins/crypter/MBLinkInfo.py b/module/plugins/crypter/MBLinkInfo.py
index 8aa70e8ff..4fc066e57 100644
--- a/module/plugins/crypter/MBLinkInfo.py
+++ b/module/plugins/crypter/MBLinkInfo.py
@@ -6,8 +6,10 @@ from module.plugins.internal.DeadCrypter import DeadCrypter
class MBLinkInfo(DeadCrypter):
__name__ = "MBLinkInfo"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?mblink\.info/?\?id=(\d+)'
__version__ = "0.03"
+
+ __pattern__ = r'http://(?:www\.)?mblink\.info/?\?id=(\d+)'
+
__description__ = """MBLink.info decrypter plugin"""
__author_name__ = ("Gummibaer", "stickell")
__author_mail__ = ("Gummibaer@wiki-bierkiste.de", "l.stickell@yahoo.it")
diff --git a/module/plugins/crypter/MediafireComFolder.py b/module/plugins/crypter/MediafireComFolder.py
index 46856229c..bb7c90722 100644
--- a/module/plugins/crypter/MediafireComFolder.py
+++ b/module/plugins/crypter/MediafireComFolder.py
@@ -9,33 +9,34 @@ from module.common.json_layer import json_loads
class MediafireComFolder(Crypter):
__name__ = "MediafireComFolder"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?mediafire\.com/(folder/|\?sharekey=|\?\w{13}($|[/#]))'
__version__ = "0.14"
+
+ __pattern__ = r'http://(?:www\.)?mediafire\.com/(folder/|\?sharekey=|\?\w{13}($|[/#]))'
+
__description__ = """Mediafire.com folder decrypter plugin"""
__author_name__ = "zoidberg"
__author_mail__ = "zoidberg@mujmail.cz"
FOLDER_KEY_PATTERN = r"var afI= '(\w+)';"
- FILE_URL_PATTERN = '<meta property="og:url" content="http://www.mediafire.com/\?(\w+)"/>'
+ FILE_URL_PATTERN = r'<meta property="og:url" content="http://www.mediafire.com/\?(\w+)"/>'
- def decrypt(self, pyfile):
- new_links = []
+ def decrypt(self, pyfile):
url, result = checkHTMLHeader(pyfile.url)
self.logDebug('Location (%d): %s' % (result, url))
if result == 0:
- # load and parse html
+ # load and parse html
html = self.load(pyfile.url)
- found = re.search(self.FILE_URL_PATTERN, html)
- if found:
+ m = re.search(self.FILE_URL_PATTERN, html)
+ if m:
# file page
- new_links.append("http://www.mediafire.com/file/%s" % found.group(1))
+ self.urls.append("http://www.mediafire.com/file/%s" % m.group(1))
else:
# folder page
- found = re.search(self.FOLDER_KEY_PATTERN, html)
- if found:
- folder_key = found.group(1)
+ m = re.search(self.FOLDER_KEY_PATTERN, html)
+ if m:
+ folder_key = m.group(1)
self.logDebug("FOLDER KEY: %s" % folder_key)
json_resp = json_loads(self.load(
@@ -43,15 +44,13 @@ class MediafireComFolder(Crypter):
#self.logInfo(json_resp)
if json_resp['response']['result'] == "Success":
for link in json_resp['response']['folder_info']['files']:
- new_links.append("http://www.mediafire.com/file/%s" % link['quickkey'])
+ self.urls.append("http://www.mediafire.com/file/%s" % link['quickkey'])
else:
self.fail(json_resp['response']['message'])
elif result == 1:
self.offline()
else:
- new_links.append(url)
+ self.urls.append(url)
- if new_links:
- self.core.files.addLinks(new_links, pyfile.package().id)
- else:
+ if not self.urls:
self.fail('Could not extract any links')
diff --git a/module/plugins/crypter/Movie2kTo.py b/module/plugins/crypter/Movie2kTo.py
index 991e1e1ee..ba201621f 100644
--- a/module/plugins/crypter/Movie2kTo.py
+++ b/module/plugins/crypter/Movie2kTo.py
@@ -6,8 +6,10 @@ from module.plugins.internal.DeadCrypter import DeadCrypter
class Movie2kTo(DeadCrypter):
__name__ = "Movie2kTo"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?movie2k\.to/(.*)\.html'
__version__ = "0.51"
+
+ __pattern__ = r'http://(?:www\.)?movie2k\.to/(.*)\.html'
+
__description__ = """Movie2k.to decrypter plugin"""
__author_name__ = "4Christopher"
__author_mail__ = "4Christopher@gmx.de"
diff --git a/module/plugins/crypter/MultiUpOrg.py b/module/plugins/crypter/MultiUpOrg.py
index 997d60862..ffeaa6f04 100644
--- a/module/plugins/crypter/MultiUpOrg.py
+++ b/module/plugins/crypter/MultiUpOrg.py
@@ -1,22 +1,5 @@
# -*- coding: utf-8 -*-
-###############################################################################
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# @author: Walter Purcaro
-###############################################################################
-
import re
from urlparse import urljoin
@@ -26,14 +9,17 @@ from module.plugins.internal.SimpleCrypter import SimpleCrypter
class MultiUpOrg(SimpleCrypter):
__name__ = "MultiUpOrg"
__type__ = "crypter"
- __pattern__ = r"http://(?:www\.)?multiup\.org/(en|fr)/(?P<TYPE>project|download|miror)/\w+(/\w+)?"
__version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?multiup\.org/(en|fr)/(?P<TYPE>project|download|miror)/\w+(/\w+)?'
+
__description__ = """MultiUp.org crypter plugin"""
__author_name__ = "Walter Purcaro"
__author_mail__ = "vuolter@gmail.com"
TITLE_PATTERN = r'<title>.*(Project|Projet|ownload|élécharger) (?P<title>.+?) (\(|- )'
+
def getLinks(self):
m_type = re.match(self.__pattern__, self.pyfile.url).group("TYPE")
diff --git a/module/plugins/crypter/MultiloadCz.py b/module/plugins/crypter/MultiloadCz.py
index 5e7051bad..7d43ec729 100644
--- a/module/plugins/crypter/MultiloadCz.py
+++ b/module/plugins/crypter/MultiloadCz.py
@@ -7,36 +7,36 @@ from module.plugins.Crypter import Crypter
class MultiloadCz(Crypter):
__name__ = "MultiloadCz"
__type__ = "crypter"
- __pattern__ = r'http://(?:[^/]*\.)?multiload.cz/(stahnout|slozka)/.*'
__version__ = "0.4"
- __description__ = """Multiload.cz decrypter plugin"""
+
+ __pattern__ = r'http://(?:[^/]*\.)?multiload.cz/(stahnout|slozka)/.*'
__config__ = [("usedHoster", "str", "Prefered hoster list (bar-separated) ", ""),
("ignoredHoster", "str", "Ignored hoster list (bar-separated) ", "")]
+
+ __description__ = """Multiload.cz decrypter plugin"""
__author_name__ = "zoidberg"
__author_mail__ = "zoidberg@mujmail.cz"
FOLDER_PATTERN = r'<form action="" method="get"><textarea[^>]*>([^>]*)</textarea></form>'
LINK_PATTERN = r'<p class="manager-server"><strong>([^<]+)</strong></p><p class="manager-linky"><a href="([^"]+)">'
+
def decrypt(self, pyfile):
self.html = self.load(pyfile.url, decode=True)
- new_links = []
if re.match(self.__pattern__, pyfile.url).group(1) == "slozka":
- found = re.search(self.FOLDER_PATTERN, self.html)
- if found is not None:
- new_links.extend(found.group(1).split())
+ m = re.search(self.FOLDER_PATTERN, self.html)
+ if m:
+ self.urls.extend(m.group(1).split())
else:
- found = re.findall(self.LINK_PATTERN, self.html)
- if found:
+ m = re.findall(self.LINK_PATTERN, self.html)
+ if m:
prefered_set = set(self.getConfig("usedHoster").split('|'))
- new_links.extend([x[1] for x in found if x[0] in prefered_set])
+ self.urls.extend([x[1] for x in m if x[0] in prefered_set])
- if not new_links:
+ if not self.urls:
ignored_set = set(self.getConfig("ignoredHoster").split('|'))
- new_links.extend([x[1] for x in found if x[0] not in ignored_set])
+ self.urls.extend([x[1] for x in m if x[0] not in ignored_set])
- if new_links:
- self.core.files.addLinks(new_links, pyfile.package().id)
- else:
+ if not self.urls:
self.fail('Could not extract any links')
diff --git a/module/plugins/crypter/MultiuploadCom.py b/module/plugins/crypter/MultiuploadCom.py
index 677080772..96cd734e4 100644
--- a/module/plugins/crypter/MultiuploadCom.py
+++ b/module/plugins/crypter/MultiuploadCom.py
@@ -10,53 +10,53 @@ from module.common.json_layer import json_loads
class MultiuploadCom(Crypter):
__name__ = "MultiuploadCom"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?multiupload.com/(\w+)'
__version__ = "0.01"
- __description__ = """MultiUpload.com decrypter plugin"""
+
+ __pattern__ = r'http://(?:www\.)?multiupload.com/(\w+)'
__config__ = [("preferedHoster", "str", "Prefered hoster list (bar-separated) ", "multiupload"),
("ignoredHoster", "str", "Ignored hoster list (bar-separated) ", "")]
+
+ __description__ = """MultiUpload.com decrypter plugin"""
__author_name__ = "zoidberg"
__author_mail__ = "zoidberg@mujmail.cz"
ML_LINK_PATTERN = r'<div id="downloadbutton_" style=""><a href="([^"]+)"'
+
def decrypt(self, pyfile):
self.html = self.load(pyfile.url)
- found = re.search(self.ML_LINK_PATTERN, self.html)
- ml_url = found.group(1) if found else None
+ m = re.search(self.ML_LINK_PATTERN, self.html)
+ ml_url = m.group(1) if m else None
json_list = json_loads(self.load("http://multiupload.com/progress/", get={
"d": re.match(self.__pattern__, pyfile.url).group(1),
"r": str(int(time() * 1000))
}))
- new_links = []
prefered_set = map(lambda s: s.lower().split('.')[0], set(self.getConfig("preferedHoster").split('|')))
if ml_url and 'multiupload' in prefered_set:
- new_links.append(ml_url)
+ self.urls.append(ml_url)
for link in json_list:
if link['service'].lower() in prefered_set and int(link['status']) and not int(link['deleted']):
url = self.getLocation(link['url'])
if url:
- new_links.append(url)
+ self.urls.append(url)
- if not new_links:
+ if not self.urls:
ignored_set = map(lambda s: s.lower().split('.')[0], set(self.getConfig("ignoredHoster").split('|')))
if 'multiupload' not in ignored_set:
- new_links.append(ml_url)
+ self.urls.append(ml_url)
for link in json_list:
if link['service'].lower() not in ignored_set and int(link['status']) and not int(link['deleted']):
url = self.getLocation(link['url'])
if url:
- new_links.append(url)
+ self.urls.append(url)
- if new_links:
- self.core.files.addLinks(new_links, pyfile.package().id)
- else:
+ if not self.urls:
self.fail('Could not extract any links')
def getLocation(self, url):
diff --git a/module/plugins/crypter/NCryptIn.py b/module/plugins/crypter/NCryptIn.py
index eacd4aa8d..1b7b8b3d4 100644
--- a/module/plugins/crypter/NCryptIn.py
+++ b/module/plugins/crypter/NCryptIn.py
@@ -5,6 +5,7 @@ import binascii
import re
from Crypto.Cipher import AES
+
from module.plugins.Crypter import Crypter
from module.plugins.internal.CaptchaService import ReCaptcha
@@ -12,27 +13,28 @@ from module.plugins.internal.CaptchaService import ReCaptcha
class NCryptIn(Crypter):
__name__ = "NCryptIn"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?ncrypt.in/(?P<type>folder|link|frame)-([^/\?]+)'
__version__ = "1.32"
+
+ __pattern__ = r'http://(?:www\.)?ncrypt.in/(?P<type>folder|link|frame)-([^/\?]+)'
+
__description__ = """NCrypt.in decrypter plugin"""
__author_name__ = ("fragonib", "stickell")
__author_mail__ = ("fragonib[AT]yahoo[DOT]es", "l.stickell@yahoo.it")
- # Constants
- _JK_KEY_ = "jk"
- _CRYPTED_KEY_ = "crypted"
+ JK_KEY = "jk"
+ CRYPTED_KEY = "crypted"
NAME_PATTERN = r'<meta name="description" content="(?P<N>[^"]+)"'
+
def setup(self):
self.package = None
self.html = None
self.cleanedHtml = None
- self.links_source_order = ['cnl2', 'rsdf', 'ccf', 'dlc', 'web']
+ self.links_source_order = ["cnl2", "rsdf", "ccf", "dlc", "web"]
self.protection_type = None
def decrypt(self, pyfile):
-
# Init
self.package = pyfile.package()
package_links = []
@@ -52,7 +54,7 @@ class NCryptIn(Crypter):
if not self.isOnline():
self.offline()
- # Check for folder protection
+ # Check for folder protection
if self.isProtected():
self.html = self.unlockProtection()
self.cleanedHtml = self.removeHtmlCrap(self.html)
@@ -75,7 +77,7 @@ class NCryptIn(Crypter):
def isSingleLink(self):
link_type = re.match(self.__pattern__, self.pyfile.url).group('type')
- return link_type in ('link', 'frame')
+ return link_type in ("link", "frame")
def requestFolderHome(self):
return self.load(self.pyfile.url, decode=True)
@@ -93,16 +95,16 @@ class NCryptIn(Crypter):
def isOnline(self):
if "Your folder does not exist" in self.cleanedHtml:
- self.logDebug("File not found")
+ self.logDebug("File not m")
return False
return True
def isProtected(self):
- form_match = re.search(r'<form.*?name.*?protected.*?>(.*?)</form>', self.cleanedHtml, re.DOTALL)
- if form_match:
- form_content = form_match.group(1)
+ form = re.search(r'<form.*?name.*?protected.*?>(.*?)</form>', self.cleanedHtml, re.DOTALL)
+ if form is not None:
+ content = form.group(1)
for keyword in ("password", "captcha"):
- if keyword in form_content:
+ if keyword in content:
self.protection_type = keyword
self.logDebug("Links are %s protected" % self.protection_type)
return True
@@ -116,7 +118,7 @@ class NCryptIn(Crypter):
else:
name = self.package.name
folder = self.package.folder
- self.logDebug("Package info not found, defaulting to pyfile name [%s] and folder [%s]" % (name, folder))
+ self.logDebug("Package info not m, defaulting to pyfile name [%s] and folder [%s]" % (name, folder))
return name, folder
def unlockProtection(self):
@@ -139,7 +141,7 @@ class NCryptIn(Crypter):
self.logDebug("Captcha resolved [%s]" % captcha)
postData['captcha'] = captcha
- # Resolve recaptcha
+ # Resolve recaptcha
if "recaptcha" in form:
self.logDebug("ReCaptcha protected")
captcha_key = re.search(r'\?k=(.*?)"', form).group(1)
@@ -163,7 +165,6 @@ class NCryptIn(Crypter):
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")
@@ -178,9 +179,8 @@ class NCryptIn(Crypter):
self.correctCaptcha()
def handleLinkSource(self, link_source_type):
-
# Check for JS engine
- require_js_engine = link_source_type in ('cnl2', 'rsdf', 'ccf', 'dlc')
+ require_js_engine = link_source_type in ("cnl2", "rsdf", "ccf", "dlc")
if require_js_engine and not self.js:
self.logDebug("No JS engine available, skip %s links" % link_source_type)
return []
@@ -190,9 +190,9 @@ class NCryptIn(Crypter):
return self.handleSingleLink()
if link_source_type == 'cnl2':
return self.handleCNL2()
- elif link_source_type in ('rsdf', 'ccf', 'dlc'):
+ elif link_source_type in ("rsdf", "ccf", "dlc"):
return self.handleContainer(link_source_type)
- elif link_source_type == 'web':
+ elif link_source_type == "web":
return self.handleWebLinks()
else:
self.fail('unknown source type "%s" (this is probably a bug)' % link_source_type)
@@ -267,11 +267,11 @@ class NCryptIn(Crypter):
pattern = r'<input.*?name="%s".*?value="(.*?)"'
# Get jk
- jk_re = pattern % NCryptIn._JK_KEY_
+ jk_re = pattern % NCryptIn.JK_KEY
vjk = re.findall(jk_re, self.html)
# Get crypted
- crypted_re = pattern % NCryptIn._CRYPTED_KEY_
+ crypted_re = pattern % NCryptIn.CRYPTED_KEY
vcrypted = re.findall(crypted_re, self.html)
# Log and return
@@ -279,7 +279,6 @@ class NCryptIn(Crypter):
return vcrypted, vjk
def _getLinks(self, crypted, jk):
-
# Get key
jreturn = self.js.eval("%s f()" % jk)
self.logDebug("JsEngine returns value [%s]" % jreturn)
diff --git a/module/plugins/crypter/NetfolderIn.py b/module/plugins/crypter/NetfolderIn.py
index 28ee3a9dd..1c337391c 100644
--- a/module/plugins/crypter/NetfolderIn.py
+++ b/module/plugins/crypter/NetfolderIn.py
@@ -8,22 +8,25 @@ from module.plugins.internal.SimpleCrypter import SimpleCrypter
class NetfolderIn(SimpleCrypter):
__name__ = "NetfolderIn"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?netfolder.in/((?P<id1>\w+)/\w+|folder.php\?folder_id=(?P<id2>\w+))'
__version__ = "0.6"
+
+ __pattern__ = r'http://(?:www\.)?netfolder.in/((?P<id1>\w+)/\w+|folder.php\?folder_id=(?P<id2>\w+))'
+
__description__ = """NetFolder.in decrypter plugin"""
__author_name__ = ("RaNaN", "fragonib")
__author_mail__ = ("RaNaN@pyload.org", "fragonib[AT]yahoo[DOT]es")
TITLE_PATTERN = r'<div class="Text">Inhalt des Ordners <span(.*)>(?P<title>.+)</span></div>'
+
def decrypt(self, pyfile):
# Request package
self.html = self.load(pyfile.url)
- # Check for password protection
+ # Check for password protection
if self.isPasswordProtected():
self.html = self.submitPassword()
- if self.html is None:
+ if not self.html:
self.fail("Incorrect password, please set right password on Add package form and retry")
# Get package name and folder
@@ -36,7 +39,6 @@ class NetfolderIn(SimpleCrypter):
self.packages = [(package_name, package_links, folder_name)]
def isPasswordProtected(self):
-
if '<input type="password" name="password"' in self.html:
self.logDebug("Links are password protected")
return True
@@ -53,7 +55,7 @@ class NetfolderIn(SimpleCrypter):
url = "http://netfolder.in/folder.php?folder_id=" + id
password = self.getPassword()
- # Submit package password
+ # Submit package password
post = {'password': password, 'save': 'Absenden'}
self.logDebug("Submitting password [%s] for protected links with id [%s]" % (password, id))
html = self.load(url, {}, post)
diff --git a/module/plugins/crypter/NosvideoCom.py b/module/plugins/crypter/NosvideoCom.py
index 63e199a7a..a3bb11b16 100644
--- a/module/plugins/crypter/NosvideoCom.py
+++ b/module/plugins/crypter/NosvideoCom.py
@@ -6,11 +6,13 @@ from module.plugins.internal.SimpleCrypter import SimpleCrypter
class NosvideoCom(SimpleCrypter):
__name__ = "NosvideoCom"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?nosvideo\.com/\?v=\w+'
__version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?nosvideo\.com/\?v=\w+'
+
__description__ = """Nosvideo.com decrypter plugin"""
__author_name__ = "igel"
__author_mail__ = "igelkun@myopera.com"
LINK_PATTERN = r'href="(http://(?:w{3}\.)?nosupload.com/\?d=\w+)"'
- TITLE_PATTERN = r"<[tT]itle>Watch (?P<title>.+)</[tT]itle>"
+ TITLE_PATTERN = r'<[tT]itle>Watch (?P<title>.+)</[tT]itle>'
diff --git a/module/plugins/crypter/OneKhDe.py b/module/plugins/crypter/OneKhDe.py
index 82fad86ce..ba93278d5 100644
--- a/module/plugins/crypter/OneKhDe.py
+++ b/module/plugins/crypter/OneKhDe.py
@@ -9,12 +9,15 @@ from module.plugins.Crypter import Crypter
class OneKhDe(Crypter):
__name__ = "OneKhDe"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?1kh.de/f/'
__version__ = "0.1"
+
+ __pattern__ = r'http://(?:www\.)?1kh.de/f/'
+
__description__ = """1kh.de decrypter plugin"""
__author_name__ = "spoob"
__author_mail__ = "spoob@pyload.org"
+
def __init__(self, parent):
Crypter.__init__(self, parent)
self.parent = parent
@@ -28,10 +31,8 @@ class OneKhDe(Crypter):
def proceed(self, url, location):
url = self.parent.url
self.html = self.req.load(url)
- temp_links = []
link_ids = re.findall(r"<a id=\"DownloadLink_(\d*)\" href=\"http://1kh.de/", self.html)
for id in link_ids:
new_link = unescape(
re.search("width=\"100%\" src=\"(.*)\"></iframe>", self.req.load("http://1kh.de/l/" + id)).group(1))
- temp_links.append(new_link)
- self.links = temp_links
+ self.urls.append(new_link)
diff --git a/module/plugins/crypter/OronComFolder.py b/module/plugins/crypter/OronComFolder.py
index f087370ac..f0b2f943c 100755
--- a/module/plugins/crypter/OronComFolder.py
+++ b/module/plugins/crypter/OronComFolder.py
@@ -6,8 +6,10 @@ from module.plugins.internal.DeadCrypter import DeadCrypter
class OronComFolder(DeadCrypter):
__name__ = "OronComFolder"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?oron.com/folder/\w+'
__version__ = "0.11"
+
+ __pattern__ = r'http://(?:www\.)?oron.com/folder/\w+'
+
__description__ = """Oron.com folder decrypter plugin"""
__author_name__ = "DHMH"
__author_mail__ = "webmaster@pcProfil.de"
diff --git a/module/plugins/crypter/PastebinCom.py b/module/plugins/crypter/PastebinCom.py
index e74f71a5c..55aa2ee4a 100644
--- a/module/plugins/crypter/PastebinCom.py
+++ b/module/plugins/crypter/PastebinCom.py
@@ -1,18 +1,4 @@
# -*- coding: utf-8 -*-
-############################################################################
-# This program is free software: you can redistribute it and/or modify #
-# it under the terms of the GNU Affero General Public License as #
-# published by the Free Software Foundation, either version 3 of the #
-# License, or (at your option) any later version. #
-# #
-# This program is distributed in the hope that it will be useful, #
-# but WITHOUT ANY WARRANTY; without even the implied warranty of #
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
-# GNU Affero General Public License for more details. #
-# #
-# You should have received a copy of the GNU Affero General Public License #
-# along with this program. If not, see <http://www.gnu.org/licenses/>. #
-############################################################################
from module.plugins.internal.SimpleCrypter import SimpleCrypter
@@ -20,8 +6,10 @@ from module.plugins.internal.SimpleCrypter import SimpleCrypter
class PastebinCom(SimpleCrypter):
__name__ = "PastebinCom"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?pastebin\.com/\w+'
__version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?pastebin\.com/\w+'
+
__description__ = """Pastebin.com decrypter plugin"""
__author_name__ = "stickell"
__author_mail__ = "l.stickell@yahoo.it"
diff --git a/module/plugins/crypter/QuickshareCzFolder.py b/module/plugins/crypter/QuickshareCzFolder.py
index 13d7671bf..9840b84df 100644
--- a/module/plugins/crypter/QuickshareCzFolder.py
+++ b/module/plugins/crypter/QuickshareCzFolder.py
@@ -7,8 +7,10 @@ from module.plugins.Crypter import Crypter
class QuickshareCzFolder(Crypter):
__name__ = "QuickshareCzFolder"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?quickshare.cz/slozka-\d+.*'
__version__ = "0.1"
+
+ __pattern__ = r'http://(?:www\.)?quickshare.cz/slozka-\d+.*'
+
__description__ = """Quickshare.cz folder decrypter plugin"""
__author_name__ = "zoidberg"
__author_mail__ = "zoidberg@mujmail.cz"
@@ -16,16 +18,14 @@ class QuickshareCzFolder(Crypter):
FOLDER_PATTERN = r'<textarea[^>]*>(.*?)</textarea>'
LINK_PATTERN = r'(http://www.quickshare.cz/\S+)'
+
def decrypt(self, pyfile):
html = self.load(pyfile.url)
- new_links = []
- found = re.search(self.FOLDER_PATTERN, html, re.DOTALL)
- if found is None:
+ m = re.search(self.FOLDER_PATTERN, html, re.DOTALL)
+ if m is None:
self.fail("Parse error (FOLDER)")
- new_links.extend(re.findall(self.LINK_PATTERN, found.group(1)))
+ self.urls.extend(re.findall(self.LINK_PATTERN, m.group(1)))
- if new_links:
- self.core.files.addLinks(new_links, pyfile.package().id)
- else:
+ if not self.urls:
self.fail('Could not extract any links')
diff --git a/module/plugins/crypter/RSLayerCom.py b/module/plugins/crypter/RSLayerCom.py
index 9f1a9a394..7dda0beab 100644
--- a/module/plugins/crypter/RSLayerCom.py
+++ b/module/plugins/crypter/RSLayerCom.py
@@ -6,8 +6,10 @@ from module.plugins.internal.DeadCrypter import DeadCrypter
class RSLayerCom(DeadCrypter):
__name__ = "RSLayerCom"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?rs-layer.com/directory-'
__version__ = "0.21"
+
+ __pattern__ = r'http://(?:www\.)?rs-layer.com/directory-'
+
__description__ = """RS-Layer.com decrypter plugin"""
__author_name__ = "hzpz"
- __author_mail__ = ""
+ __author_mail__ = None
diff --git a/module/plugins/crypter/RelinkUs.py b/module/plugins/crypter/RelinkUs.py
index aad55c867..1b120fc77 100644
--- a/module/plugins/crypter/RelinkUs.py
+++ b/module/plugins/crypter/RelinkUs.py
@@ -12,36 +12,39 @@ from module.plugins.Crypter import Crypter
class RelinkUs(Crypter):
__name__ = "RelinkUs"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?relink.us/(f/|((view|go).php\?id=))(?P<id>.+)'
__version__ = "3.0"
+
+ __pattern__ = r'http://(?:www\.)?relink.us/(f/|((view|go).php\?id=))(?P<id>.+)'
+
__description__ = """Relink.us decrypter plugin"""
__author_name__ = "fragonib"
__author_mail__ = "fragonib[AT]yahoo[DOT]es"
# Constants
- PREFERRED_LINK_SOURCES = ['cnl2', 'dlc', 'web']
-
- OFFLINE_TOKEN = "<title>Tattooside"
- PASSWORD_TOKEN = "container_password.php"
- PASSWORD_ERROR_ROKEN = "You have entered an incorrect password"
- PASSWORD_SUBMIT_URL = "http://www.relink.us/container_password.php"
- CAPTCHA_TOKEN = "container_captcha.php"
- CAPTCHA_ERROR_ROKEN = "You have solved the captcha wrong"
- CAPTCHA_IMG_URL = "http://www.relink.us/core/captcha/circlecaptcha.php"
- CAPTCHA_SUBMIT_URL = "http://www.relink.us/container_captcha.php"
- FILE_TITLE_REGEX = r"<th>Title</th><td><i>(.*)</i></td></tr>"
- FILE_NOTITLE = 'No title'
+ PREFERRED_LINK_SOURCES = ["cnl2", "dlc", "web"]
+
+ OFFLINE_TOKEN = r'<title>Tattooside'
+ 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'
+ 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>'
+ 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 = "http://www.relink.us/download.php"
+ DLC_DOWNLOAD_URL = r'http://www\.relink\.us/download\.php'
WEB_FORWARD_REGEX = r"getFile\('(?P<link>.+)'\)"
- WEB_FORWARD_URL = "http://www.relink.us/frame.php"
+ 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>'
+
def setup(self):
self.fileid = None
self.package = None
@@ -50,7 +53,6 @@ class RelinkUs(Crypter):
self.captcha = False
def decrypt(self, pyfile):
-
# Init
self.initPackage(pyfile)
@@ -61,7 +63,7 @@ class RelinkUs(Crypter):
if not self.isOnline():
self.offline()
- # Check for protection
+ # Check for protection
if self.isPasswordProtected():
self.unlockPasswordProtection()
self.handleErrors()
@@ -92,10 +94,9 @@ class RelinkUs(Crypter):
self.fileid = re.match(self.__pattern__, pyfile.url).group('id')
self.package = pyfile.package()
self.password = self.getPassword()
- self.url = pyfile.url
def requestPackage(self):
- self.html = self.load(self.url, decode=True)
+ self.html = self.load(self.pyfile.url, decode=True)
def isOnline(self):
if self.OFFLINE_TOKEN in self.html:
@@ -132,7 +133,7 @@ class RelinkUs(Crypter):
def getPackageInfo(self):
name = folder = None
- # Try to get info from web
+ # Try to get info from web
m = re.search(self.FILE_TITLE_REGEX, self.html)
if m is not None:
title = m.group(1).strip()
@@ -146,7 +147,7 @@ class RelinkUs(Crypter):
folder = self.package.folder
self.logDebug("Package info not found, defaulting to pyfile name [%s] and folder [%s]" % (name, folder))
- # Return package info
+ # Return package info
return name, folder
def handleErrors(self):
@@ -197,7 +198,7 @@ class RelinkUs(Crypter):
try:
dlc = self.load(container_url)
dlc_filename = self.fileid + ".dlc"
- dlc_filepath = os.path.join(self.config["general"]["download_folder"], dlc_filename)
+ dlc_filepath = os.path.join(self.config['general']['download_folder'], dlc_filename)
f = open(dlc_filepath, "wb")
f.write(dlc)
f.close()
@@ -225,7 +226,6 @@ class RelinkUs(Crypter):
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)
@@ -239,7 +239,6 @@ class RelinkUs(Crypter):
return vcrypted, vjk
def _getLinks(self, crypted, jk):
-
# Get key
jreturn = self.js.eval("%s f()" % jk)
self.logDebug("JsEngine returns value [%s]" % jreturn)
diff --git a/module/plugins/crypter/SafelinkingNet.py b/module/plugins/crypter/SafelinkingNet.py
index 4a907c28d..e0c165705 100644
--- a/module/plugins/crypter/SafelinkingNet.py
+++ b/module/plugins/crypter/SafelinkingNet.py
@@ -1,24 +1,29 @@
# -*- coding: utf-8 -*-
import re
+
from pycurl import FOLLOWLOCATION
+from module.lib.BeautifulSoup import BeautifulSoup
+
from module.common.json_layer import json_loads
from module.plugins.Crypter import Crypter
from module.plugins.internal.CaptchaService import SolveMedia
-from module.lib.BeautifulSoup import BeautifulSoup
class SafelinkingNet(Crypter):
- __name__ = 'SafelinkingNet'
- __type__ = 'crypter'
+ __name__ = "SafelinkingNet"
+ __type__ = "crypter"
+ __version__ = "0.1"
+
__pattern__ = r'https?://(?:www\.)?safelinking.net/([pd])/\w+'
- __version__ = '0.1'
+
__description__ = """Safelinking.net decrypter plugin"""
__author_name__ = "quareevo"
__author_mail__ = "quareevo@arcor.de"
- __Solvemedia_pattern__ = "solvemediaApiKey = '([\w\.\-_]+)';"
+ SOLVEMEDIA_PATTERN = "solvemediaApiKey = '([\w\.\-_]+)';"
+
def decrypt(self, pyfile):
url = pyfile.url
@@ -27,24 +32,23 @@ class SafelinkingNet(Crypter):
self.load(url)
m = re.search("^Location: (.+)$", self.req.http.header, re.MULTILINE)
if m:
- self.core.files.addLinks([m.group(1)], pyfile.package().id)
+ self.urls = [m.group(1)]
else:
self.fail("Couldn't find forwarded Link")
else:
password = ""
- packageLinks = []
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'] = password
if "altcaptcha" in self.html:
for _ in xrange(5):
- m = re.search(self.__Solvemedia_pattern__, self.html)
+ m = re.search(self.SOLVEMEDIA_PATTERN, self.html)
if m:
captchaKey = m.group(1)
captcha = SolveMedia(self)
@@ -53,8 +57,8 @@ class SafelinkingNet(Crypter):
self.fail("Error parsing captcha")
challenge, response = captcha.challenge(captchaKey)
- postData["adcopy_challenge"] = challenge
- postData["adcopy_response"] = response
+ postData['adcopy_challenge'] = challenge
+ postData['adcopy_response'] = response
self.html = self.load(url, post=postData)
if "The password you entered was incorrect" in self.html:
@@ -72,9 +76,7 @@ class SafelinkingNet(Crypter):
if m:
linkDict = json_loads(m.group(1))
for link in linkDict:
- if not "http://" in link["full"]:
- packageLinks.append("https://safelinking.net/d/" + link["full"])
+ if not "http://" in link['full']:
+ self.urls.append("https://safelinking.net/d/" + link['full'])
else:
- packageLinks.append(link["full"])
-
- self.core.files.addLinks(packageLinks, pyfile.package().id)
+ self.urls.append(link['full'])
diff --git a/module/plugins/crypter/SecuredIn.py b/module/plugins/crypter/SecuredIn.py
index 771205ec8..0b558c688 100644
--- a/module/plugins/crypter/SecuredIn.py
+++ b/module/plugins/crypter/SecuredIn.py
@@ -6,8 +6,10 @@ from module.plugins.internal.DeadCrypter import DeadCrypter
class SecuredIn(DeadCrypter):
__name__ = "SecuredIn"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?secured\.in/download-[\d]+-[\w]{8}\.html'
__version__ = "0.21"
+
+ __pattern__ = r'http://(?:www\.)?secured\.in/download-[\d]+-[\w]{8}\.html'
+
__description__ = """Secured.in decrypter plugin"""
__author_name__ = "mkaay"
__author_mail__ = "mkaay@mkaay.de"
diff --git a/module/plugins/crypter/SerienjunkiesOrg.py b/module/plugins/crypter/SerienjunkiesOrg.py
index 6fbbfedb3..fe4ee4e36 100644
--- a/module/plugins/crypter/SerienjunkiesOrg.py
+++ b/module/plugins/crypter/SerienjunkiesOrg.py
@@ -1,18 +1,22 @@
# -*- coding: utf-8 -*-
+import random
import re
+
from time import sleep
-import random
-from module.plugins.Crypter import Crypter
+
from module.lib.BeautifulSoup import BeautifulSoup
+
+from module.plugins.Crypter import Crypter
from module.unescape import unescape
class SerienjunkiesOrg(Crypter):
__name__ = "SerienjunkiesOrg"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?(serienjunkies.org|dokujunkies.org)/.*?'
__version__ = "0.39"
+
+ __pattern__ = r'http://(?:www\.)?(serienjunkies.org|dokujunkies.org)/.*?'
__config__ = [("changeNameSJ", "Packagename;Show;Season;Format;Episode", "Take SJ.org name", "Show"),
("changeNameDJ", "Packagename;Show;Format;Episode", "Take DJ.org name", "Show"),
("randomPreferred", "bool", "Randomize Preferred-List", False),
@@ -21,10 +25,12 @@ class SerienjunkiesOrg(Crypter):
("hosterList", "str", "Preferred Hoster list (comma separated)",
"RapidshareCom,UploadedTo,NetloadIn,FilefactoryCom,FreakshareNet,FilebaseTo,HotfileCom,DepositfilesCom,EasyshareCom,KickloadCom"),
("ignoreList", "str", "Ignored Hoster list (comma separated)", "MegauploadCom")]
+
__description__ = """Serienjunkies.org decrypter plugin"""
__author_name__ = ("mkaay", "godofdream")
__author_mail__ = ("mkaay@mkaay.de", "soilfiction@gmail.com")
+
def setup(self):
self.multiDL = False
@@ -51,9 +57,9 @@ class SerienjunkiesOrg(Crypter):
package_links = []
for a in nav.findAll("a"):
if self.getConfig("changeNameSJ") == "Show":
- package_links.append(a["href"])
+ package_links.append(a['href'])
else:
- package_links.append(a["href"] + "#hasName")
+ package_links.append(a['href'] + "#hasName")
if self.getConfig("changeNameSJ") == "Show":
self.packages.append((packageName, package_links, packageName))
else:
@@ -85,32 +91,32 @@ class SerienjunkiesOrg(Crypter):
opts[n.strip()] = val.strip()
gid += 1
groups[gid] = {}
- groups[gid]["ep"] = {}
- groups[gid]["opts"] = opts
+ groups[gid]['ep'] = {}
+ groups[gid]['opts'] = opts
elif re.search("<strong>Download:", str(p)):
parts = str(p).split("<br />")
if re.search("<strong>", parts[0]):
ename = re.search('<strong>(.*?)</strong>', parts[0]).group(1).strip().decode("utf-8").replace(
"&#8211;", "-")
- groups[gid]["ep"][ename] = {}
+ groups[gid]['ep'][ename] = {}
parts.remove(parts[0])
for part in parts:
hostername = re.search(r" \| ([-a-zA-Z0-9]+\.\w+)", part)
if hostername:
hostername = hostername.group(1)
- groups[gid]["ep"][ename][hostername] = []
+ groups[gid]['ep'][ename][hostername] = []
links = re.findall('href="(.*?)"', part)
for link in links:
- groups[gid]["ep"][ename][hostername].append(link + "#hasName")
+ groups[gid]['ep'][ename][hostername].append(link + "#hasName")
links = []
for g in groups.values():
- for ename in g["ep"]:
- links.extend(self.getpreferred(g["ep"][ename]))
+ for ename in g['ep']:
+ links.extend(self.getpreferred(g['ep'][ename]))
if self.getConfig("changeNameSJ") == "Episode":
self.packages.append((ename, links, ename))
links = []
- package = "%s (%s, %s)" % (seasonName, g["opts"]["Format"], g["opts"]["Sprache"])
+ package = "%s (%s, %s)" % (seasonName, g['opts']['Format'], g['opts']['Sprache'])
if self.getConfig("changeNameSJ") == "Format":
self.packages.append((package, links, package))
links = []
@@ -135,12 +141,12 @@ class SerienjunkiesOrg(Crypter):
sleep(5)
self.retry()
- captchaUrl = "http://download.serienjunkies.org" + captchaTag["src"]
+ captchaUrl = "http://download.serienjunkies.org" + captchaTag['src']
result = self.decryptCaptcha(str(captchaUrl), imgtype="png")
sinp = form.find(attrs={"name": "s"})
self.req.lastURL = str(url)
- sj = self.load(str(url), post={'s': sinp["value"], 'c': result, 'action': "Download"})
+ sj = self.load(str(url), post={'s': sinp['value'], 'c': result, 'action': "Download"})
soup = BeautifulSoup(sj)
rawLinks = soup.findAll(attrs={"action": re.compile("^http://download.serienjunkies.org/")})
@@ -154,7 +160,7 @@ class SerienjunkiesOrg(Crypter):
links = []
for link in rawLinks:
- frameUrl = link["action"].replace("/go-", "/frame/go-")
+ frameUrl = link['action'].replace("/go-", "/frame/go-")
links.append(self.handleFrame(frameUrl))
if re.search("#hasName", url) or ((self.getConfig("changeNameSJ") == "Packagename") and
(self.getConfig("changeNameDJ") == "Packagename")):
@@ -171,12 +177,12 @@ class SerienjunkiesOrg(Crypter):
soup = BeautifulSoup(sj)
form = soup.find("form", attrs={"action": re.compile("^http://serienjunkies.org")})
captchaTag = form.find(attrs={"src": re.compile("^/safe/secure/")})
- captchaUrl = "http://serienjunkies.org" + captchaTag["src"]
+ captchaUrl = "http://serienjunkies.org" + captchaTag['src']
result = self.decryptCaptcha(str(captchaUrl))
- url = form["action"]
+ url = form['action']
sinp = form.find(attrs={"name": "s"})
- self.req.load(str(url), post={'s': sinp["value"], 'c': result, 'dl.start': "Download"}, cookies=False,
+ self.req.load(str(url), post={'s': sinp['value'], 'c': result, 'dl.start': "Download"}, cookies=False,
just_header=True)
decrypted = self.req.lastEffectiveURL
if decrypted == str(url):
@@ -215,32 +221,32 @@ class SerienjunkiesOrg(Crypter):
opts[n.strip()] = val.strip()
gid += 1
groups[gid] = {}
- groups[gid]["ep"] = {}
- groups[gid]["opts"] = opts
+ groups[gid]['ep'] = {}
+ groups[gid]['opts'] = opts
elif re.search("<strong>Download:", str(p)):
parts = str(p).split("<br />")
if re.search("<strong>", parts[0]):
ename = re.search('<strong>(.*?)</strong>', parts[0]).group(1).strip().decode("utf-8").replace(
"&#8211;", "-")
- groups[gid]["ep"][ename] = {}
+ groups[gid]['ep'][ename] = {}
parts.remove(parts[0])
for part in parts:
hostername = re.search(r" \| ([-a-zA-Z0-9]+\.\w+)", part)
if hostername:
hostername = hostername.group(1)
- groups[gid]["ep"][ename][hostername] = []
+ groups[gid]['ep'][ename][hostername] = []
links = re.findall('href="(.*?)"', part)
for link in links:
- groups[gid]["ep"][ename][hostername].append(link + "#hasName")
+ groups[gid]['ep'][ename][hostername].append(link + "#hasName")
links = []
for g in groups.values():
- for ename in g["ep"]:
- links.extend(self.getpreferred(g["ep"][ename]))
+ for ename in g['ep']:
+ links.extend(self.getpreferred(g['ep'][ename]))
if self.getConfig("changeNameDJ") == "Episode":
self.packages.append((ename, links, ename))
links = []
- package = "%s (%s, %s)" % (seasonName, g["opts"]["Format"], g["opts"]["Sprache"])
+ package = "%s (%s, %s)" % (seasonName, g['opts']['Format'], g['opts']['Sprache'])
if self.getConfig("changeNameDJ") == "Format":
self.packages.append((package, links, package))
links = []
@@ -255,7 +261,7 @@ class SerienjunkiesOrg(Crypter):
soup = BeautifulSoup(src)
content = soup.find("div", attrs={"id": "content"})
for a in content.findAll("a", attrs={"rel": "bookmark"}):
- package_links.append(a["href"])
+ package_links.append(a['href'])
self.core.files.addLinks(package_links, self.pyfile.package().id)
def decrypt(self, pyfile):
diff --git a/module/plugins/crypter/ShareLinksBiz.py b/module/plugins/crypter/ShareLinksBiz.py
index 816842216..87bb16a50 100644
--- a/module/plugins/crypter/ShareLinksBiz.py
+++ b/module/plugins/crypter/ShareLinksBiz.py
@@ -11,12 +11,15 @@ from module.plugins.Crypter import Crypter
class ShareLinksBiz(Crypter):
__name__ = "ShareLinksBiz"
__type__ = "crypter"
- __pattern__ = r'(?P<base>http://(?:www\.)?(share-links|s2l)\.biz)/(?P<id>_?[0-9a-z]+)(/.*)?'
__version__ = "1.13"
+
+ __pattern__ = r'http://(?:www\.)?(share-links|s2l)\.biz/(?P<ID>_?\w+)'
+
__description__ = """Share-Links.biz decrypter plugin"""
__author_name__ = "fragonib"
__author_mail__ = "fragonib[AT]yahoo[DOT]es"
+
def setup(self):
self.baseUrl = None
self.fileId = None
@@ -25,7 +28,6 @@ class ShareLinksBiz(Crypter):
self.captcha = False
def decrypt(self, pyfile):
-
# Init
self.initFile(pyfile)
@@ -63,8 +65,8 @@ class ShareLinksBiz(Crypter):
url = pyfile.url
if 's2l.biz' in url:
url = self.load(url, just_header=True)['location']
- self.baseUrl = re.match(self.__pattern__, url).group(1)
- self.fileId = re.match(self.__pattern__, url).group('id')
+ self.baseUrl = "http://www.%s.biz" % re.match(self.__pattern__, url).group(1)
+ self.fileId = re.match(self.__pattern__, url).group('ID')
self.package = pyfile.package()
def isOnline(self):
@@ -223,7 +225,6 @@ class ShareLinksBiz(Crypter):
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)
@@ -244,7 +245,6 @@ class ShareLinksBiz(Crypter):
return crypted, jk
def _getLinks(self, crypted, jk):
-
# Get key
jreturn = self.js.eval("%s f()" % jk)
self.logDebug("JsEngine returns value [%s]" % jreturn)
diff --git a/module/plugins/crypter/ShareRapidComFolder.py b/module/plugins/crypter/ShareRapidComFolder.py
index 15c8dccde..fd12ff96f 100644
--- a/module/plugins/crypter/ShareRapidComFolder.py
+++ b/module/plugins/crypter/ShareRapidComFolder.py
@@ -6,8 +6,10 @@ from module.plugins.internal.SimpleCrypter import SimpleCrypter
class ShareRapidComFolder(SimpleCrypter):
__name__ = "ShareRapidComFolder"
__type__ = "crypter"
- __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/.+)'
__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"""
__author_name__ = "zoidberg"
__author_mail__ = "zoidberg@mujmail.cz"
diff --git a/module/plugins/crypter/SpeedLoadOrgFolder.py b/module/plugins/crypter/SpeedLoadOrgFolder.py
index 4bb1562ee..092d3efe4 100644
--- a/module/plugins/crypter/SpeedLoadOrgFolder.py
+++ b/module/plugins/crypter/SpeedLoadOrgFolder.py
@@ -1,18 +1,4 @@
# -*- coding: utf-8 -*-
-############################################################################
-# This program is free software: you can redistribute it and/or modify #
-# it under the terms of the GNU Affero General Public License as #
-# published by the Free Software Foundation, either version 3 of the #
-# License, or (at your option) any later version. #
-# #
-# This program is distributed in the hope that it will be useful, #
-# but WITHOUT ANY WARRANTY; without even the implied warranty of #
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
-# GNU Affero General Public License for more details. #
-# #
-# You should have received a copy of the GNU Affero General Public License #
-# along with this program. If not, see <http://www.gnu.org/licenses/>. #
-############################################################################
from module.plugins.internal.DeadCrypter import DeadCrypter
@@ -20,8 +6,10 @@ from module.plugins.internal.DeadCrypter import DeadCrypter
class SpeedLoadOrgFolder(DeadCrypter):
__name__ = "SpeedLoadOrgFolder"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?speedload\.org/(\d+~f$|folder/\d+/)'
__version__ = "0.3"
+
+ __pattern__ = r'http://(?:www\.)?speedload\.org/(\d+~f$|folder/\d+/)'
+
__description__ = """Speedload decrypter plugin"""
__author_name__ = "stickell"
__author_mail__ = "l.stickell@yahoo.it"
diff --git a/module/plugins/crypter/StealthTo.py b/module/plugins/crypter/StealthTo.py
index e97a741e0..402724e89 100644
--- a/module/plugins/crypter/StealthTo.py
+++ b/module/plugins/crypter/StealthTo.py
@@ -1,48 +1,15 @@
# -*- coding: utf-8 -*-
-import re
+from module.plugins.internal.DeadCrypter import DeadCrypter
-from module.plugins.Crypter import Crypter
-
-class StealthTo(Crypter):
+class StealthTo(DeadCrypter):
__name__ = "StealthTo"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?stealth.to/folder/'
- __version__ = "0.1"
+ __version__ = "0.2"
+
+ __pattern__ = r'http://(?:www\.)?stealth\.to/folder/.+'
+
__description__ = """Stealth.to decrypter plugin"""
__author_name__ = "spoob"
__author_mail__ = "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.req.load(url, cookies=True)
- temp_links = []
- ids = []
- ats = [] # authenticity_token
- inputs = re.findall(r"(<(input|form)[^>]+)", self.html)
- for input in inputs:
- if re.search(r"name=\"authenticity_token\"", input[0]):
- ats.append(re.search(r"value=\"([^\"]+)", input[0]).group(1))
- if re.search(r"name=\"id\"", input[0]):
- ids.append(re.search(r"value=\"([^\"]+)", input[0]).group(1))
-
- for i in xrange(0, len(ids)):
- self.req.load(url + "/web",
- post={"authenticity_token": ats[i], "id": str(ids[i]), "link": ("download_" + str(ids[i]))},
- cookies=True)
- new_html = self.req.load(url + "/web", post={"authenticity_token": ats[i], "id": str(ids[i]), "link": "1"},
- cookies=True)
- temp_links.append(re.search(r"iframe src=\"(.*)\" frameborder", new_html).group(1))
-
- self.links = temp_links
diff --git a/module/plugins/crypter/TnyCz.py b/module/plugins/crypter/TnyCz.py
index 6c56f7639..3ae2c5ed2 100644
--- a/module/plugins/crypter/TnyCz.py
+++ b/module/plugins/crypter/TnyCz.py
@@ -1,22 +1,5 @@
# -*- coding: utf-8 -*-
-"""
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License,
- or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>.
-
- @author: Walter Purcaro
-"""
-
from module.plugins.internal.SimpleCrypter import SimpleCrypter
import re
@@ -25,14 +8,17 @@ import re
class TnyCz(SimpleCrypter):
__name__ = "TnyCz"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?tny\.cz/\w+'
__version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?tny\.cz/\w+'
+
__description__ = """Tny.cz decrypter plugin"""
__author_name__ = "Walter Purcaro"
__author_mail__ = "vuolter@gmail.com"
TITLE_PATTERN = r'<title>(?P<title>.+) - .+</title>'
+
def getLinks(self):
m = re.search(r'<a id=\'save_paste\' href="(.+save\.php\?hash=.+)">', self.html)
return re.findall(".+", self.load(m.group(1), decode=True)) if m else None
diff --git a/module/plugins/crypter/TrailerzoneInfo.py b/module/plugins/crypter/TrailerzoneInfo.py
index 84a476a38..42e45a819 100644
--- a/module/plugins/crypter/TrailerzoneInfo.py
+++ b/module/plugins/crypter/TrailerzoneInfo.py
@@ -6,8 +6,10 @@ from module.plugins.internal.DeadCrypter import DeadCrypter
class TrailerzoneInfo(DeadCrypter):
__name__ = "TrailerzoneInfo"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?trailerzone.info/.*?'
__version__ = "0.03"
+
+ __pattern__ = r'http://(?:www\.)?trailerzone.info/.*?'
+
__description__ = """TrailerZone.info decrypter plugin"""
__author_name__ = "godofdream"
__author_mail__ = "soilfiction@gmail.com"
diff --git a/module/plugins/crypter/TurbobitNetFolder.py b/module/plugins/crypter/TurbobitNetFolder.py
index d9e63b4ce..0810e0ed1 100644
--- a/module/plugins/crypter/TurbobitNetFolder.py
+++ b/module/plugins/crypter/TurbobitNetFolder.py
@@ -1,18 +1,4 @@
# -*- coding: utf-8 -*-
-###############################################################################
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-###############################################################################
import re
@@ -23,22 +9,25 @@ from module.common.json_layer import json_loads
class TurbobitNetFolder(SimpleCrypter):
__name__ = "TurbobitNetFolder"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?turbobit\.net/download/folder/(?P<ID>\w+)'
__version__ = "0.03"
+
+ __pattern__ = r'http://(?:www\.)?turbobit\.net/download/folder/(?P<ID>\w+)'
+
__description__ = """Turbobit.net folder decrypter plugin"""
__author_name__ = ("stickell", "Walter Purcaro")
__author_mail__ = ("l.stickell@yahoo.it", "vuolter@gmail.com")
TITLE_PATTERN = r"src='/js/lib/grid/icon/folder.png'> <span>(?P<title>.+?)</span>"
+
def _getLinks(self, id, page=1):
gridFile = self.load("http://turbobit.net/downloadfolder/gridFile",
get={"rootId": id, "rows": 200, "page": page}, decode=True)
grid = json_loads(gridFile)
- if grid["rows"]:
- for i in grid["rows"]:
- yield i["id"]
+ if grid['rows']:
+ for i in grid['rows']:
+ yield i['id']
for id in self._getLinks(id, page + 1):
yield id
else:
diff --git a/module/plugins/crypter/TusfilesNetFolder.py b/module/plugins/crypter/TusfilesNetFolder.py
index 0bc770f99..f51c2b715 100644
--- a/module/plugins/crypter/TusfilesNetFolder.py
+++ b/module/plugins/crypter/TusfilesNetFolder.py
@@ -1,20 +1,4 @@
# -*- coding: utf-8 -*-
-###############################################################################
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# @author: Walter Purcaro
-###############################################################################
import math
import re
@@ -26,8 +10,10 @@ from module.plugins.internal.SimpleCrypter import SimpleCrypter
class TusfilesNetFolder(SimpleCrypter):
__name__ = "TusfilesNetFolder"
__type__ = "crypter"
+ __version__ = "0.02"
+
__pattern__ = r'https?://(?:www\.)?tusfiles\.net/go/(?P<ID>\w+)/?'
- __version__ = "0.01"
+
__description__ = """Tusfiles.net folder decrypter plugin"""
__author_name__ = ("Walter Purcaro", "stickell")
__author_mail__ = ("vuolter@gmail.com", "l.stickell@yahoo.it")
@@ -36,7 +22,8 @@ class TusfilesNetFolder(SimpleCrypter):
TITLE_PATTERN = r'<Title>.*?\: (?P<title>.+) folder</Title>'
PAGES_PATTERN = r'>\((?P<pages>\d+) \w+\)<'
- FILE_URL_REPLACEMENTS = [(__pattern__, r'https://www.tusfiles.net/go/\g<ID>/')]
+ URL_REPLACEMENTS = [(__pattern__, r'https://www.tusfiles.net/go/\g<ID>/')]
+
def loadPage(self, page_n):
return self.load(urljoin(self.pyfile.url, str(page_n)), decode=True)
diff --git a/module/plugins/crypter/UlozToFolder.py b/module/plugins/crypter/UlozToFolder.py
index eebb14497..06d30099c 100644
--- a/module/plugins/crypter/UlozToFolder.py
+++ b/module/plugins/crypter/UlozToFolder.py
@@ -7,8 +7,10 @@ from module.plugins.Crypter import Crypter
class UlozToFolder(Crypter):
__name__ = "UlozToFolder"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?(uloz\.to|ulozto\.(cz|sk|net)|bagruj.cz|zachowajto.pl)/(m|soubory)/.*'
__version__ = "0.2"
+
+ __pattern__ = r'http://(?:www\.)?(uloz\.to|ulozto\.(cz|sk|net)|bagruj.cz|zachowajto.pl)/(m|soubory)/.*'
+
__description__ = """Uloz.to folder decrypter plugin"""
__author_name__ = "zoidberg"
__author_mail__ = "zoidberg@mujmail.cz"
@@ -17,26 +19,27 @@ class UlozToFolder(Crypter):
LINK_PATTERN = r'<br /><a href="/([^"]+)">[^<]+</a>'
NEXT_PAGE_PATTERN = r'<a class="next " href="/([^"]+)">&nbsp;</a>'
+
def decrypt(self, pyfile):
html = self.load(pyfile.url)
new_links = []
for i in xrange(1, 100):
self.logInfo("Fetching links from page %i" % i)
- found = re.search(self.FOLDER_PATTERN, html, re.DOTALL)
- if found is None:
+ m = re.search(self.FOLDER_PATTERN, html, re.DOTALL)
+ if m is None:
self.fail("Parse error (FOLDER)")
- new_links.extend(re.findall(self.LINK_PATTERN, found.group(1)))
- found = re.search(self.NEXT_PAGE_PATTERN, html)
- if found:
- html = self.load("http://ulozto.net/" + found.group(1))
+ new_links.extend(re.findall(self.LINK_PATTERN, m.group(1)))
+ m = re.search(self.NEXT_PAGE_PATTERN, html)
+ if m:
+ html = self.load("http://ulozto.net/" + m.group(1))
else:
break
else:
self.logInfo("Limit of 99 pages reached, aborting")
if new_links:
- self.core.files.addLinks(map(lambda s: "http://ulozto.net/%s" % s, new_links), pyfile.package().id)
+ self.urls = [map(lambda s: "http://ulozto.net/%s" % s, new_links)]
else:
self.fail('Could not extract any links')
diff --git a/module/plugins/crypter/UploadableChFolder.py b/module/plugins/crypter/UploadableChFolder.py
new file mode 100644
index 000000000..b76076531
--- /dev/null
+++ b/module/plugins/crypter/UploadableChFolder.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+
+from module.plugins.internal.SimpleCrypter import SimpleCrypter
+
+
+class UploadableChFolder(SimpleCrypter):
+ __name__ = "UploadableChFolder"
+ __type__ = "crypter"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?uploadable\.ch/list/\w+'
+
+ __description__ = """ Uploadable.ch folder decrypter plugin """
+ __author_name__ = ("guidobelix", "Walter Purcaro")
+ __author_mail__ = ("guidobelix@hotmail.it", "vuolter@gmail.com")
+
+
+ LINK_PATTERN = r'"(.+?)" class="icon_zipfile">'
+ TITLE_PATTERN = r'<div class="folder"><span>&nbsp;</span>(?P<title>.+?)</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/module/plugins/crypter/UploadedToFolder.py b/module/plugins/crypter/UploadedToFolder.py
index 97c77fdce..068412062 100644
--- a/module/plugins/crypter/UploadedToFolder.py
+++ b/module/plugins/crypter/UploadedToFolder.py
@@ -1,18 +1,4 @@
# -*- coding: utf-8 -*-
-############################################################################
-# This program is free software: you can redistribute it and/or modify #
-# it under the terms of the GNU Affero General Public License as #
-# published by the Free Software Foundation, either version 3 of the #
-# License, or (at your option) any later version. #
-# #
-# This program is distributed in the hope that it will be useful, #
-# but WITHOUT ANY WARRANTY; without even the implied warranty of #
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
-# GNU Affero General Public License for more details. #
-# #
-# You should have received a copy of the GNU Affero General Public License #
-# along with this program. If not, see <http://www.gnu.org/licenses/>. #
-############################################################################
import re
@@ -22,8 +8,10 @@ from module.plugins.internal.SimpleCrypter import SimpleCrypter
class UploadedToFolder(SimpleCrypter):
__name__ = "UploadedToFolder"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?(uploaded|ul)\.(to|net)/(f|folder|list)/(?P<id>\w+)'
__version__ = "0.3"
+
+ __pattern__ = r'http://(?:www\.)?(uploaded|ul)\.(to|net)/(f|folder|list)/(?P<id>\w+)'
+
__description__ = """UploadedTo decrypter plugin"""
__author_name__ = "stickell"
__author_mail__ = "l.stickell@yahoo.it"
@@ -31,6 +19,7 @@ class UploadedToFolder(SimpleCrypter):
PLAIN_PATTERN = r'<small class="date"><a href="(?P<plain>[\w/]+)" onclick='
TITLE_PATTERN = r'<title>(?P<title>[^<]+)</title>'
+
def decrypt(self, pyfile):
self.html = self.load(pyfile.url)
diff --git a/module/plugins/crypter/WiiReloadedOrg.py b/module/plugins/crypter/WiiReloadedOrg.py
index 0b983c705..cb02fbd2d 100644
--- a/module/plugins/crypter/WiiReloadedOrg.py
+++ b/module/plugins/crypter/WiiReloadedOrg.py
@@ -6,8 +6,10 @@ from module.plugins.internal.DeadCrypter import DeadCrypter
class WiiReloadedOrg(DeadCrypter):
__name__ = "WiiReloadedOrg"
__type__ = "crypter"
- __pattern__ = r'http://(?:www\.)?wii-reloaded\.org/protect/get\.php\?i=.+'
__version__ = "0.11"
+
+ __pattern__ = r'http://(?:www\.)?wii-reloaded\.org/protect/get\.php\?i=.+'
+
__description__ = """Wii-Reloaded.org decrypter plugin"""
__author_name__ = "hzpz"
- __author_mail__ = ""
+ __author_mail__ = None
diff --git a/module/plugins/crypter/XupPl.py b/module/plugins/crypter/XupPl.py
index c04fc69f8..5e5f511a8 100644
--- a/module/plugins/crypter/XupPl.py
+++ b/module/plugins/crypter/XupPl.py
@@ -6,15 +6,18 @@ from module.plugins.Crypter import Crypter
class XupPl(Crypter):
__name__ = "XupPl"
__type__ = "crypter"
- __pattern__ = r'https?://(?:[^/]*\.)?xup\.pl/.*'
__version__ = "0.1"
+
+ __pattern__ = r'https?://(?:[^/]*\.)?xup\.pl/.*'
+
__description__ = """Xup.pl decrypter plugin"""
__author_name__ = "z00nx"
__author_mail__ = "z00nx0@gmail.com"
+
def decrypt(self, pyfile):
header = self.load(pyfile.url, just_header=True)
if 'location' in header:
- self.core.files.addLinks([header['location']], pyfile.package().id)
+ self.urls = [header['location']]
else:
self.fail('Unable to find link')
diff --git a/module/plugins/crypter/YoutubeBatch.py b/module/plugins/crypter/YoutubeBatch.py
index e6976471c..1caca16bd 100644
--- a/module/plugins/crypter/YoutubeBatch.py
+++ b/module/plugins/crypter/YoutubeBatch.py
@@ -1,44 +1,31 @@
# -*- coding: utf-8 -*-
-"""
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License,
- or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>.
-
- @author: Walter Purcaro
-"""
+import re
from urlparse import urljoin
-import re
from module.common.json_layer import json_loads
from module.plugins.Crypter import Crypter
from module.utils import save_join
-API_KEY = "AIzaSyCKnWLNlkX-L4oD1aEzqqhRw1zczeD6_k0"
+API_URL = "AIzaSyCKnWLNlkX-L4oD1aEzqqhRw1zczeD6_k0"
class YoutubeBatch(Crypter):
__name__ = "YoutubeBatch"
__type__ = "crypter"
- __pattern__ = r'https?://(?:www\.)?(m\.)?youtube\.com/(?P<TYPE>user|playlist|view_play_list)(/|.*?[?&](?:list|p)=)(?P<ID>[\w-]+)'
__version__ = "1.00"
- __description__ = """Youtube.com channel & playlist decrypter plugin"""
+
+ __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),
("favorites", "bool", "Grab user (channel) favorite videos", False),
("uploads", "bool", "Grab channel unplaylisted videos", True)]
+
+ __description__ = """Youtube.com channel & playlist decrypter plugin"""
__author_name__ = "Walter Purcaro"
__author_mail__ = "vuolter@gmail.com"
+
def api_response(self, ref, req):
req.update({"key": API_KEY})
url = urljoin("https://www.googleapis.com/youtube/v3/", ref)
@@ -47,21 +34,21 @@ class YoutubeBatch(Crypter):
def getChannel(self, user):
channels = self.api_response("channels", {"part": "id,snippet,contentDetails", "forUsername": user, "maxResults": "50"})
- if channels["items"]:
- channel = channels["items"][0]
- return {"id": channel["id"],
- "title": channel["snippet"]["title"],
- "relatedPlaylists": channel["contentDetails"]["relatedPlaylists"],
+ if channels['items']:
+ channel = channels['items'][0]
+ return {"id": channel['id'],
+ "title": channel['snippet']['title'],
+ "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"]:
- playlist = playlists["items"][0]
+ if playlists['items']:
+ playlist = playlists['items'][0]
return {"id": p_id,
- "title": playlist["snippet"]["title"],
- "channelId": playlist["snippet"]["channelId"],
- "channelTitle": playlist["snippet"]["channelTitle"]}
+ "title": playlist['snippet']['title'],
+ "channelId": playlist['snippet']['channelId'],
+ "channelTitle": playlist['snippet']['channelTitle']}
def _getPlaylists(self, id, token=None):
req = {"part": "id", "maxResults": "50", "channelId": id}
@@ -70,11 +57,11 @@ class YoutubeBatch(Crypter):
playlists = self.api_response("playlists", req)
- for playlist in playlists["items"]:
- yield playlist["id"]
+ for playlist in playlists['items']:
+ yield playlist['id']
if "nextPageToken" in playlists:
- for item in self._getPlaylists(id, playlists["nextPageToken"]):
+ for item in self._getPlaylists(id, playlists['nextPageToken']):
yield item
def getPlaylists(self, ch_id):
@@ -87,20 +74,20 @@ class YoutubeBatch(Crypter):
playlist = self.api_response("playlistItems", req)
- for item in playlist["items"]:
- yield item["contentDetails"]["videoId"]
+ for item in playlist['items']:
+ yield item['contentDetails']['videoId']
if "nextPageToken" in playlist:
- for item in self._getVideosId(id, playlist["nextPageToken"]):
+ 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):
- match = re.match(self.__pattern__, pyfile.url)
- m_id = match.group("ID")
- m_type = match.group("TYPE")
+ m = re.match(self.__pattern__, pyfile.url)
+ m_id = m.group("ID")
+ m_type = m.group("TYPE")
if m_type == "user":
self.logDebug("Url recognized as Channel")
@@ -108,18 +95,18 @@ class YoutubeBatch(Crypter):
channel = self.getChannel(user)
if channel:
- playlists = self.getPlaylists(channel["id"])
- self.logDebug("%s playlist\s found on channel \"%s\"" % (len(playlists), channel["title"]))
+ playlists = self.getPlaylists(channel['id'])
+ self.logDebug("%s playlist\s found on channel \"%s\"" % (len(playlists), channel['title']))
- relatedplaylist = {p_name: self.getPlaylist(p_id) for p_name, p_id in channel["relatedPlaylists"].iteritems()}
+ relatedplaylist = {p_name: self.getPlaylist(p_id) for p_name, p_id in channel['relatedPlaylists'].iteritems()}
self.logDebug("Channel's related playlists found = %s" % relatedplaylist.keys())
- relatedplaylist["uploads"]["title"] = "Unplaylisted videos"
- relatedplaylist["uploads"]["checkDups"] = True #: checkDups flag
+ relatedplaylist['uploads']['title'] = "Unplaylisted videos"
+ relatedplaylist['uploads']['checkDups'] = True #: checkDups flag
for p_name, p_data in relatedplaylist.iteritems():
if self.getConfig(p_name):
- p_data["title"] += " of " + user
+ p_data['title'] += " of " + user
playlists.append(p_data)
else:
playlists = []
@@ -133,9 +120,9 @@ class YoutubeBatch(Crypter):
addedvideos = []
urlize = lambda x: "https://www.youtube.com/watch?v=" + x
for p in playlists:
- p_name = p["title"]
- p_videos = self.getVideosId(p["id"])
- p_folder = save_join(self.config['general']['download_folder'], p["channelTitle"], p_name)
+ p_name = p['title']
+ p_videos = self.getVideosId(p['id'])
+ p_folder = save_join(self.config['general']['download_folder'], p['channelTitle'], p_name)
self.logDebug("%s video\s found on playlist \"%s\"" % (len(p_videos), p_name))
if not p_videos: