rebase servers
This commit is contained in:
+10
-2
@@ -5,7 +5,7 @@ import urllib, re
|
|||||||
|
|
||||||
from core import httptools
|
from core import httptools
|
||||||
from core import scrapertools
|
from core import scrapertools
|
||||||
from platformcode import logger, config
|
from platformcode import logger, config, platformtools
|
||||||
from core.support import dbg
|
from core.support import dbg
|
||||||
|
|
||||||
|
|
||||||
@@ -40,7 +40,15 @@ def get_video_url(page_url, premium=False, user="", password="", video_password=
|
|||||||
# dbg()
|
# dbg()
|
||||||
|
|
||||||
global data
|
global data
|
||||||
logger.info('PAGE DATA' + data)
|
# logger.info('PAGE DATA' + data)
|
||||||
|
# sitekey = scrapertools.find_single_match(data, 'data-sitekey="([^"]+)')
|
||||||
|
sitekey = '6LeNU5IUAAAAAPNs_w-s8Rc-X2C2SPE3UW8lkkjW'
|
||||||
|
# from core import support
|
||||||
|
# support.dbg()
|
||||||
|
captcha = platformtools.show_recaptcha(sitekey, page_url) if sitekey else ''
|
||||||
|
|
||||||
|
if captcha:
|
||||||
|
data = httptools.downloadpage(page_url, post={'g-recaptcha-response': captcha}).data
|
||||||
vres = scrapertools.find_multiple_matches(data, 'nowrap[^>]+>([^,]+)')
|
vres = scrapertools.find_multiple_matches(data, 'nowrap[^>]+>([^,]+)')
|
||||||
if not vres: vres = scrapertools.find_multiple_matches(data, '<td>(\d+x\d+)')
|
if not vres: vres = scrapertools.find_multiple_matches(data, '<td>(\d+x\d+)')
|
||||||
|
|
||||||
|
|||||||
+5
-10
@@ -20,15 +20,10 @@ def get_video_url(page_url, premium=False, user="", password="", video_password=
|
|||||||
logger.info("(page_url='%s')" % page_url)
|
logger.info("(page_url='%s')" % page_url)
|
||||||
video_urls = []
|
video_urls = []
|
||||||
data = httptools.downloadpage(page_url).data
|
data = httptools.downloadpage(page_url).data
|
||||||
patron = 'id="download-quality-(\w+).*?href="([^"]+)"'
|
patron = 'download-url.*?href="([^"]+)"'
|
||||||
match = scrapertools.find_multiple_matches(data, patron)
|
match = scrapertools.find_multiple_matches(data, patron)
|
||||||
for calidad, media_url in match:
|
for media_url in match:
|
||||||
title = "%s [anonfile]" % (calidad)
|
media_url += "|Referer=%s" %page_url
|
||||||
video_urls.append([title, media_url, int(calidad.replace("p", ""))])
|
title = "mp4 [anonfile]"
|
||||||
|
video_urls.append([title, media_url])
|
||||||
video_urls.sort(key=lambda x: x[2])
|
|
||||||
for video_url in video_urls:
|
|
||||||
video_url[2] = 0
|
|
||||||
logger.info("%s - %s" % (video_url[0], video_url[1]))
|
|
||||||
|
|
||||||
return video_urls
|
return video_urls
|
||||||
|
|||||||
@@ -10,8 +10,8 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"free": true,
|
"free": true,
|
||||||
"id": "ArchiveOrg",
|
"id": "archiveorg",
|
||||||
"name": "archiveorg",
|
"name": "ArchiveOrg",
|
||||||
"settings": [
|
"settings": [
|
||||||
{
|
{
|
||||||
"default": false,
|
"default": false,
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"find_videos": {
|
||||||
|
"ignore_urls": [],
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"pattern": "badshare.io/(?:plugins/mediaplayer/site/_embed.php\\?u=|)([A-z0-9]+)",
|
||||||
|
"url": "https://badshare.io/\\1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"free": true,
|
||||||
|
"id": "badshare",
|
||||||
|
"name": "badshare",
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"default": false,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "black_list",
|
||||||
|
"label": "@60654",
|
||||||
|
"type": "bool",
|
||||||
|
"visible": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "favorites_servers_list",
|
||||||
|
"label": "@60655",
|
||||||
|
"lvalues": [
|
||||||
|
"No",
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5"
|
||||||
|
],
|
||||||
|
"type": "list",
|
||||||
|
"visible": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thumbnail": "https://badshare.io/badshare_logo.png"
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# --------------------------------------------------------
|
||||||
|
# Conector Badshare By Alfa development Group
|
||||||
|
# --------------------------------------------------------
|
||||||
|
|
||||||
|
import re
|
||||||
|
from core import httptools
|
||||||
|
from core import scrapertools
|
||||||
|
from platformcode import logger
|
||||||
|
|
||||||
|
|
||||||
|
def test_video_exists(page_url):
|
||||||
|
logger.info("(page_url='%s')" % page_url)
|
||||||
|
global page
|
||||||
|
page = httptools.downloadpage(page_url)
|
||||||
|
if not page.sucess:
|
||||||
|
return False, "[Badshare] El fichero no existe o ha sido borrado"
|
||||||
|
return True, ""
|
||||||
|
|
||||||
|
|
||||||
|
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
||||||
|
logger.info("url=" + page_url)
|
||||||
|
video_urls = []
|
||||||
|
ext = '.mp4'
|
||||||
|
|
||||||
|
data = page.data
|
||||||
|
data = re.sub(r'\n|\r|\t|\s{2,}', "", data)
|
||||||
|
media_url, ext = scrapertools.find_single_match(data, r'file:\s*"([^"]+)",type:\s*"([^"]+)"')
|
||||||
|
|
||||||
|
video_urls.append(["%s [Badshare]" % ext, media_url])
|
||||||
|
|
||||||
|
return video_urls
|
||||||
@@ -4,8 +4,12 @@
|
|||||||
"ignore_urls": [],
|
"ignore_urls": [],
|
||||||
"patterns": [
|
"patterns": [
|
||||||
{
|
{
|
||||||
"pattern": "(https://bdupload.info/[A-z0-9]+)",
|
"pattern": "(https://bdupload.(?:info|asia)/[A-z0-9]+)",
|
||||||
"url": "\\1"
|
"url": "\\1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "https://dl.bdupload.(?:info|asia|in)/([A-z0-9]+)",
|
||||||
|
"url": "https://bdupload.asia/\\1"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
+2
-1
@@ -29,7 +29,8 @@ def get_video_url(page_url, user="", password="", video_password=""):
|
|||||||
data1 = httptools.downloadpage(page_url, post = post, headers = headers).data
|
data1 = httptools.downloadpage(page_url, post = post, headers = headers).data
|
||||||
patron = "window.open\('([^']+)"
|
patron = "window.open\('([^']+)"
|
||||||
file = scrapertools.find_single_match(data1, patron).replace(" ","%20")
|
file = scrapertools.find_single_match(data1, patron).replace(" ","%20")
|
||||||
file += "|User-Agent=" + headers['User-Agent']
|
file += "|User-Agent=" + httptools.get_user_agent()
|
||||||
|
file += "&Host=fs30.indifiles.com:182"
|
||||||
video_urls = []
|
video_urls = []
|
||||||
videourl = file
|
videourl = file
|
||||||
video_urls.append([".MP4 [bdupload]", videourl])
|
video_urls.append([".MP4 [bdupload]", videourl])
|
||||||
|
|||||||
@@ -6,6 +6,10 @@
|
|||||||
{
|
{
|
||||||
"pattern": "(http://b.ter.tv/v/[A-z0-9]+)",
|
"pattern": "(http://b.ter.tv/v/[A-z0-9]+)",
|
||||||
"url": "\\1"
|
"url": "\\1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "(https://byter.tv/v/[A-z0-9]+)",
|
||||||
|
"url": "\\1"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -7,6 +7,10 @@
|
|||||||
"pattern": "https://www.bitporno.com/(?:e|embed)/([A-z0-9]+)",
|
"pattern": "https://www.bitporno.com/(?:e|embed)/([A-z0-9]+)",
|
||||||
"url": "https://www.bitporno.com/e/\\1"
|
"url": "https://www.bitporno.com/e/\\1"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"pattern": "https://www.bitporno.com/\\?v=([A-z0-9]+)",
|
||||||
|
"url": "https://www.bitporno.com/e/\\1"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"pattern": "raptu.com/(?:\\?v=|embed/|e/|v/)([A-z0-9]+)",
|
"pattern": "raptu.com/(?:\\?v=|embed/|e/|v/)([A-z0-9]+)",
|
||||||
"url": "https://www.bitporno.com/e/\\1"
|
"url": "https://www.bitporno.com/e/\\1"
|
||||||
|
|||||||
+2
-1
@@ -23,7 +23,7 @@ def get_video_url(page_url, user="", password="", video_password=""):
|
|||||||
logger.info("(page_url='%s')" % page_url)
|
logger.info("(page_url='%s')" % page_url)
|
||||||
video_urls = []
|
video_urls = []
|
||||||
data = httptools.downloadpage(page_url).data
|
data = httptools.downloadpage(page_url).data
|
||||||
videourl = scrapertools.find_multiple_matches(data, '<source src="(http[^"]+).*?title="([^"]+)')
|
videourl = scrapertools.find_multiple_matches(data, '<source src="([^"]+)".*?label="([^"]+)"')
|
||||||
scrapertools.printMatches(videourl)
|
scrapertools.printMatches(videourl)
|
||||||
for scrapedurl, scrapedquality in videourl:
|
for scrapedurl, scrapedquality in videourl:
|
||||||
if "loadthumb" in scrapedurl:
|
if "loadthumb" in scrapedurl:
|
||||||
@@ -32,3 +32,4 @@ def get_video_url(page_url, user="", password="", video_password=""):
|
|||||||
video_urls.append([scrapedquality + " [bitp]", scrapedurl])
|
video_urls.append([scrapedquality + " [bitp]", scrapedurl])
|
||||||
video_urls.sort(key=lambda it: int(it[0].split("p ", 1)[0]))
|
video_urls.sort(key=lambda it: int(it[0].split("p ", 1)[0]))
|
||||||
return video_urls
|
return video_urls
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,78 @@
|
|||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"find_videos": {
|
||||||
|
"ignore_urls": [],
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"pattern": "(https://www.bravoporn.com/videos/[0-9]+/)",
|
||||||
|
"url": "\\1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "(https://www.bravotube.net/videos/[A-z0-9-]+/)",
|
||||||
|
"url": "\\1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "(https://xcafe.com/[0-9]+/)",
|
||||||
|
"url": "\\1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "(https://es.anyporn.com/[0-9]+/)",
|
||||||
|
"url": "\\1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "(https://www.alphaporno.com/videos/[A-z0-9-]+/)",
|
||||||
|
"url": "\\1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "(https://xbabe.com/videos/[A-z0-9-]+/)",
|
||||||
|
"url": "\\1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "(https://xcum.com/v/[0-9-]+/)",
|
||||||
|
"url": "\\1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "(https://sex3.com/[0-9-]+/)",
|
||||||
|
"url": "\\1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "(https://www.tubewolf.com/movies/[A-z0-9-]+/)",
|
||||||
|
"url": "\\1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "(https://anysex.com/[0-9]+/)",
|
||||||
|
"url": "\\1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"free": true,
|
||||||
|
"id": "bravoporn",
|
||||||
|
"name": "bravoporn",
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"default": false,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "black_list",
|
||||||
|
"label": "@60654",
|
||||||
|
"type": "bool",
|
||||||
|
"visible": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "favorites_servers_list",
|
||||||
|
"label": "@60655",
|
||||||
|
"lvalues": [
|
||||||
|
"No",
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5"
|
||||||
|
],
|
||||||
|
"type": "list",
|
||||||
|
"visible": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thumbnail": ""
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import re
|
||||||
|
from core import httptools
|
||||||
|
from core import scrapertools
|
||||||
|
from platformcode import logger
|
||||||
|
|
||||||
|
|
||||||
|
def test_video_exists(page_url):
|
||||||
|
logger.info("(page_url='%s')" % page_url)
|
||||||
|
global data, server
|
||||||
|
data = httptools.downloadpage(page_url).data
|
||||||
|
server = scrapertools.find_single_match(page_url, 'https://(?:www.|es.|)([A-z0-9-]+).(?:com|net)')
|
||||||
|
if "<h2>WE ARE SORRY</h2>" in data or '<title>404 Not Found</title>' in data:
|
||||||
|
return False, "[%s] El fichero no existe o ha sido borrado" %server
|
||||||
|
return True, ""
|
||||||
|
|
||||||
|
|
||||||
|
def get_video_url(page_url, video_password):
|
||||||
|
logger.info("(page_url='%s')" % page_url)
|
||||||
|
video_urls = []
|
||||||
|
patron = '<source (?:id="video_source_\d+" |data-fluid-hd |)src="([^"]+)".*?title="([^"]+)"'
|
||||||
|
matches = scrapertools.find_multiple_matches(data, patron)
|
||||||
|
for url,quality in matches:
|
||||||
|
url += "|Referer=%s" % page_url
|
||||||
|
logger.debug(url)
|
||||||
|
video_urls.append(["[%s] %s" %(server,quality), url])
|
||||||
|
return video_urls
|
||||||
@@ -5,7 +5,11 @@
|
|||||||
"patterns": [
|
"patterns": [
|
||||||
{
|
{
|
||||||
"pattern": "https://cinemaupload.com/embed/([a-zA-Z0-9]+)",
|
"pattern": "https://cinemaupload.com/embed/([a-zA-Z0-9]+)",
|
||||||
"url": "https://cinemaupload.com/embed/\\1/"
|
"url": "https://embed.cload.video/embed/\\1/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "(embed.cload.video/(?:embed|intermediate)/\\w+)",
|
||||||
|
"url": "https://\\1"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
# Conector Cinemaupload By Alfa development Group
|
# Conector Cinemaupload By Alfa development Group
|
||||||
# --------------------------------------------------------
|
# --------------------------------------------------------
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from core import httptools
|
from core import httptools
|
||||||
from core import scrapertools
|
from core import scrapertools
|
||||||
from platformcode import logger
|
from platformcode import logger
|
||||||
@@ -22,8 +21,9 @@ def get_video_url(page_url, premium=False, user="", password="", video_password=
|
|||||||
video_urls = []
|
video_urls = []
|
||||||
data = httptools.downloadpage(page_url).data
|
data = httptools.downloadpage(page_url).data
|
||||||
data = re.sub(r'\n|\r|\t| |<br>|\s{2,}', "", data)
|
data = re.sub(r'\n|\r|\t| |<br>|\s{2,}', "", data)
|
||||||
patron = "source: '([^']+)',"
|
patron = 'file: "([^"]+)",'
|
||||||
matches = scrapertools.find_multiple_matches(data, patron)
|
matches = scrapertools.find_multiple_matches(data, patron)
|
||||||
for url in matches:
|
for url in matches:
|
||||||
|
url += "|Referer=%s" %page_url
|
||||||
video_urls.append(['.m3u8 [CinemaUpload]', url])
|
video_urls.append(['.m3u8 [CinemaUpload]', url])
|
||||||
return video_urls
|
return video_urls
|
||||||
|
|||||||
@@ -13,7 +13,8 @@
|
|||||||
"id": "clicknupload",
|
"id": "clicknupload",
|
||||||
"name": "clicknupload",
|
"name": "clicknupload",
|
||||||
"premium": [
|
"premium": [
|
||||||
"realdebrid"
|
"realdebrid",
|
||||||
|
"alldebrid"
|
||||||
],
|
],
|
||||||
"settings": [
|
"settings": [
|
||||||
{
|
{
|
||||||
|
|||||||
Regular → Executable
+11
-3
@@ -1,6 +1,15 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import urllib
|
import sys
|
||||||
|
PY3 = False
|
||||||
|
if sys.version_info[0] >= 3: PY3 = True; unicode = str; unichr = chr; long = int
|
||||||
|
|
||||||
|
if PY3:
|
||||||
|
#from future import standard_library
|
||||||
|
#standard_library.install_aliases()
|
||||||
|
import urllib.parse as urllib # Es muy lento en PY2. En PY3 es nativo
|
||||||
|
else:
|
||||||
|
import urllib # Usamos el nativo de PY2 que es más rápido
|
||||||
|
|
||||||
from core import httptools
|
from core import httptools
|
||||||
from core import scrapertools
|
from core import scrapertools
|
||||||
@@ -48,7 +57,7 @@ def get_video_url(page_url, premium=False, user="", password="", video_password=
|
|||||||
def get_data(url_orig, req_post=""):
|
def get_data(url_orig, req_post=""):
|
||||||
try:
|
try:
|
||||||
if not excption:
|
if not excption:
|
||||||
response = httptools.downloadpage(url_orig, req_post)
|
response = httptools.downloadpage(url_orig, post=req_post)
|
||||||
if not response.data or "urlopen error [Errno 1]" in str(response.code):
|
if not response.data or "urlopen error [Errno 1]" in str(response.code):
|
||||||
global excption
|
global excption
|
||||||
excption = True
|
excption = True
|
||||||
@@ -57,7 +66,6 @@ def get_data(url_orig, req_post=""):
|
|||||||
else:
|
else:
|
||||||
raise Exception
|
raise Exception
|
||||||
except:
|
except:
|
||||||
import urllib
|
|
||||||
post = {"address": url_orig.replace(".me", ".org")}
|
post = {"address": url_orig.replace(".me", ".org")}
|
||||||
if req_post:
|
if req_post:
|
||||||
post["options"] = [{"man": "--data", "attribute": req_post}]
|
post["options"] = [{"man": "--data", "attribute": req_post}]
|
||||||
|
|||||||
@@ -4,14 +4,18 @@
|
|||||||
"ignore_urls": [],
|
"ignore_urls": [],
|
||||||
"patterns": [
|
"patterns": [
|
||||||
{
|
{
|
||||||
"pattern": "clipwatching.com/((?:embed-)?[a-zA-Z0-9./_\\-\\[\\]\\(\\)]+).html",
|
"pattern": "clipwatching.com/(e.*?.html)",
|
||||||
"url": "http://clipwatching.com/\\1.html"
|
"url": "http://clipwatching.com/\\1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "clipwatching.com/(\\w+)",
|
||||||
|
"url": "http://clipwatching.com/embed-\\1.html"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"free": true,
|
"free": true,
|
||||||
"id": "clipwatching",
|
"id": "clipwatching",
|
||||||
"name": "ClipWatching",
|
"name": "clipwatching",
|
||||||
"settings": [
|
"settings": [
|
||||||
{
|
{
|
||||||
"default": false,
|
"default": false,
|
||||||
|
|||||||
+12
-14
@@ -1,14 +1,13 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import re
|
|
||||||
from core import httptools
|
from core import httptools
|
||||||
from core import scrapertools
|
from core import scrapertools
|
||||||
from lib import jsunpack
|
from lib import jsunpack
|
||||||
from platformcode import logger, config
|
from platformcode import logger, config
|
||||||
|
|
||||||
|
|
||||||
def test_video_exists(page_url):
|
def test_video_exists(page_url):
|
||||||
logger.info("(page_url='%s')" % page_url)
|
logger.info("(page_url='%s')" % page_url)
|
||||||
|
global data
|
||||||
data = httptools.downloadpage(page_url).data
|
data = httptools.downloadpage(page_url).data
|
||||||
if "File Not Found" in data or "File was deleted" in data:
|
if "File Not Found" in data or "File was deleted" in data:
|
||||||
return False, config.get_localized_string(70292) % "ClipWatching"
|
return False, config.get_localized_string(70292) % "ClipWatching"
|
||||||
@@ -17,18 +16,17 @@ def test_video_exists(page_url):
|
|||||||
|
|
||||||
def get_video_url(page_url, user="", password="", video_password=""):
|
def get_video_url(page_url, user="", password="", video_password=""):
|
||||||
logger.info("(page_url='%s')" % page_url)
|
logger.info("(page_url='%s')" % page_url)
|
||||||
data = httptools.downloadpage(page_url).data
|
|
||||||
data = re.sub('\t|\n','',data)
|
|
||||||
logger.info('CLIP DATA= ' + data)
|
|
||||||
packed = scrapertools.find_single_match(data, r"text/javascript'>(.*?)\s*</script>")
|
|
||||||
try: unpacked = jsunpack.unpack(packed)
|
|
||||||
except: unpacked = data
|
|
||||||
video_urls = []
|
video_urls = []
|
||||||
videos = scrapertools.find_multiple_matches(unpacked, r'(?:file|src):\s*"([^"]+).*?type:\s*"video/([^"]+)".*?label:\s*"([^"]+)')
|
try:
|
||||||
for video, Type, label in videos:
|
packed = scrapertools.find_single_match(data, "text/javascript'>(eval.*?)\s*</script>")
|
||||||
logger.info(Type)
|
unpacked = jsunpack.unpack(packed)
|
||||||
logger.info(label)
|
except:
|
||||||
|
unpacked = scrapertools.find_single_match(data,"window.hola_player.*")
|
||||||
|
videos = scrapertools.find_multiple_matches(unpacked, r'(?:file|src):\s*"([^"]+).*?label:\s*"([^"]+)')
|
||||||
|
for video, label in videos:
|
||||||
if ".jpg" not in video:
|
if ".jpg" not in video:
|
||||||
video_urls.append(['%s [%sp] [ClipWatching]' % (Type, label), video])
|
if not label.endswith('p'):
|
||||||
video_urls.sort(key=lambda x: x[0].split()[1])
|
label += 'p'
|
||||||
|
video_urls.append([label + " [clipwatching]", video])
|
||||||
|
video_urls.sort(key=lambda it: int(it[0].split("p ", 1)[0]))
|
||||||
return video_urls
|
return video_urls
|
||||||
|
|||||||
@@ -4,14 +4,14 @@
|
|||||||
"ignore_urls": [],
|
"ignore_urls": [],
|
||||||
"patterns": [
|
"patterns": [
|
||||||
{
|
{
|
||||||
"pattern": "cloudvideo.tv/(?:embed-)?([a-z0-9]+)(?:.html)?",
|
"pattern": "cloudvideo.tv/(?:embed-|)([a-z0-9]+)(?:.html|)",
|
||||||
"url": "https://cloudvideo.tv/embed-\\1.html"
|
"url": "https://cloudvideo.tv/embed-\\1.html"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"free": true,
|
"free": true,
|
||||||
"id": "cloudvideo",
|
"id": "cloudvideo",
|
||||||
"name": "CloudVideo",
|
"name": "cloudvideo",
|
||||||
"settings": [
|
"settings": [
|
||||||
{
|
{
|
||||||
"default": false,
|
"default": false,
|
||||||
|
|||||||
@@ -36,48 +36,6 @@
|
|||||||
],
|
],
|
||||||
"type": "list",
|
"type": "list",
|
||||||
"visible": false
|
"visible": false
|
||||||
},
|
|
||||||
{
|
|
||||||
"default": false,
|
|
||||||
"enabled": true,
|
|
||||||
"id": "premium",
|
|
||||||
"label": "Activar cuenta premium",
|
|
||||||
"type": "bool",
|
|
||||||
"visible": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"default": "",
|
|
||||||
"enabled": "eq(-1,true)",
|
|
||||||
"id": "user",
|
|
||||||
"label": "@30014",
|
|
||||||
"type": "text",
|
|
||||||
"visible": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"default": "",
|
|
||||||
"enabled": "eq(-2,true)+!eq(-1,'')",
|
|
||||||
"hidden": true,
|
|
||||||
"id": "password",
|
|
||||||
"label": "@30015",
|
|
||||||
"type": "text",
|
|
||||||
"visible": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"default": 0,
|
|
||||||
"enabled": "eq(-3,true)",
|
|
||||||
"id": "sub",
|
|
||||||
"label": "Idioma de subtítulos preferido",
|
|
||||||
"lvalues": [
|
|
||||||
"Español España",
|
|
||||||
"Español Latino",
|
|
||||||
"Inglés",
|
|
||||||
"Italiano",
|
|
||||||
"Francés",
|
|
||||||
"Portugués",
|
|
||||||
"Alemán"
|
|
||||||
],
|
|
||||||
"type": "list",
|
|
||||||
"visible": true
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"thumbnail": "http://i.imgur.com/SglkLAb.png?1"
|
"thumbnail": "http://i.imgur.com/SglkLAb.png?1"
|
||||||
|
|||||||
Regular → Executable
+39
-18
@@ -1,5 +1,17 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from builtins import range
|
||||||
|
import sys
|
||||||
|
PY3 = False
|
||||||
|
if sys.version_info[0] >= 3: PY3 = True; unicode = str; unichr = chr; long = int
|
||||||
|
|
||||||
|
if PY3:
|
||||||
|
#from future import standard_library
|
||||||
|
#standard_library.install_aliases()
|
||||||
|
import urllib.parse as urllib # Es muy lento en PY2. En PY3 es nativo
|
||||||
|
else:
|
||||||
|
import urllib # Usamos el nativo de PY2 que es más rápido
|
||||||
|
|
||||||
import base64
|
import base64
|
||||||
import struct
|
import struct
|
||||||
import zlib
|
import zlib
|
||||||
@@ -11,15 +23,14 @@ from core import scrapertools
|
|||||||
from platformcode import config, logger
|
from platformcode import config, logger
|
||||||
|
|
||||||
GLOBAL_HEADER = {'User-Agent': 'Mozilla/5.0', 'Accept-Language': '*'}
|
GLOBAL_HEADER = {'User-Agent': 'Mozilla/5.0', 'Accept-Language': '*'}
|
||||||
proxy = "http://anonymouse.org/cgi-bin/anon-www.cgi/"
|
proxy_i = "https://www.usa-proxy.org/index.php"
|
||||||
|
proxy = "https://www.usa-proxy.org/"
|
||||||
|
|
||||||
|
|
||||||
def test_video_exists(page_url):
|
def test_video_exists(page_url):
|
||||||
logger.info("(page_url='%s')" % page_url)
|
logger.info("(page_url='%s')" % page_url)
|
||||||
premium = config.get_setting("premium", server="crunchyroll")
|
|
||||||
if premium:
|
data = httptools.downloadpage(page_url, headers=GLOBAL_HEADER).data
|
||||||
return login(page_url)
|
|
||||||
data = httptools.downloadpage(page_url, headers=GLOBAL_HEADER, replace_headers=True).data
|
|
||||||
if "Este es un clip de muestra" in data:
|
if "Este es un clip de muestra" in data:
|
||||||
disp = scrapertools.find_single_match(data, '<a href="/freetrial".*?</span>.*?<span>\s*(.*?)</span>')
|
disp = scrapertools.find_single_match(data, '<a href="/freetrial".*?</span>.*?<span>\s*(.*?)</span>')
|
||||||
disp = disp.strip()
|
disp = disp.strip()
|
||||||
@@ -30,6 +41,7 @@ def test_video_exists(page_url):
|
|||||||
|
|
||||||
|
|
||||||
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
||||||
|
#page_url='https://www.crunchyroll.com/es-es/one-piece/episode-891-climbing-up-a-waterfall-a-great-journey-through-the-land-of-wanos-sea-zone-786643'
|
||||||
logger.info("url=" + page_url)
|
logger.info("url=" + page_url)
|
||||||
video_urls = []
|
video_urls = []
|
||||||
if "crunchyroll.com" in page_url:
|
if "crunchyroll.com" in page_url:
|
||||||
@@ -39,10 +51,13 @@ def get_video_url(page_url, premium=False, user="", password="", video_password=
|
|||||||
url = "https://www.crunchyroll.com/xml/?req=RpcApiVideoPlayer_GetStandardConfig&media_id=%s" \
|
url = "https://www.crunchyroll.com/xml/?req=RpcApiVideoPlayer_GetStandardConfig&media_id=%s" \
|
||||||
"&video_format=0&video_quality=0&auto_play=0&aff=af-12299-plwa" % media_id
|
"&video_format=0&video_quality=0&auto_play=0&aff=af-12299-plwa" % media_id
|
||||||
post = "current_page=%s" % page_url
|
post = "current_page=%s" % page_url
|
||||||
data = httptools.downloadpage(url, post, headers=GLOBAL_HEADER, replace_headers=True).data
|
data = httptools.downloadpage(url, post=post, headers=GLOBAL_HEADER).data
|
||||||
|
|
||||||
if "<msg>Media not available</msg>" in data or "flash_block.png" in data:
|
if "<msg>Media not available</msg>" in data or "flash_block.png" in data:
|
||||||
data = httptools.downloadpage(proxy + url, post, headers=GLOBAL_HEADER, replace_headers=True,
|
httptools.downloadpage(proxy_i)
|
||||||
cookies=False).data
|
url = urllib.quote(url)
|
||||||
|
get = '%sbrowse.php?u=%s&b=4' % (proxy, url)
|
||||||
|
data = httptools.downloadpage(get, post=post, headers=GLOBAL_HEADER).data
|
||||||
media_url = scrapertools.find_single_match(data, '<file>(.*?)</file>').replace("&", "&")
|
media_url = scrapertools.find_single_match(data, '<file>(.*?)</file>').replace("&", "&")
|
||||||
if not media_url:
|
if not media_url:
|
||||||
return video_urls
|
return video_urls
|
||||||
@@ -54,18 +69,19 @@ def get_video_url(page_url, premium=False, user="", password="", video_password=
|
|||||||
filename = scrapertools.get_filename_from_url(media_url)[-4:]
|
filename = scrapertools.get_filename_from_url(media_url)[-4:]
|
||||||
quality = scrapertools.find_single_match(data, '<height>(.*?)</height>')
|
quality = scrapertools.find_single_match(data, '<height>(.*?)</height>')
|
||||||
try:
|
try:
|
||||||
idiomas = ['Español \(España\)', 'Español\]', 'English', 'Italiano', 'Français', 'Português', 'Deutsch']
|
#idiomas = ['Español \(España\)', 'Español\]', 'English', 'Italiano', 'Français', 'Português', 'Deutsch']
|
||||||
index_sub = int(config.get_setting("sub", server="crunchyroll"))
|
idiomas = ['Deutsch', 'Português', 'Français', 'Italiano', 'English', 'Español\]', 'Español \(España\)']
|
||||||
|
index_sub = int(config.get_setting("crunchyrollsub", "crunchyroll"))
|
||||||
idioma_sub = idiomas[index_sub]
|
idioma_sub = idiomas[index_sub]
|
||||||
|
|
||||||
link_sub = scrapertools.find_single_match(data, "link='([^']+)' title='\[%s" % idioma_sub)
|
link_sub = scrapertools.find_single_match(data, "link='([^']+)' title='\[%s" % idioma_sub)
|
||||||
if not link_sub and index_sub == 0:
|
if not link_sub and index_sub == 6:
|
||||||
link_sub = scrapertools.find_single_match(data, "link='([^']+)' title='\[Español\]")
|
link_sub = scrapertools.find_single_match(data, "link='([^']+)' title='\[Español\]")
|
||||||
elif not link_sub and index_sub == 1:
|
elif not link_sub and index_sub == 5:
|
||||||
link_sub = scrapertools.find_single_match(data, "link='([^']+)' title='\[Español \(España\)")
|
link_sub = scrapertools.find_single_match(data, "link='([^']+)' title='\[Español \(España\)")
|
||||||
if not link_sub:
|
if not link_sub:
|
||||||
link_sub = scrapertools.find_single_match(data, "link='([^']+)' title='\[English")
|
link_sub = scrapertools.find_single_match(data, "link='([^']+)' title='\[English")
|
||||||
data_sub = httptools.downloadpage(link_sub.replace("&", "&"), headers=GLOBAL_HEADER,
|
data_sub = httptools.downloadpage(link_sub.replace("&", "&"), headers=GLOBAL_HEADER).data
|
||||||
replace_headers=True).data
|
|
||||||
id_sub = scrapertools.find_single_match(data_sub, "subtitle id='([^']+)'")
|
id_sub = scrapertools.find_single_match(data_sub, "subtitle id='([^']+)'")
|
||||||
iv = scrapertools.find_single_match(data_sub, '<iv>(.*?)</iv>')
|
iv = scrapertools.find_single_match(data_sub, '<iv>(.*?)</iv>')
|
||||||
data_sub = scrapertools.find_single_match(data_sub, '<data>(.*?)</data>')
|
data_sub = scrapertools.find_single_match(data_sub, '<data>(.*?)</data>')
|
||||||
@@ -84,13 +100,13 @@ def login(page_url):
|
|||||||
login_page = "https://www.crunchyroll.com/login"
|
login_page = "https://www.crunchyroll.com/login"
|
||||||
user = config.get_setting("user", server="crunchyroll")
|
user = config.get_setting("user", server="crunchyroll")
|
||||||
password = config.get_setting("password", server="crunchyroll")
|
password = config.get_setting("password", server="crunchyroll")
|
||||||
data = httptools.downloadpage(login_page, headers=GLOBAL_HEADER, replace_headers=True).data
|
data = httptools.downloadpage(login_page, headers=GLOBAL_HEADER).data
|
||||||
if not "<title>Redirecting" in data:
|
if not "<title>Redirecting" in data:
|
||||||
token = scrapertools.find_single_match(data, 'name="login_form\[_token\]" value="([^"]+)"')
|
token = scrapertools.find_single_match(data, 'name="login_form\[_token\]" value="([^"]+)"')
|
||||||
redirect_url = scrapertools.find_single_match(data, 'name="login_form\[redirect_url\]" value="([^"]+)"')
|
redirect_url = scrapertools.find_single_match(data, 'name="login_form\[redirect_url\]" value="([^"]+)"')
|
||||||
post = "login_form%5Bname%5D=" + user + "&login_form%5Bpassword%5D=" + password + \
|
post = "login_form%5Bname%5D=" + user + "&login_form%5Bpassword%5D=" + password + \
|
||||||
"&login_form%5Bredirect_url%5D=" + redirect_url + "&login_form%5B_token%5D=" + token
|
"&login_form%5Bredirect_url%5D=" + redirect_url + "&login_form%5B_token%5D=" + token
|
||||||
data = httptools.downloadpage(login_page, post, headers=GLOBAL_HEADER, replace_headers=True).data
|
data = httptools.downloadpage(login_page, post=post, headers=GLOBAL_HEADER).data
|
||||||
if "<title>Redirecting" in data:
|
if "<title>Redirecting" in data:
|
||||||
return True, ""
|
return True, ""
|
||||||
else:
|
else:
|
||||||
@@ -108,14 +124,16 @@ def decrypt_subs(iv, data, id):
|
|||||||
data = base64.b64decode(data.encode('utf-8'))
|
data = base64.b64decode(data.encode('utf-8'))
|
||||||
iv = base64.b64decode(iv.encode('utf-8'))
|
iv = base64.b64decode(iv.encode('utf-8'))
|
||||||
id = int(id)
|
id = int(id)
|
||||||
|
|
||||||
def obfuscate_key_aux(count, modulo, start):
|
def obfuscate_key_aux(count, modulo, start):
|
||||||
output = list(start)
|
output = list(start)
|
||||||
for _ in range(count):
|
for _ in range(count):
|
||||||
output.append(output[-1] + output[-2])
|
output.append(output[-1] + output[-2])
|
||||||
# cut off start values
|
# cut off start values
|
||||||
output = output[2:]
|
output = output[2:]
|
||||||
output = list(map(lambda x: x % modulo + 33, output))
|
output = list([x % modulo + 33 for x in output])
|
||||||
return output
|
return output
|
||||||
|
|
||||||
def obfuscate_key(key):
|
def obfuscate_key(key):
|
||||||
from math import pow, sqrt, floor
|
from math import pow, sqrt, floor
|
||||||
num1 = int(floor(pow(2, 25) * sqrt(6.9)))
|
num1 = int(floor(pow(2, 25) * sqrt(6.9)))
|
||||||
@@ -130,6 +148,7 @@ def decrypt_subs(iv, data, id):
|
|||||||
decshaHash.append(ord(char))
|
decshaHash.append(ord(char))
|
||||||
# Extend 160 Bit hash to 256 Bit
|
# Extend 160 Bit hash to 256 Bit
|
||||||
return decshaHash + [0] * 12
|
return decshaHash + [0] * 12
|
||||||
|
|
||||||
key = obfuscate_key(id)
|
key = obfuscate_key(id)
|
||||||
key = struct.pack('B' * len(key), *key)
|
key = struct.pack('B' * len(key), *key)
|
||||||
decryptor = jscrypto.new(key, 2, iv)
|
decryptor = jscrypto.new(key, 2, iv)
|
||||||
@@ -202,5 +221,7 @@ Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
|
|||||||
output += ',' + event.attrib['effect']
|
output += ',' + event.attrib['effect']
|
||||||
output += ',' + event.attrib['text']
|
output += ',' + event.attrib['text']
|
||||||
output += '\n'
|
output += '\n'
|
||||||
|
output = output.encode('utf-8')
|
||||||
|
if PY3: output = output.decode("utf-8")
|
||||||
|
|
||||||
return output.encode('utf-8')
|
return output
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ from platformcode import logger
|
|||||||
def test_video_exists(page_url):
|
def test_video_exists(page_url):
|
||||||
logger.info("(page_url='%s')" % page_url)
|
logger.info("(page_url='%s')" % page_url)
|
||||||
response = httptools.downloadpage(page_url)
|
response = httptools.downloadpage(page_url)
|
||||||
|
if "Contenido rechazado" in response.data:
|
||||||
|
return False, "[Dailymotion] El archivo no existe o ha sido borrado"
|
||||||
if response.code == 404:
|
if response.code == 404:
|
||||||
return False, config.get_localized_string(70449) % "dailymotion"
|
return False, config.get_localized_string(70449) % "dailymotion"
|
||||||
return True, ""
|
return True, ""
|
||||||
|
|||||||
Regular → Executable
+17
-25
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
from core import httptools
|
from core import httptools
|
||||||
from core import scrapertools
|
from core import scrapertools
|
||||||
|
from lib import jsunpack
|
||||||
from platformcode import logger
|
from platformcode import logger
|
||||||
|
|
||||||
|
|
||||||
@@ -10,7 +11,7 @@ def test_video_exists(page_url):
|
|||||||
|
|
||||||
data = httptools.downloadpage(page_url).data
|
data = httptools.downloadpage(page_url).data
|
||||||
|
|
||||||
if 'File Not Found' in data or '404 Not Found' in data:
|
if 'Not Found' in data or 'File is no longer available' in data:
|
||||||
return False, "[Datoporn] El archivo no existe o ha sido borrado"
|
return False, "[Datoporn] El archivo no existe o ha sido borrado"
|
||||||
|
|
||||||
return True, ""
|
return True, ""
|
||||||
@@ -18,38 +19,29 @@ def test_video_exists(page_url):
|
|||||||
|
|
||||||
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
||||||
logger.info("url=" + page_url)
|
logger.info("url=" + page_url)
|
||||||
|
video_urls = []
|
||||||
data = httptools.downloadpage(page_url).data
|
data = httptools.downloadpage(page_url).data
|
||||||
media_urls = scrapertools.find_multiple_matches(data, 'src: "([^"]+)",.*?label: "([^"]+)"')
|
media_urls = scrapertools.find_multiple_matches(data, 'src: "([^"]+)",.*?label: "([^"]+)"')
|
||||||
#media_urls = scrapertools.find_multiple_matches(data, 'file\:"([^"]+\.mp4)",label:"([^"]+)"')
|
if not media_urls:
|
||||||
# if not media_urls:
|
match = scrapertools.find_single_match(data, "<script type='text/javascript'>(eval.function.p,a,c,k,e,d..*?)</script>")
|
||||||
# match = scrapertools.find_single_match(data, "p,a,c,k(.*?)</script>")
|
|
||||||
# try:
|
|
||||||
# data = jsunpack.unpack(match)
|
|
||||||
# except:
|
|
||||||
# pass
|
|
||||||
# media_urls = scrapertools.find_multiple_matches(data, 'file\:"([^"]+\.mp4)",label:"([^"]+)"')
|
|
||||||
|
|
||||||
# Extrae la URL
|
|
||||||
calidades = []
|
|
||||||
video_urls = []
|
|
||||||
for media_url in sorted(media_urls, key=lambda x: int(x[1][-3:])):
|
|
||||||
calidades.append(int(media_url[1][-3:]))
|
|
||||||
try:
|
try:
|
||||||
title = ".%s %sp [datoporn]" % (media_url[0].rsplit('.', 1)[1], media_url[1][-3:])
|
data = jsunpack.unpack(match)
|
||||||
except:
|
except:
|
||||||
title = ".%s %sp [datoporn]" % (media_url[-4:], media_url[1][-3:])
|
pass
|
||||||
video_urls.append([title, media_url[0]])
|
media_urls = scrapertools.find_multiple_matches(data, 'file\:"([^"]+\.mp4)",label:"([^"]+)"')
|
||||||
|
# Extrae la URL
|
||||||
sorted(calidades)
|
for media_url, res in media_urls:
|
||||||
m3u8 = scrapertools.find_single_match(data, 'file\:"([^"]+\.m3u8)"')
|
try:
|
||||||
|
title = ".%s %s [datoporn]" % (media_url.rsplit('.', 1)[1], res)
|
||||||
|
except:
|
||||||
|
title = ".%s %s [datoporn]" % (media_url[-4:], res)
|
||||||
|
video_urls.append([title, media_url])
|
||||||
|
m3u8 = scrapertools.find_single_match(data, 'src\:"([^"]+\.m3u8)"')
|
||||||
if not m3u8:
|
if not m3u8:
|
||||||
m3u8 = str(scrapertools.find_multiple_matches(data, 'player.updateSrc\({src:.?"([^"]+\.m3u8)"')).replace("['", "").replace("']", "")
|
m3u8 = str(scrapertools.find_multiple_matches(data, 'player.updateSrc\({src:.?"([^"]+\.m3u8)"')).replace("['", "").replace("']", "")
|
||||||
calidades = ['720p']
|
calidades = ['720p']
|
||||||
if m3u8:
|
if m3u8:
|
||||||
video_urls.insert(0, [".m3u8 %s [datoporn]" % calidades[-1], m3u8])
|
video_urls.insert(0, [".m3u8 720p [datoporn]" , m3u8])
|
||||||
|
|
||||||
for video_url in video_urls:
|
for video_url in video_urls:
|
||||||
logger.info("%s - %s" % (video_url[0], video_url[1]))
|
logger.info("%s - %s" % (video_url[0], video_url[1]))
|
||||||
|
|
||||||
return video_urls
|
return video_urls
|
||||||
|
|||||||
Regular → Executable
+8
@@ -11,6 +11,14 @@
|
|||||||
"label": "@70272",
|
"label": "@70272",
|
||||||
"type": "bool",
|
"type": "bool",
|
||||||
"visible": true
|
"visible": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "",
|
||||||
|
"enabled": "eq(-1,true)",
|
||||||
|
"id": "token",
|
||||||
|
"label": "Token (autentificación alternativa)",
|
||||||
|
"type": "text",
|
||||||
|
"visible": true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
Regular → Executable
+35
-19
@@ -1,20 +1,30 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import sys
|
||||||
|
PY3 = False
|
||||||
|
if sys.version_info[0] >= 3: PY3 = True; unicode = str; unichr = chr; long = int
|
||||||
|
|
||||||
|
if PY3:
|
||||||
|
#from future import standard_library
|
||||||
|
#standard_library.install_aliases()
|
||||||
|
import urllib.parse as urllib # Es muy lento en PY2. En PY3 es nativo
|
||||||
|
else:
|
||||||
|
import urllib # Usamos el nativo de PY2 que es más rápido
|
||||||
|
|
||||||
import time
|
import time
|
||||||
import urllib
|
|
||||||
|
|
||||||
from core import httptools
|
from core import httptools
|
||||||
from core import jsontools
|
from core import scrapertools
|
||||||
from platformcode import config, logger
|
from platformcode import config, logger
|
||||||
from platformcode import platformtools
|
from platformcode import platformtools
|
||||||
|
|
||||||
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0'}
|
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:65.0) Gecko/20100101 Firefox/65.0'}
|
||||||
|
|
||||||
|
|
||||||
# Returns an array of possible video url's from the page_url
|
# Returns an array of possible video url's from the page_url
|
||||||
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
||||||
logger.info("(page_url='%s' , video_password=%s)" % (page_url, video_password))
|
logger.info("(page_url='%s' , video_password=%s)" % (page_url, video_password))
|
||||||
|
page_url = page_url.replace(".nz/embed", ".nz/")
|
||||||
# Se comprueba si existe un token guardado y sino se ejecuta el proceso de autentificación
|
# Se comprueba si existe un token guardado y sino se ejecuta el proceso de autentificación
|
||||||
token_auth = config.get_setting("token", server="realdebrid")
|
token_auth = config.get_setting("token", server="realdebrid")
|
||||||
if token_auth is None or token_auth == "":
|
if token_auth is None or token_auth == "":
|
||||||
@@ -28,11 +38,19 @@ def get_video_url(page_url, premium=False, user="", password="", video_password=
|
|||||||
post_link = urllib.urlencode([("link", page_url), ("password", video_password)])
|
post_link = urllib.urlencode([("link", page_url), ("password", video_password)])
|
||||||
headers["Authorization"] = "Bearer %s" % token_auth
|
headers["Authorization"] = "Bearer %s" % token_auth
|
||||||
url = "https://api.real-debrid.com/rest/1.0/unrestrict/link"
|
url = "https://api.real-debrid.com/rest/1.0/unrestrict/link"
|
||||||
data = httptools.downloadpage(url, post=post_link, headers=headers.items()).data
|
data = httptools.downloadpage(url, post=post_link, headers=list(headers.items())).json
|
||||||
data = jsontools.load(data)
|
logger.error(data)
|
||||||
|
|
||||||
|
check = config.get_setting("secret", server="realdebrid")
|
||||||
|
#Se ha usado la autentificación por urlresolver (Bad Idea)
|
||||||
|
if "error" in data and data["error"] == "bad_token" and not check:
|
||||||
|
token_auth = authentication()
|
||||||
|
headers["Authorization"] = "Bearer %s" % token_auth
|
||||||
|
data = httptools.downloadpage(url, post=post_link, headers=list(headers.items())).json
|
||||||
|
|
||||||
# Si el token es erróneo o ha caducado, se solicita uno nuevo
|
# Si el token es erróneo o ha caducado, se solicita uno nuevo
|
||||||
if "error" in data and data["error"] == "bad_token":
|
elif "error" in data and data["error"] == "bad_token":
|
||||||
|
|
||||||
debrid_id = config.get_setting("id", server="realdebrid")
|
debrid_id = config.get_setting("id", server="realdebrid")
|
||||||
secret = config.get_setting("secret", server="realdebrid")
|
secret = config.get_setting("secret", server="realdebrid")
|
||||||
refresh = config.get_setting("refresh", server="realdebrid")
|
refresh = config.get_setting("refresh", server="realdebrid")
|
||||||
@@ -40,15 +58,16 @@ def get_video_url(page_url, premium=False, user="", password="", video_password=
|
|||||||
post_token = urllib.urlencode({"client_id": debrid_id, "client_secret": secret, "code": refresh,
|
post_token = urllib.urlencode({"client_id": debrid_id, "client_secret": secret, "code": refresh,
|
||||||
"grant_type": "http://oauth.net/grant_type/device/1.0"})
|
"grant_type": "http://oauth.net/grant_type/device/1.0"})
|
||||||
renew_token = httptools.downloadpage("https://api.real-debrid.com/oauth/v2/token", post=post_token,
|
renew_token = httptools.downloadpage("https://api.real-debrid.com/oauth/v2/token", post=post_token,
|
||||||
headers=headers.items()).data
|
headers=list(headers.items())).json
|
||||||
renew_token = jsontools.load(renew_token)
|
|
||||||
if not "error" in renew_token:
|
if not "error" in renew_token:
|
||||||
token_auth = renew_token["access_token"]
|
token_auth = renew_token["access_token"]
|
||||||
config.set_setting("token", token_auth, server="realdebrid")
|
config.set_setting("token", token_auth, server="realdebrid")
|
||||||
headers["Authorization"] = "Bearer %s" % token_auth
|
headers["Authorization"] = "Bearer %s" % token_auth
|
||||||
data = httptools.downloadpage(url, post=post_link, headers=headers.items()).data
|
data = httptools.downloadpage(url, post=post_link, headers=list(headers.items())).json
|
||||||
data = jsontools.load(data)
|
else:
|
||||||
|
token_auth = authentication()
|
||||||
|
headers["Authorization"] = "Bearer %s" % token_auth
|
||||||
|
data = httptools.downloadpage(url, post=post_link, headers=list(headers.items())).json
|
||||||
if "download" in data:
|
if "download" in data:
|
||||||
return get_enlaces(data)
|
return get_enlaces(data)
|
||||||
else:
|
else:
|
||||||
@@ -87,8 +106,7 @@ def authentication():
|
|||||||
|
|
||||||
# Se solicita url y código de verificación para conceder permiso a la app
|
# Se solicita url y código de verificación para conceder permiso a la app
|
||||||
url = "http://api.real-debrid.com/oauth/v2/device/code?client_id=%s&new_credentials=yes" % (client_id)
|
url = "http://api.real-debrid.com/oauth/v2/device/code?client_id=%s&new_credentials=yes" % (client_id)
|
||||||
data = httptools.downloadpage(url, headers=headers.items()).data
|
data = httptools.downloadpage(url, headers=list(headers.items())).json
|
||||||
data = jsontools.load(data)
|
|
||||||
verify_url = data["verification_url"]
|
verify_url = data["verification_url"]
|
||||||
user_code = data["user_code"]
|
user_code = data["user_code"]
|
||||||
device_code = data["device_code"]
|
device_code = data["device_code"]
|
||||||
@@ -108,8 +126,7 @@ def authentication():
|
|||||||
|
|
||||||
url = "https://api.real-debrid.com/oauth/v2/device/credentials?client_id=%s&code=%s" \
|
url = "https://api.real-debrid.com/oauth/v2/device/credentials?client_id=%s&code=%s" \
|
||||||
% (client_id, device_code)
|
% (client_id, device_code)
|
||||||
data = httptools.downloadpage(url, headers=headers.items()).data
|
data = httptools.downloadpage(url, headers=list(headers.items())).json
|
||||||
data = jsontools.load(data)
|
|
||||||
if "client_secret" in data:
|
if "client_secret" in data:
|
||||||
# Código introducido, salimos del bucle
|
# Código introducido, salimos del bucle
|
||||||
break
|
break
|
||||||
@@ -127,9 +144,8 @@ def authentication():
|
|||||||
# Se solicita el token de acceso y el de actualización para cuando el primero caduque
|
# Se solicita el token de acceso y el de actualización para cuando el primero caduque
|
||||||
post = urllib.urlencode({"client_id": debrid_id, "client_secret": secret, "code": device_code,
|
post = urllib.urlencode({"client_id": debrid_id, "client_secret": secret, "code": device_code,
|
||||||
"grant_type": "http://oauth.net/grant_type/device/1.0"})
|
"grant_type": "http://oauth.net/grant_type/device/1.0"})
|
||||||
data = htttools.downloadpage("https://api.real-debrid.com/oauth/v2/token", post=post,
|
data = httptools.downloadpage("https://api.real-debrid.com/oauth/v2/token", post=post,
|
||||||
headers=headers.items()).data
|
headers=list(headers.items())).json
|
||||||
data = jsontools.load(data)
|
|
||||||
|
|
||||||
token = data["access_token"]
|
token = data["access_token"]
|
||||||
refresh = data["refresh_token"]
|
refresh = data["refresh_token"]
|
||||||
|
|||||||
Regular → Executable
+1
-1
@@ -13,7 +13,7 @@ def get_long_url(short_url):
|
|||||||
data = httptools.downloadpage(short_url).data
|
data = httptools.downloadpage(short_url).data
|
||||||
ysmm = scrapertools.find_single_match(data, "var ysmm = '([^']+)';")
|
ysmm = scrapertools.find_single_match(data, "var ysmm = '([^']+)';")
|
||||||
b64 = ""
|
b64 = ""
|
||||||
for i in reversed(range(len(ysmm))):
|
for i in reversed(list(range(len(ysmm)))):
|
||||||
if i % 2:
|
if i % 2:
|
||||||
b64 = b64 + ysmm[i]
|
b64 = b64 + ysmm[i]
|
||||||
else:
|
else:
|
||||||
|
|||||||
Regular → Executable
+10
-1
@@ -1,6 +1,15 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import urllib
|
import sys
|
||||||
|
PY3 = False
|
||||||
|
if sys.version_info[0] >= 3: PY3 = True; unicode = str; unichr = chr; long = int
|
||||||
|
|
||||||
|
if PY3:
|
||||||
|
#from future import standard_library
|
||||||
|
#standard_library.install_aliases()
|
||||||
|
import urllib.parse as urllib # Es muy lento en PY2. En PY3 es nativo
|
||||||
|
else:
|
||||||
|
import urllib # Usamos el nativo de PY2 que es más rápido
|
||||||
|
|
||||||
from core import scrapertools
|
from core import scrapertools
|
||||||
from platformcode import logger
|
from platformcode import logger
|
||||||
|
|||||||
Regular → Executable
+12
-2
@@ -1,7 +1,17 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import sys
|
||||||
|
PY3 = False
|
||||||
|
if sys.version_info[0] >= 3: PY3 = True; unicode = str; unichr = chr; long = int
|
||||||
|
|
||||||
|
if PY3:
|
||||||
|
#from future import standard_library
|
||||||
|
#standard_library.install_aliases()
|
||||||
|
import urllib.parse as urllib # Es muy lento en PY2. En PY3 es nativo
|
||||||
|
else:
|
||||||
|
import urllib # Usamos el nativo de PY2 que es más rápido
|
||||||
|
|
||||||
import re
|
import re
|
||||||
import urllib
|
|
||||||
|
|
||||||
from core import httptools
|
from core import httptools
|
||||||
from core import scrapertools
|
from core import scrapertools
|
||||||
@@ -41,5 +51,5 @@ def get_long_urls(data):
|
|||||||
long_url = scrapertools.scrapertools.find_single_match(longurl_data, '<long-url><!\[CDATA\[(.*?)\]\]></long-url>')
|
long_url = scrapertools.scrapertools.find_single_match(longurl_data, '<long-url><!\[CDATA\[(.*?)\]\]></long-url>')
|
||||||
except:
|
except:
|
||||||
long_url = ""
|
long_url = ""
|
||||||
if (long_url <> ""): data = data.replace(short_url, long_url)
|
if (long_url != ""): data = data.replace(short_url, long_url)
|
||||||
return data
|
return data
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ from platformcode import logger, config
|
|||||||
# Returns an array of possible video url's from the page_url
|
# Returns an array of possible video url's from the page_url
|
||||||
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
||||||
logger.info("(page_url='%s')" % page_url)
|
logger.info("(page_url='%s')" % page_url)
|
||||||
logger.info('PAGE URL= ' + page_url)
|
|
||||||
|
|
||||||
video_urls = [["%s %s" % (page_url[-4:], config.get_localized_string(30137)), page_url]]
|
video_urls = [["%s %s" % (page_url[-4:], config.get_localized_string(30137)), page_url]]
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"find_videos": {
|
||||||
|
"ignore_urls": [],
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"pattern": "http://www.drtuber.com/embed/([0-9]+)",
|
||||||
|
"url": "\\1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"free": true,
|
||||||
|
"id": "drtuber",
|
||||||
|
"name": "drtuber",
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"default": false,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "black_list",
|
||||||
|
"label": "@60654",
|
||||||
|
"type": "bool",
|
||||||
|
"visible": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "favorites_servers_list",
|
||||||
|
"label": "@60655",
|
||||||
|
"lvalues": [
|
||||||
|
"No",
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5"
|
||||||
|
],
|
||||||
|
"type": "list",
|
||||||
|
"visible": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thumbnail": ""
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import re
|
||||||
|
from core import httptools
|
||||||
|
from core import scrapertools
|
||||||
|
from platformcode import logger
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def get_video_url(page_url, video_password):
|
||||||
|
logger.info("(page_url='%s')" % page_url)
|
||||||
|
video_urls = []
|
||||||
|
url = "https://www.drtuber.com/player_config_json/?vid=%s&aid=0&domain_id=0&embed=0&ref=null&check_speed=0" %page_url
|
||||||
|
data = httptools.downloadpage(url).data
|
||||||
|
data = scrapertools.find_single_match(data, '"files":(.*?)"quality"')
|
||||||
|
patron = '"([lh])q":"([^"]+)"'
|
||||||
|
matches = scrapertools.find_multiple_matches(data, patron)
|
||||||
|
for quality, scrapedurl in matches:
|
||||||
|
url = scrapedurl.replace("\/", "/")
|
||||||
|
if "l" in quality: quality = "360"
|
||||||
|
if "h" in quality: quality = "720"
|
||||||
|
video_urls.append(["[drtuber] %s" %quality, url])
|
||||||
|
return video_urls
|
||||||
|
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"find_videos": {
|
||||||
|
"ignore_urls": [],
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"pattern": "(https://www.eporner.com/hd-porn/[A-z0-9-]+/[A-z0-9-]+)",
|
||||||
|
"url": "\\1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"free": true,
|
||||||
|
"id": "eporner",
|
||||||
|
"name": "eporner",
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"default": false,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "black_list",
|
||||||
|
"label": "@60654",
|
||||||
|
"type": "bool",
|
||||||
|
"visible": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "favorites_servers_list",
|
||||||
|
"label": "@60655",
|
||||||
|
"lvalues": [
|
||||||
|
"No",
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5"
|
||||||
|
],
|
||||||
|
"type": "list",
|
||||||
|
"visible": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thumbnail": ""
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import re
|
||||||
|
from core import httptools
|
||||||
|
from core import scrapertools
|
||||||
|
from platformcode import logger
|
||||||
|
|
||||||
|
|
||||||
|
def test_video_exists(page_url):
|
||||||
|
logger.info("(page_url='%s')" % page_url)
|
||||||
|
global data
|
||||||
|
data = httptools.downloadpage(page_url).data
|
||||||
|
if "<h2>WE ARE SORRY</h2>" in data or '<title>404 Not Found</title>' in data:
|
||||||
|
return False, "[eporner] El fichero no existe o ha sido borrado"
|
||||||
|
return True, ""
|
||||||
|
|
||||||
|
|
||||||
|
def get_video_url(page_url, video_password):
|
||||||
|
logger.info("(page_url='%s')" % page_url)
|
||||||
|
video_urls = []
|
||||||
|
data = httptools.downloadpage(page_url).data
|
||||||
|
data = re.sub(r"\n|\r|\t| |<br>|<br/>", "", data)
|
||||||
|
patron = "EP: {vid: '([^']+)',hash: '([^']+)'"
|
||||||
|
vid, hash = re.compile(patron, re.DOTALL).findall(data)[0]
|
||||||
|
hash = int_to_base36(int(hash[0:8], 16)) + int_to_base36(int(hash[8:16], 16)) + int_to_base36(
|
||||||
|
int(hash[16:24], 16)) + int_to_base36(int(hash[24:32], 16))
|
||||||
|
url = "https://www.eporner.com/xhr/video/%s?hash=%s" % (vid, hash)
|
||||||
|
jsondata = httptools.downloadpage(url).json
|
||||||
|
for source in jsondata["sources"]["mp4"]:
|
||||||
|
url = jsondata["sources"]["mp4"][source]["src"]
|
||||||
|
title = source.split(" ")[0]
|
||||||
|
video_urls.append(["[eporner] %s"% title, url])
|
||||||
|
return video_urls
|
||||||
|
# return sorted(video_urls, key=lambda i: int(i[0].split("p")[1]))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def int_to_base36(num):
|
||||||
|
"""Converts a positive integer into a base36 string."""
|
||||||
|
assert num >= 0
|
||||||
|
digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'.lower()
|
||||||
|
|
||||||
|
res = ''
|
||||||
|
while not res or num > 0:
|
||||||
|
num, i = divmod(num, 36)
|
||||||
|
res = digits[i] + res
|
||||||
|
return res
|
||||||
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"active": true,
|
"active": false,
|
||||||
"find_videos": {
|
"find_videos": {
|
||||||
"ignore_urls": [],
|
"ignore_urls": [],
|
||||||
"patterns": [
|
"patterns": [
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
# --------------------------------------------------------
|
# --------------------------------------------------------
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from core import httptools
|
from core import httptools
|
||||||
from platformcode import logger
|
from platformcode import logger
|
||||||
|
|
||||||
|
|||||||
Regular → Executable
+11
-1
@@ -1,7 +1,17 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import sys
|
||||||
|
PY3 = False
|
||||||
|
if sys.version_info[0] >= 3: PY3 = True; unicode = str; unichr = chr; long = int
|
||||||
|
|
||||||
|
if PY3:
|
||||||
|
#from future import standard_library
|
||||||
|
#standard_library.install_aliases()
|
||||||
|
import urllib.parse as urllib # Es muy lento en PY2. En PY3 es nativo
|
||||||
|
else:
|
||||||
|
import urllib # Usamos el nativo de PY2 que es más rápido
|
||||||
|
|
||||||
import re
|
import re
|
||||||
import urllib
|
|
||||||
|
|
||||||
from core import httptools
|
from core import httptools
|
||||||
from core import scrapertools
|
from core import scrapertools
|
||||||
|
|||||||
Regular → Executable
+1
-1
@@ -5,7 +5,7 @@
|
|||||||
"patterns": [
|
"patterns": [
|
||||||
{
|
{
|
||||||
"pattern": "fastplay.(?:to|cc|sx)/(?:flash-|embed-|)([A-z0-9]+)",
|
"pattern": "fastplay.(?:to|cc|sx)/(?:flash-|embed-|)([A-z0-9]+)",
|
||||||
"url": "http://fastplay.cc/embed-\\1.html"
|
"url": "http://fastplay.to/embed-\\1.html"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
+7
-2
@@ -7,8 +7,13 @@ from platformcode import logger, config
|
|||||||
def test_video_exists(page_url):
|
def test_video_exists(page_url):
|
||||||
logger.info("(page_url='%s')" % page_url)
|
logger.info("(page_url='%s')" % page_url)
|
||||||
data = httptools.downloadpage(page_url).data
|
data = httptools.downloadpage(page_url).data
|
||||||
if "Sorry 404 not found" in data:
|
if "Sorry 404 not found" in data or "This video is unavailable" in data or "Sorry this video is unavailable:" in data:
|
||||||
return False, config.get_localized_string(70292) % "Fembed"
|
return False, "[fembed] El fichero ha sido borrado"
|
||||||
|
page_url = page_url.replace("/f/","/v/")
|
||||||
|
page_url = page_url.replace("/v/","/api/source/")
|
||||||
|
data = httptools.downloadpage(page_url, post={}).data
|
||||||
|
if "Video not found or" in data:
|
||||||
|
return False, "[fembed] El fichero ha sido borrado"
|
||||||
return True, ""
|
return True, ""
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
# -*- By the Alfa Develop Group -*-
|
# -*- By the Alfa Develop Group -*-
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from core import httptools
|
from core import httptools
|
||||||
from core import scrapertools
|
from core import scrapertools
|
||||||
from platformcode import logger
|
from platformcode import logger
|
||||||
|
|||||||
@@ -16,6 +16,9 @@
|
|||||||
"free": true,
|
"free": true,
|
||||||
"id": "flashx",
|
"id": "flashx",
|
||||||
"name": "flashx",
|
"name": "flashx",
|
||||||
|
"premium": [
|
||||||
|
"realdebrid"
|
||||||
|
],
|
||||||
"settings": [
|
"settings": [
|
||||||
{
|
{
|
||||||
"default": false,
|
"default": false,
|
||||||
|
|||||||
+53
-25
@@ -1,30 +1,61 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import sys
|
||||||
|
PY3 = False
|
||||||
|
if sys.version_info[0] >= 3: PY3 = True; unicode = str; unichr = chr; long = int
|
||||||
|
|
||||||
|
if PY3:
|
||||||
|
#from future import standard_library
|
||||||
|
#standard_library.install_aliases()
|
||||||
|
import urllib.parse as urllib # Es muy lento en PY2. En PY3 es nativo
|
||||||
|
else:
|
||||||
|
import urllib # Usamos el nativo de PY2 que es más rápido
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
import urllib
|
|
||||||
|
|
||||||
from core import httptools, scrapertools
|
from core import httptools, scrapertools
|
||||||
from lib import jsunpack
|
from lib import jsunpack
|
||||||
from platformcode import config, logger
|
from platformcode import config, logger, platformtools
|
||||||
|
|
||||||
|
flashx_data = ""
|
||||||
|
flashx_hash_f = ""
|
||||||
|
flashx_post = ""
|
||||||
|
|
||||||
def test_video_exists(page_url):
|
def test_video_exists(page_url):
|
||||||
logger.info("(page_url='%s')" % page_url)
|
logger.info("(page_url='%s')" % page_url)
|
||||||
|
global flashx_data
|
||||||
data = httptools.downloadpage(page_url, cookies=False).data
|
try:
|
||||||
if 'file was deleted' in data or 'File Not Found (Deleted or Abused)' in data:
|
flashx_data = httptools.downloadpage(page_url, cookies="xfsts=pfp5dj3e6go1l2o1").data
|
||||||
|
except:
|
||||||
|
try:
|
||||||
|
flashx_data = httptools.downloadpage(page_url).data
|
||||||
|
except:
|
||||||
|
return False, config.get_localized_string(70296) % "FlashX"
|
||||||
|
bloque = scrapertools.find_single_match(flashx_data, '(?s)Form method="POST" action(.*?)span')
|
||||||
|
flashx_id = scrapertools.find_single_match(bloque, 'name="id" value="([^"]+)"')
|
||||||
|
fname = scrapertools.find_single_match(bloque, 'name="fname" value="([^"]+)"')
|
||||||
|
global flashx_hash_f
|
||||||
|
flashx_hash_f = scrapertools.find_single_match(bloque, 'name="hash" value="([^"]+)"')
|
||||||
|
imhuman = scrapertools.find_single_match(bloque, "value='([^']+)' name='imhuman'")
|
||||||
|
global flashx_post
|
||||||
|
flashx_post = 'op=download1&usr_login=&id=%s&fname=%s&referer=&hash=%s&imhuman=%s' % (
|
||||||
|
flashx_id, urllib.quote(fname), flashx_hash_f, imhuman)
|
||||||
|
if 'file was deleted' in flashx_data or 'File Not Found (Deleted or Abused)' in flashx_data:
|
||||||
return False, config.get_localized_string(70292) % "FlashX"
|
return False, config.get_localized_string(70292) % "FlashX"
|
||||||
elif 'Video is processing now' in data:
|
elif 'Video is processing now' in flashx_data:
|
||||||
return False, config.get_localized_string(70293) % "FlashX"
|
return False, config.get_localized_string(70293) % "FlashX"
|
||||||
|
elif 'Too many views per minute' in flashx_data:
|
||||||
|
return False, config.get_localized_string(70300) % "FlashX"
|
||||||
|
|
||||||
return True, ""
|
return True, ""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
||||||
logger.info("url=" + page_url)
|
logger.info("url=" + page_url)
|
||||||
pfxfx = ""
|
pfxfx = ""
|
||||||
data = httptools.downloadpage(page_url, cookies=False).data
|
data = flashx_data
|
||||||
data = data.replace("\n", "")
|
data = data.replace("\n", "")
|
||||||
cgi_counter = scrapertools.find_single_match(data,
|
cgi_counter = scrapertools.find_single_match(data,
|
||||||
"""(?is)src=.(https://www.flashx.../counter.cgi.*?[^(?:'|")]+)""")
|
"""(?is)src=.(https://www.flashx.../counter.cgi.*?[^(?:'|")]+)""")
|
||||||
@@ -33,43 +64,40 @@ def get_video_url(page_url, premium=False, user="", password="", video_password=
|
|||||||
# Para obtener el f y el fxfx
|
# Para obtener el f y el fxfx
|
||||||
js_fxfx = "https://www." + scrapertools.find_single_match(data.replace("//", "/"),
|
js_fxfx = "https://www." + scrapertools.find_single_match(data.replace("//", "/"),
|
||||||
"""(?is)(flashx.../js\w+/c\w+.*?[^(?:'|")]+)""")
|
"""(?is)(flashx.../js\w+/c\w+.*?[^(?:'|")]+)""")
|
||||||
data_fxfx = httptools.downloadpage(js_fxfx).data
|
if len(js_fxfx) > 15:
|
||||||
mfxfx = scrapertools.find_single_match(data_fxfx, 'get.*?({.*?})').replace("'", "").replace(" ", "")
|
data_fxfx = httptools.downloadpage(js_fxfx).data
|
||||||
matches = scrapertools.find_multiple_matches(mfxfx, '(\w+):(\w+)')
|
mfxfx = scrapertools.find_single_match(data_fxfx, 'get.*?({.*?})').replace("'", "").replace(" ", "")
|
||||||
for f, v in matches:
|
matches = scrapertools.find_multiple_matches(mfxfx, '(\w+):(\w+)')
|
||||||
pfxfx += f + "=" + v + "&"
|
for f, v in matches:
|
||||||
|
pfxfx += f + "=" + v + "&"
|
||||||
logger.info("mfxfxfx1= %s" % js_fxfx)
|
logger.info("mfxfxfx1= %s" % js_fxfx)
|
||||||
logger.info("mfxfxfx2= %s" % pfxfx)
|
logger.info("mfxfxfx2= %s" % pfxfx)
|
||||||
if pfxfx == "":
|
if pfxfx == "":
|
||||||
pfxfx = "f=fail&fxfx=6"
|
pfxfx = "f=fail&fxfx=6"
|
||||||
coding_url = 'https://www.flashx.co/flashx.php?%s' % pfxfx
|
coding_url = 'https://www.flashx.co/flashx.php?%s' % pfxfx
|
||||||
# {f: 'y', fxfx: '6'}
|
|
||||||
bloque = scrapertools.find_single_match(data, '(?s)Form method="POST" action(.*?)span')
|
|
||||||
flashx_id = scrapertools.find_single_match(bloque, 'name="id" value="([^"]+)"')
|
|
||||||
fname = scrapertools.find_single_match(bloque, 'name="fname" value="([^"]+)"')
|
|
||||||
hash_f = scrapertools.find_single_match(bloque, 'name="hash" value="([^"]+)"')
|
|
||||||
imhuman = scrapertools.find_single_match(bloque, "value='([^']+)' name='imhuman'")
|
|
||||||
post = 'op=download1&usr_login=&id=%s&fname=%s&referer=&hash=%s&imhuman=%s' % (
|
|
||||||
flashx_id, urllib.quote(fname), hash_f, imhuman)
|
|
||||||
wait_time = scrapertools.find_single_match(data, "<span id='xxc2'>(\d+)")
|
|
||||||
|
|
||||||
# Obligatorio descargar estos 2 archivos, porque si no, muestra error
|
# Obligatorio descargar estos 2 archivos, porque si no, muestra error
|
||||||
httptools.downloadpage(coding_url, cookies=False)
|
httptools.downloadpage(coding_url, cookies=False)
|
||||||
httptools.downloadpage(cgi_counter, cookies=False)
|
httptools.downloadpage(cgi_counter, cookies=False)
|
||||||
|
|
||||||
|
ts = int(time.time())
|
||||||
|
flash_ts = scrapertools.find_single_match(flashx_hash_f, '-(\d{10})-')
|
||||||
|
wait_time = int(flash_ts) - ts
|
||||||
|
platformtools.dialog_notification('Cargando flashx', 'Espera de %s segundos requerida' % wait_time)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
time.sleep(int(wait_time) + 1)
|
time.sleep(wait_time)
|
||||||
except:
|
except:
|
||||||
time.sleep(6)
|
time.sleep(6)
|
||||||
|
|
||||||
data = httptools.downloadpage(playnow, post).data
|
data = httptools.downloadpage(playnow, post = flashx_post).data
|
||||||
# Si salta aviso, se carga la pagina de comprobacion y luego la inicial
|
# Si salta aviso, se carga la pagina de comprobacion y luego la inicial
|
||||||
# LICENSE GPL3, de alfa-addon: https://github.com/alfa-addon/ ES OBLIGATORIO AÑADIR ESTAS LÍNEAS
|
# LICENSE GPL3, de alfa-addon: https://github.com/alfa-addon/ ES OBLIGATORIO AÑADIR ESTAS LÍNEAS
|
||||||
if "You try to access this video with Kodi" in data:
|
if "You try to access this video with Kodi" in data:
|
||||||
url_reload = scrapertools.find_single_match(data, 'try to reload the page.*?href="([^"]+)"')
|
url_reload = scrapertools.find_single_match(data, 'try to reload the page.*?href="([^"]+)"')
|
||||||
try:
|
try:
|
||||||
data = httptools.downloadpage(url_reload, cookies=False).data
|
data = httptools.downloadpage(url_reload).data
|
||||||
data = httptools.downloadpage(playnow, post, cookies=False).data
|
data = httptools.downloadpage(playnow, post = flashx_post).data
|
||||||
# LICENSE GPL3, de alfa-addon: https://github.com/alfa-addon/ ES OBLIGATORIO AÑADIR ESTAS LÍNEAS
|
# LICENSE GPL3, de alfa-addon: https://github.com/alfa-addon/ ES OBLIGATORIO AÑADIR ESTAS LÍNEAS
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
{
|
{
|
||||||
"active": true,
|
"active": false,
|
||||||
"find_videos": {
|
"find_videos": {
|
||||||
"ignore_urls": [],
|
"ignore_urls": [],
|
||||||
"patterns": [
|
"patterns": [
|
||||||
{
|
{
|
||||||
"pattern": "flix555.com/([A-z0-9]+)",
|
"pattern": "flix555.com/(?:embed-|)([A-z0-9]+)",
|
||||||
"url": "https://flix555.com/\\1"
|
"url": "https://flix555.com/embed-\\1.html"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
+20
-26
@@ -1,49 +1,43 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import time
|
import re
|
||||||
import urllib
|
|
||||||
|
|
||||||
from core import httptools, scrapertools
|
from core import httptools, scrapertools
|
||||||
from lib import jsunpack
|
from lib import jsunpack
|
||||||
from platformcode import logger, platformtools
|
from platformcode import logger
|
||||||
|
|
||||||
|
|
||||||
|
data = ""
|
||||||
def test_video_exists(page_url):
|
def test_video_exists(page_url):
|
||||||
resp = httptools.downloadpage(page_url)
|
resp = httptools.downloadpage(page_url)
|
||||||
if resp.code == 404 or '<b>File Not Found</b>' in resp.data:
|
global data
|
||||||
|
data = resp.data
|
||||||
|
if resp.code == 404 or '<b>File Not Found</b>' in resp.data or "<b>File is no longer available" in resp.data:
|
||||||
return False, "[flix555] El video no está disponible"
|
return False, "[flix555] El video no está disponible"
|
||||||
return True, ""
|
return True, ""
|
||||||
|
|
||||||
|
|
||||||
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
||||||
logger.info()
|
logger.info()
|
||||||
itemlist = []
|
itemlist = []
|
||||||
|
|
||||||
data = httptools.downloadpage(page_url).data
|
|
||||||
# ~ logger.info(data)
|
|
||||||
|
|
||||||
post = {}
|
|
||||||
inputs = scrapertools.find_multiple_matches(data, '<input type="(?:hidden|submit)" name="([^"]*)" value="([^"]*)"')
|
|
||||||
for nom, valor in inputs: post[nom] = valor
|
|
||||||
post = urllib.urlencode(post)
|
|
||||||
# ~ logger.info(post)
|
|
||||||
|
|
||||||
espera = scrapertools.find_single_match(data, '<span id="cxc">(\d+)</span>')
|
|
||||||
platformtools.dialog_notification('Cargando flix555', 'Espera de %s segundos requerida' % espera)
|
|
||||||
time.sleep(int(espera))
|
|
||||||
|
|
||||||
data = httptools.downloadpage(page_url, post=post).data
|
|
||||||
# ~ logger.info(data)
|
|
||||||
|
|
||||||
packed = scrapertools.find_single_match(data, "<script type=[\"']text/javascript[\"']>(eval.*?)</script>")
|
packed = scrapertools.find_single_match(data, "<script type=[\"']text/javascript[\"']>(eval.*?)</script>")
|
||||||
unpacked = jsunpack.unpack(packed)
|
unpacked = jsunpack.unpack(packed)
|
||||||
# ~ logger.info(unpacked)
|
# ~ logger.info(unpacked)
|
||||||
|
unpacked = re.sub(r'\n|\r|\t|\s{2,}', "", unpacked)
|
||||||
|
subtitles = scrapertools.find_single_match(unpacked, r'tracks:\s*\[\{\s*file\s*:\s*"([^"]*)"\s*,\s*label')
|
||||||
|
if "empty." in subtitles: subtitles = ""
|
||||||
matches = scrapertools.find_multiple_matches(unpacked, 'file\s*:\s*"([^"]*)"\s*,\s*label\s*:\s*"([^"]*)"')
|
matches = scrapertools.find_multiple_matches(unpacked, 'file\s*:\s*"([^"]*)"\s*,\s*label\s*:\s*"([^"]*)"')
|
||||||
if matches:
|
if matches:
|
||||||
for url, lbl in matches:
|
for url, lbl in matches:
|
||||||
if not url.endswith('.srt'):
|
|
||||||
itemlist.append(['[%s]' % lbl, url])
|
if url.endswith('.srt') or url.endswith('.vtt'):
|
||||||
|
#subtitles += url
|
||||||
|
continue
|
||||||
|
|
||||||
|
itemlist.append(['.mp4 (%s) [flix555]' % lbl, url, 0, subtitles])
|
||||||
|
|
||||||
|
url = scrapertools.find_single_match(unpacked, 'file\s*:\s*"([^"]*)"\s*')
|
||||||
|
if url:
|
||||||
|
if not url.endswith('.srt') or not url.endswith('.vtt'):
|
||||||
|
itemlist.append(['.m3u8 [flix555]', url, 0, subtitles])
|
||||||
|
|
||||||
return itemlist
|
return itemlist
|
||||||
|
|
||||||
|
|||||||
Regular → Executable
+1
-1
@@ -5,7 +5,7 @@
|
|||||||
"patterns": [
|
"patterns": [
|
||||||
{
|
{
|
||||||
"pattern": "gamovideo.com/(?:embed-|)([a-z0-9]+)",
|
"pattern": "gamovideo.com/(?:embed-|)([a-z0-9]+)",
|
||||||
"url": "http://gamovideo.com/\\1"
|
"url": "http://gamovideo.com/embed-\\1.html"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
Regular → Executable
+71
-9
@@ -1,39 +1,77 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import re
|
import sys
|
||||||
|
PY3 = False
|
||||||
|
if sys.version_info[0] >= 3: PY3 = True; unicode = str; unichr = chr; long = int
|
||||||
|
|
||||||
|
import re
|
||||||
|
import random
|
||||||
from core import httptools
|
from core import httptools
|
||||||
from core import scrapertools
|
from core import scrapertools
|
||||||
from lib import jsunpack
|
from lib import jsunpack
|
||||||
from platformcode import logger
|
from platformcode import logger
|
||||||
|
if not PY3: from lib import alfaresolver
|
||||||
|
else: from lib import alfaresolver_py3 as alfaresolver
|
||||||
|
|
||||||
headers = {"User-Agent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:66.0) Gecko/20100101 Firefox/66.0"}
|
|
||||||
|
|
||||||
|
ver = random.randint(66, 67)
|
||||||
|
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:%s.0) Gecko/20100101 Firefox/%s.0" % (ver, ver)}
|
||||||
|
|
||||||
|
DATA = ''
|
||||||
|
|
||||||
def test_video_exists(page_url):
|
def test_video_exists(page_url):
|
||||||
logger.info("(page_url='%s')" % page_url)
|
logger.info("(page_url='%s')" % page_url)
|
||||||
data = httptools.downloadpage(page_url, headers=headers, cookies=False).data
|
|
||||||
|
|
||||||
if "File was deleted" in data or "<noscript>" not in data or "File was locked by administrator" in data:
|
|
||||||
|
data = alfaresolver.get_data(page_url, False)
|
||||||
|
if not "|mp4|" in data:
|
||||||
|
dict_cookie = {'domain': '.gamovideo.com', 'expires': 0}
|
||||||
|
httptools.set_cookies(dict_cookie)
|
||||||
|
data = alfaresolver.get_data(page_url, False)
|
||||||
|
|
||||||
|
global DATA
|
||||||
|
DATA = data
|
||||||
|
if "images/proced.png" in data:
|
||||||
|
return False, "[Gamovideo] El archivo no existe o ha sido borrado"
|
||||||
|
if "File was deleted" in data or ("Not Found" in data and not "|mp4|" in data) or "File was locked by administrator" in data:
|
||||||
return False, "[Gamovideo] El archivo no existe o ha sido borrado"
|
return False, "[Gamovideo] El archivo no existe o ha sido borrado"
|
||||||
if "Video is processing now" in data:
|
if "Video is processing now" in data:
|
||||||
return False, "[Gamovideo] El video está procesándose en estos momentos. Inténtelo mas tarde."
|
return False, "[Gamovideo] El video está procesándose en estos momentos. Inténtelo mas tarde."
|
||||||
if "File is awaiting for moderation" in data:
|
if "File is awaiting for moderation" in data:
|
||||||
return False, "[Gamovideo] El video está esperando por moderación."
|
return False, "[Gamovideo] El video está esperando por moderación."
|
||||||
|
|
||||||
return True, ""
|
return True, ""
|
||||||
|
|
||||||
|
|
||||||
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
||||||
logger.info("(page_url='%s')" % page_url)
|
logger.info("(page_url='%s')" % page_url)
|
||||||
data = httptools.downloadpage(page_url, headers=headers, cookies=False).data
|
|
||||||
|
data = DATA
|
||||||
|
|
||||||
packer = scrapertools.find_single_match(data,
|
packer = scrapertools.find_single_match(data,
|
||||||
"<script type='text/javascript'>(eval.function.p,a,c,k,e,d..*?)</script>")
|
"<script type='text/javascript'>(eval.function.p,a,c,k,e,d..*?)</script>")
|
||||||
if packer != "":
|
|
||||||
data = jsunpack.unpack(packer)
|
|
||||||
|
|
||||||
|
if packer != "":
|
||||||
|
try:
|
||||||
|
data = jsunpack.unpack(packer)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
original = data
|
||||||
|
n = 0
|
||||||
|
referer = page_url.replace("embed-","").replace(".html", "")
|
||||||
|
data = ""
|
||||||
|
while n < 3 and not data:
|
||||||
|
|
||||||
|
data1 = alfaresolver.get_data(page_url, False)
|
||||||
|
check_c, data = get_gcookie(data1, True)
|
||||||
|
if check_c == False:
|
||||||
|
logger.error("Error get gcookie")
|
||||||
|
n += 1
|
||||||
data = re.sub(r'\n|\t|\s+', '', data)
|
data = re.sub(r'\n|\t|\s+', '', data)
|
||||||
host = scrapertools.find_single_match(data, '\[\{image:"(http://[^/]+/)')
|
|
||||||
mediaurl = scrapertools.find_single_match(data, ',\{file:"([^"]+)"')
|
host = scrapertools.find_single_match(data, r'\[\{image:"(http://[^/]+/)')
|
||||||
|
mediaurl = scrapertools.find_single_match(data, r',\{file:"([^"]+)"')
|
||||||
if not mediaurl.startswith(host):
|
if not mediaurl.startswith(host):
|
||||||
mediaurl = host + mediaurl
|
mediaurl = host + mediaurl
|
||||||
|
|
||||||
@@ -50,3 +88,27 @@ def get_video_url(page_url, premium=False, user="", password="", video_password=
|
|||||||
logger.info("%s - %s" % (video_url[0], video_url[1]))
|
logger.info("%s - %s" % (video_url[0], video_url[1]))
|
||||||
|
|
||||||
return video_urls
|
return video_urls
|
||||||
|
|
||||||
|
def get_gcookie(data, realcheck=False):
|
||||||
|
packer = scrapertools.find_single_match(data,
|
||||||
|
"<script type='text/javascript'>(eval.function.p,a,c,k,e,d..*?)</script>")
|
||||||
|
if packer != "" and realcheck:
|
||||||
|
try:
|
||||||
|
data = jsunpack.unpack(packer)
|
||||||
|
return True, data
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
patron = '\("\d","(\d)",\d\).*?\'(\w+)'
|
||||||
|
scraper = scrapertools.find_single_match(data,patron)
|
||||||
|
if scraper:
|
||||||
|
gcookie = "%s=%s;" % (scraper[1], scraper[0])
|
||||||
|
try:
|
||||||
|
old_gcookie = headers['Cookie']
|
||||||
|
if gcookie != old_gcookie:
|
||||||
|
gcookie = old_gcookie+' '+gcookie
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
headers.update({"Cookie": gcookie})
|
||||||
|
return True, ""
|
||||||
|
else:
|
||||||
|
return False, ""
|
||||||
Regular → Executable
+1
@@ -3,6 +3,7 @@
|
|||||||
import re
|
import re
|
||||||
|
|
||||||
from core import httptools
|
from core import httptools
|
||||||
|
from core import scrapertools
|
||||||
from platformcode import logger
|
from platformcode import logger
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,58 @@
|
|||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"find_videos": {
|
||||||
|
"ignore_urls": [],
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"pattern": "(https://www.gotporn.com/[A-z0-9-]+/[A-z0-9-]+)",
|
||||||
|
"url": "\\1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "(https://mylust.com/videos/[0-9]+/[A-z0-9-]+/)",
|
||||||
|
"url": "\\1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "(https://www.stileproject.com/embed/[0-9]+)",
|
||||||
|
"url": "\\1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "(https://www.pornwatchers.com/embed/[0-9]+)",
|
||||||
|
"url": "\\1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "(https://www.pornrabbit.com/embed/[0-9]+)",
|
||||||
|
"url": "\\1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"free": true,
|
||||||
|
"id": "gotporn",
|
||||||
|
"name": "gotporn",
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"default": false,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "black_list",
|
||||||
|
"label": "@60654",
|
||||||
|
"type": "bool",
|
||||||
|
"visible": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "favorites_servers_list",
|
||||||
|
"label": "@60655",
|
||||||
|
"lvalues": [
|
||||||
|
"No",
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5"
|
||||||
|
],
|
||||||
|
"type": "list",
|
||||||
|
"visible": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thumbnail": ""
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import re
|
||||||
|
from core import httptools
|
||||||
|
from core import scrapertools
|
||||||
|
from platformcode import logger
|
||||||
|
|
||||||
|
|
||||||
|
def test_video_exists(page_url):
|
||||||
|
logger.info("(page_url='%s')" % page_url)
|
||||||
|
global data
|
||||||
|
data = httptools.downloadpage(page_url).data
|
||||||
|
if "<h2>WE ARE SORRY</h2>" in data or '<title>404 Not Found</title>' in data:
|
||||||
|
return False, "[Mixdrop] El fichero no existe o ha sido borrado"
|
||||||
|
return True, ""
|
||||||
|
|
||||||
|
|
||||||
|
def get_video_url(page_url, video_password):
|
||||||
|
logger.info("(page_url='%s')" % page_url)
|
||||||
|
video_urls = []
|
||||||
|
url = scrapertools.find_single_match(data,'<source (?:id="video_source_\d+" |)src="([^"]+)" type=(?:\'|")video/mp4(?:\'|")')
|
||||||
|
host = scrapertools.find_single_match(page_url, '(https://.*?.com)')
|
||||||
|
url += "|Referer=%s" % host
|
||||||
|
logger.debug(url)
|
||||||
|
server = scrapertools.find_single_match(page_url, 'https://(?:www.|)([A-z0-9-]+).com')
|
||||||
|
video_urls.append(["[%s]" %server, url])
|
||||||
|
return video_urls
|
||||||
@@ -4,8 +4,12 @@
|
|||||||
"ignore_urls": [],
|
"ignore_urls": [],
|
||||||
"patterns": [
|
"patterns": [
|
||||||
{
|
{
|
||||||
"pattern": "gounlimited.to/(?:embed-|)([a-z0-9]+)(?:.html|)",
|
"pattern": "https://gounlimited.to/(?:embed-|)(\\w+)(?:\\.html|/|)",
|
||||||
"url": "https://gounlimited.to/\\1.html"
|
"url": "https://gounlimited.to/embed-\\1.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "https://gounlimited.to/(\\w+)/\\w+.",
|
||||||
|
"url": "https://gounlimited.to/embed-\\1.html"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
+5
-1
@@ -12,7 +12,7 @@
|
|||||||
"url": "http://docs.google.com/get_video_info?docid=\\1"
|
"url": "http://docs.google.com/get_video_info?docid=\\1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pattern": "https://drive.google.com/uc\\?id=([A-z0-9-_=]+)",
|
"pattern": "http(?:s:|:)//drive.google.com/(?:uc|open)\\?id=([A-z0-9-_=]+)",
|
||||||
"url": "http://docs.google.com/get_video_info?docid=\\1"
|
"url": "http://docs.google.com/get_video_info?docid=\\1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -28,6 +28,10 @@
|
|||||||
"free": true,
|
"free": true,
|
||||||
"id": "gvideo",
|
"id": "gvideo",
|
||||||
"name": "gvideo",
|
"name": "gvideo",
|
||||||
|
"premium": [
|
||||||
|
"realdebrid",
|
||||||
|
"alldebrid"
|
||||||
|
],
|
||||||
"settings": [
|
"settings": [
|
||||||
{
|
{
|
||||||
"default": false,
|
"default": false,
|
||||||
|
|||||||
+33
-29
@@ -1,6 +1,15 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import urllib
|
import sys
|
||||||
|
PY3 = False
|
||||||
|
if sys.version_info[0] >= 3: PY3 = True; unicode = str; unichr = chr; long = int
|
||||||
|
|
||||||
|
if PY3:
|
||||||
|
#from future import standard_library
|
||||||
|
#standard_library.install_aliases()
|
||||||
|
import urllib.parse as urllib # Es muy lento en PY2. En PY3 es nativo
|
||||||
|
else:
|
||||||
|
import urllib # Usamos el nativo de PY2 que es más rápido
|
||||||
|
|
||||||
from core import httptools
|
from core import httptools
|
||||||
from core import scrapertools
|
from core import scrapertools
|
||||||
@@ -11,8 +20,11 @@ def test_video_exists(page_url):
|
|||||||
if 'googleusercontent' in page_url:
|
if 'googleusercontent' in page_url:
|
||||||
return True, "" # desactivada verificación pq se encalla!
|
return True, "" # desactivada verificación pq se encalla!
|
||||||
|
|
||||||
response = httptools.downloadpage(page_url, cookies=False, headers={"Referer": page_url})
|
response = httptools.downloadpage(page_url, headers={"Referer": page_url})
|
||||||
if "no+existe" in response.data:
|
global page
|
||||||
|
page = response
|
||||||
|
|
||||||
|
if "no+existe" in response.data or 'no existe.</p>' in response.data:
|
||||||
return False, "[gvideo] El video no existe o ha sido borrado"
|
return False, "[gvideo] El video no existe o ha sido borrado"
|
||||||
if "Se+ha+excedido+el" in response.data:
|
if "Se+ha+excedido+el" in response.data:
|
||||||
return False, "[gvideo] Se ha excedido el número de reproducciones permitidas"
|
return False, "[gvideo] Se ha excedido el número de reproducciones permitidas"
|
||||||
@@ -28,50 +40,42 @@ def test_video_exists(page_url):
|
|||||||
|
|
||||||
|
|
||||||
def get_video_url(page_url, user="", password="", video_password=""):
|
def get_video_url(page_url, user="", password="", video_password=""):
|
||||||
|
logger.info()
|
||||||
video_urls = []
|
video_urls = []
|
||||||
urls = []
|
urls = []
|
||||||
streams =[]
|
streams =[]
|
||||||
logger.debug('page_url: %s'%page_url)
|
logger.debug('page_url: %s'%page_url)
|
||||||
|
|
||||||
if 'googleusercontent' in page_url:
|
if 'googleusercontent' in page_url:
|
||||||
|
|
||||||
response = httptools.downloadpage(page_url, follow_redirects = False, cookies=False, headers={"Referer": page_url})
|
url = page_url
|
||||||
url=response.headers['location']
|
headers_string = httptools.get_url_headers(page_url, forced=True)
|
||||||
if "set-cookie" in response.headers:
|
|
||||||
try:
|
|
||||||
cookies = ""
|
|
||||||
cookie = response.headers["set-cookie"].split("HttpOnly, ")
|
|
||||||
for c in cookie:
|
|
||||||
cookies += c.split(";", 1)[0] + "; "
|
|
||||||
data = response.data.decode('unicode-escape')
|
|
||||||
data = urllib.unquote_plus(urllib.unquote_plus(data))
|
|
||||||
headers_string = "|Cookie=" + cookies
|
|
||||||
except:
|
|
||||||
headers_string = ""
|
|
||||||
else:
|
|
||||||
headers_string = ""
|
|
||||||
|
|
||||||
quality = scrapertools.find_single_match (url, '.itag=(\d+).')
|
quality = scrapertools.find_single_match (url, '.itag=(\d+).')
|
||||||
|
if not quality:
|
||||||
|
quality = '59'
|
||||||
streams.append((quality, url))
|
streams.append((quality, url))
|
||||||
|
|
||||||
else:
|
else:
|
||||||
response = httptools.downloadpage(page_url, cookies=False, headers={"Referer": page_url})
|
|
||||||
cookies = ""
|
data = page.data
|
||||||
cookie = response.headers["set-cookie"].split("HttpOnly, ")
|
bloque= scrapertools.find_single_match(data, 'url_encoded_fmt_stream_map(.*)')
|
||||||
for c in cookie:
|
|
||||||
cookies += c.split(";", 1)[0] + "; "
|
if bloque:
|
||||||
data = response.data.decode('unicode-escape')
|
data = bloque
|
||||||
|
|
||||||
|
data = data.decode('unicode-escape', errors='replace')
|
||||||
data = urllib.unquote_plus(urllib.unquote_plus(data))
|
data = urllib.unquote_plus(urllib.unquote_plus(data))
|
||||||
headers_string = "|Cookie=" + cookies
|
|
||||||
url_streams = scrapertools.find_single_match(data, 'url_encoded_fmt_stream_map=(.*)')
|
headers_string = httptools.get_url_headers(page_url, forced=True)
|
||||||
streams = scrapertools.find_multiple_matches(url_streams,
|
streams = scrapertools.find_multiple_matches(data,
|
||||||
'itag=(\d+)&url=(.*?)(?:;.*?quality=.*?(?:,|&)|&quality=.*?(?:,|&))')
|
'itag=(\d+)&url=(.*?)(?:;.*?quality=.*?(?:,|&)|&quality=.*?(?:,|&))')
|
||||||
|
|
||||||
itags = {'18': '360p', '22': '720p', '34': '360p', '35': '480p', '37': '1080p', '43': '360p', '59': '480p'}
|
itags = {'18': '360p', '22': '720p', '34': '360p', '35': '480p', '37': '1080p', '43': '360p', '59': '480p'}
|
||||||
for itag, video_url in streams:
|
for itag, video_url in streams:
|
||||||
if not video_url in urls:
|
if not video_url in urls:
|
||||||
video_url += headers_string
|
video_url += headers_string
|
||||||
video_urls.append([itags[itag], video_url])
|
video_urls.append([itags.get(itag, ''), video_url])
|
||||||
urls.append(video_url)
|
urls.append(video_url)
|
||||||
video_urls.sort(key=lambda video_urls: int(video_urls[0].replace("p", "")))
|
video_urls.sort(key=lambda video_urls: int(video_urls[0].replace("p", "")))
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"find_videos": {
|
||||||
|
"ignore_urls": [],
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"pattern": "https://hclips.com/embed/([0-9]+)",
|
||||||
|
"url": "\\1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"free": true,
|
||||||
|
"id": "hclips",
|
||||||
|
"name": "hclips",
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"default": false,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "black_list",
|
||||||
|
"label": "@60654",
|
||||||
|
"type": "bool",
|
||||||
|
"visible": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "favorites_servers_list",
|
||||||
|
"label": "@60655",
|
||||||
|
"lvalues": [
|
||||||
|
"No",
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5"
|
||||||
|
],
|
||||||
|
"type": "list",
|
||||||
|
"visible": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thumbnail": "https://hclips.com/favicon-194x194.png"
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# --------------------------------------------------------
|
||||||
|
# Conector hclips By Alfa development Group
|
||||||
|
# --------------------------------------------------------
|
||||||
|
|
||||||
|
from core import httptools
|
||||||
|
from core import scrapertools
|
||||||
|
from platformcode import logger, config
|
||||||
|
|
||||||
|
|
||||||
|
def test_video_exists(page_url):
|
||||||
|
logger.info("(page_url='%s')" % page_url)
|
||||||
|
global data
|
||||||
|
data = httptools.downloadpage(page_url).data
|
||||||
|
if "<h2>WE ARE SORRY</h2>" in data or '<title>404 Not Found</title>' in data:
|
||||||
|
return False, config.get_localized_string(70449) % "hclips"
|
||||||
|
return True, ""
|
||||||
|
|
||||||
|
|
||||||
|
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
||||||
|
logger.info("url=" + page_url)
|
||||||
|
video_urls = []
|
||||||
|
url = "https://hclips.com/api/videofile.php?video_id=%s&lifetime=8640000" % page_url
|
||||||
|
headers = {'Referer': "https://hclips.com/embed/%s/" % page_url}
|
||||||
|
data = httptools.downloadpage(url, headers=headers).data
|
||||||
|
texto = scrapertools.find_single_match(data, 'video_url":"([^"]+)"')
|
||||||
|
url = dec_url(texto)
|
||||||
|
url = "https://hclips.com%s" % url
|
||||||
|
media_url = httptools.downloadpage(url, only_headers=True).url
|
||||||
|
video_urls.append(["[hclips]", media_url])
|
||||||
|
return video_urls
|
||||||
|
|
||||||
|
|
||||||
|
def dec_url(txt):
|
||||||
|
#truco del mendrugo
|
||||||
|
# txt = txt.replace('\u0410', 'A').replace('\u0412', 'B').replace('\u0421', 'C').replace('\u0415', 'E').replace('\u041c', 'M').replace('~', '=').replace(',','/')
|
||||||
|
txt = txt.decode('unicode-escape').encode('utf8')
|
||||||
|
txt = txt.replace('А', 'A').replace('В', 'B').replace('С', 'C').replace('Е', 'E').replace('М', 'M').replace('~', '=').replace(',','/')
|
||||||
|
import base64
|
||||||
|
url = base64.b64decode(txt)
|
||||||
|
return url
|
||||||
Regular → Executable
+11
-1
@@ -1,7 +1,17 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import sys
|
||||||
|
PY3 = False
|
||||||
|
if sys.version_info[0] >= 3: PY3 = True; unicode = str; unichr = chr; long = int
|
||||||
|
|
||||||
|
if PY3:
|
||||||
|
#from future import standard_library
|
||||||
|
#standard_library.install_aliases()
|
||||||
|
import urllib.parse as urllib # Es muy lento en PY2. En PY3 es nativo
|
||||||
|
else:
|
||||||
|
import urllib # Usamos el nativo de PY2 que es más rápido
|
||||||
|
|
||||||
import re
|
import re
|
||||||
import urllib
|
|
||||||
|
|
||||||
from core import httptools
|
from core import httptools
|
||||||
from core import scrapertools
|
from core import scrapertools
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"find_videos": {
|
||||||
|
"ignore_urls": [],
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"pattern": "http://www.iceporn.com/embed/([0-9]+)",
|
||||||
|
"url": "\\1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"free": true,
|
||||||
|
"id": "iceporn",
|
||||||
|
"name": "iceporn",
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"default": false,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "black_list",
|
||||||
|
"label": "@60654",
|
||||||
|
"type": "bool",
|
||||||
|
"visible": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "favorites_servers_list",
|
||||||
|
"label": "@60655",
|
||||||
|
"lvalues": [
|
||||||
|
"No",
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5"
|
||||||
|
],
|
||||||
|
"type": "list",
|
||||||
|
"visible": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thumbnail": ""
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import re
|
||||||
|
from core import httptools
|
||||||
|
from core import scrapertools
|
||||||
|
from platformcode import logger
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def get_video_url(page_url, video_password):
|
||||||
|
logger.info("(page_url='%s')" % page_url)
|
||||||
|
video_urls = []
|
||||||
|
url = "https://www.iceporn.com/player_config_json/?vid=%s&aid=0&domain_id=0&embed=0&ref=null&check_speed=0" %page_url
|
||||||
|
data = httptools.downloadpage(url).data
|
||||||
|
data = scrapertools.find_single_match(data, '"files":(.*?)"quality"')
|
||||||
|
patron = '"([lh])q":"([^"]+)"'
|
||||||
|
matches = scrapertools.find_multiple_matches(data, patron)
|
||||||
|
for quality, scrapedurl in matches:
|
||||||
|
url = scrapedurl.replace("\/", "/")
|
||||||
|
if "l" in quality: quality = "360"
|
||||||
|
if "h" in quality: quality = "720"
|
||||||
|
video_urls.append(["[iceporn] %s" %quality, url])
|
||||||
|
return video_urls
|
||||||
|
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"find_videos": {
|
||||||
|
"ignore_urls": [],
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"pattern": "https://idtbox.com/(?:embed-|)([A-z0-9]+)",
|
||||||
|
"url": "https://idtbox.com/embed-\\1.html"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"free": true,
|
||||||
|
"id": "idtbox",
|
||||||
|
"name": "idtbox",
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"default": false,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "black_list",
|
||||||
|
"label": "@60654",
|
||||||
|
"type": "bool",
|
||||||
|
"visible": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "favorites_servers_list",
|
||||||
|
"label": "@60655",
|
||||||
|
"lvalues": [
|
||||||
|
"No",
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5"
|
||||||
|
],
|
||||||
|
"type": "list",
|
||||||
|
"visible": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thumbnail": "https://idtbox.com/img/idtbox.png"
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# --------------------------------------------------------
|
||||||
|
# Conector Idtbox By Alfa development Group
|
||||||
|
# --------------------------------------------------------
|
||||||
|
|
||||||
|
import re
|
||||||
|
from core import httptools, scrapertools
|
||||||
|
from platformcode import logger, platformtools
|
||||||
|
|
||||||
|
data = ""
|
||||||
|
def test_video_exists(page_url):
|
||||||
|
logger.info("(page_url='%s')" % page_url)
|
||||||
|
global data
|
||||||
|
data = httptools.downloadpage(page_url)
|
||||||
|
|
||||||
|
if not data.sucess or "Not Found" in data.data or "File was deleted" in data.data or "is no longer available" in data.data:
|
||||||
|
return False, "[Idtbox] El archivo no existe o ha sido borrado"
|
||||||
|
|
||||||
|
data = data.data
|
||||||
|
return True, ""
|
||||||
|
|
||||||
|
|
||||||
|
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
||||||
|
logger.info("url=" + page_url)
|
||||||
|
logger.error(data)
|
||||||
|
video_urls = []
|
||||||
|
patron = 'source src="([^"]+)" type="([^"]+)" res=(\d+)'
|
||||||
|
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||||
|
|
||||||
|
for url, ext, res in matches:
|
||||||
|
res = res+'p'
|
||||||
|
try:
|
||||||
|
ext = ext.split("/")[1]
|
||||||
|
except:
|
||||||
|
ext = ".mp4"
|
||||||
|
video_urls.append(["%s (%s) [idtbox]" % (ext, res), url])
|
||||||
|
|
||||||
|
return video_urls
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"find_videos": {
|
||||||
|
"ignore_urls": [],
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"pattern": "(https://www.javbangers.com/video/[0-9]+/[A-z0-9-]+/)",
|
||||||
|
"url": "\\1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "(https://www.fapnado.com/videos/[0-9]+/[A-z0-9-]+/)",
|
||||||
|
"url": "\\1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "(https://www.xozilla.com/videos/[0-9]+/[A-z0-9-]+/)",
|
||||||
|
"url": "\\1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "(https://www.camwhoresbay.com/videos/[0-9]+/[A-z0-9-]+/)",
|
||||||
|
"url": "\\1"
|
||||||
|
}, {
|
||||||
|
"pattern": "(https://www.analdin.com/es/videos/[0-9]+/[A-z0-9-]+/)",
|
||||||
|
"url": "\\1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "(https://www.javbangers.com/embed/\\w+)",
|
||||||
|
"url": "\\1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "(https://www.pornrewind.com/embed/\\w+)",
|
||||||
|
"url": "\\1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "(https://severeporn.com/embed/\\w+)",
|
||||||
|
"url": "\\1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"free": true,
|
||||||
|
"id": "javwhores",
|
||||||
|
"name": "javwhores",
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"default": false,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "black_list",
|
||||||
|
"label": "@60654",
|
||||||
|
"type": "bool",
|
||||||
|
"visible": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "favorites_servers_list",
|
||||||
|
"label": "@60655",
|
||||||
|
"lvalues": [
|
||||||
|
"No",
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5"
|
||||||
|
],
|
||||||
|
"type": "list",
|
||||||
|
"visible": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thumbnail": ""
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# --------------------------------------------------------
|
||||||
|
# Conector javwhores By Alfa development Group
|
||||||
|
# --------------------------------------------------------
|
||||||
|
import re
|
||||||
|
from core import httptools
|
||||||
|
from core import scrapertools
|
||||||
|
from platformcode import logger
|
||||||
|
|
||||||
|
from lib.kt_player import decode
|
||||||
|
|
||||||
|
def test_video_exists(page_url):
|
||||||
|
|
||||||
|
response = httptools.downloadpage(page_url)
|
||||||
|
|
||||||
|
if not response.sucess or \
|
||||||
|
"Not Found" in response.data \
|
||||||
|
or "File was deleted" in response.data \
|
||||||
|
or "is no longer available" in response.data:
|
||||||
|
return False, "[javwhores] El fichero no existe o ha sido borrado"
|
||||||
|
|
||||||
|
# global video_url, license_code
|
||||||
|
# video_url = scrapertools.find_single_match(response.data, "video_url: '([^']+)'")
|
||||||
|
# license_code = scrapertools.find_single_match(response.data, "license_code: '([^']+)'")
|
||||||
|
return True, ""
|
||||||
|
|
||||||
|
|
||||||
|
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
||||||
|
logger.info()
|
||||||
|
itemlist = []
|
||||||
|
data = httptools.downloadpage(page_url).data
|
||||||
|
if "video_url_text" in data:
|
||||||
|
patron = '(?:video_url|video_alt_url|video_alt_url[0-9]*):\s*\'([^\']+)\'.*?'
|
||||||
|
patron += '(?:video_url_text|video_alt_url_text|video_alt_url[0-9]*_text):\s*\'([^\']+)\''
|
||||||
|
else:
|
||||||
|
patron = 'video_url:\s*\'([^\']+)\'.*?'
|
||||||
|
patron += 'postfix:\s*\'([^\']+)\''
|
||||||
|
matches = re.compile(patron,re.DOTALL).findall(data)
|
||||||
|
for url,quality in matches:
|
||||||
|
itemlist.append(['%s' %quality, url])
|
||||||
|
logger.debug(quality + " : " + url)
|
||||||
|
|
||||||
|
return itemlist
|
||||||
|
# return [["[javwhores]", decode(video_url, license_code)]]
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"active": false,
|
||||||
|
"find_videos": {
|
||||||
|
"ignore_urls": [],
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"pattern": "jetload.net/(?:e|v|p|\\#\\!/v|\\#\\!/d)/(\\w+)",
|
||||||
|
"url": "https://jetload.net/e/\\1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"free": true,
|
||||||
|
"id": "jetload",
|
||||||
|
"name": "jetload",
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"default": false,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "black_list",
|
||||||
|
"label": "@60654",
|
||||||
|
"type": "bool",
|
||||||
|
"visible": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "favorites_servers_list",
|
||||||
|
"label": "@60655",
|
||||||
|
"lvalues": [
|
||||||
|
"No",
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5"
|
||||||
|
],
|
||||||
|
"type": "list",
|
||||||
|
"visible": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thumbnail": "https://jetload.net/jetlogo.png"
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# --------------------------------------------------------
|
||||||
|
# Conector jetload By Alfa development Group
|
||||||
|
# --------------------------------------------------------
|
||||||
|
import re
|
||||||
|
from core import httptools, jsontools
|
||||||
|
from core import scrapertools
|
||||||
|
from platformcode import logger
|
||||||
|
|
||||||
|
video_urls = []
|
||||||
|
def test_video_exists(page_url):
|
||||||
|
logger.info("(page_url='%s')" % page_url)
|
||||||
|
|
||||||
|
subtitles = ""
|
||||||
|
response = httptools.downloadpage(page_url)
|
||||||
|
global data
|
||||||
|
data = response.data
|
||||||
|
if not response.sucess or "Not Found" in data or "File was deleted" in data or "is no longer available" in data:
|
||||||
|
return False, "[jetload] El fichero no existe o ha sido borrado"
|
||||||
|
return True, ""
|
||||||
|
|
||||||
|
|
||||||
|
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
||||||
|
logger.info("(page_url='%s')" % page_url)
|
||||||
|
video_urls = []
|
||||||
|
media_url = scrapertools.find_single_match(data, '<video src="([^"]+)"')
|
||||||
|
if media_url:
|
||||||
|
ext = media_url[-4:]
|
||||||
|
if ext == 'm3u8':
|
||||||
|
media_url = ''
|
||||||
|
video_urls.append(["%s [Jetload]" % (ext), media_url])
|
||||||
|
|
||||||
|
return video_urls
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"find_videos": {
|
||||||
|
"ignore_urls": [],
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"pattern": "jplayer.net/v/([A-z0-9_-]+)",
|
||||||
|
"url": "https://www.jplayer.net/api/source/\\1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"free": true,
|
||||||
|
"id": "jplayer",
|
||||||
|
"name": "jplayer",
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"default": false,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "black_list",
|
||||||
|
"label": "@60654",
|
||||||
|
"type": "bool",
|
||||||
|
"visible": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "favorites_servers_list",
|
||||||
|
"label": "@60655",
|
||||||
|
"lvalues": [
|
||||||
|
"No",
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5"
|
||||||
|
],
|
||||||
|
"type": "list",
|
||||||
|
"visible": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thumbnail": ""
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# --------------------------------------------------------
|
||||||
|
# Conector jplayer By Alfa development Group
|
||||||
|
# --------------------------------------------------------
|
||||||
|
|
||||||
|
import sys
|
||||||
|
PY3 = False
|
||||||
|
if sys.version_info[0] >= 3: PY3 = True; unicode = str; unichr = chr; long = int
|
||||||
|
|
||||||
|
if PY3:
|
||||||
|
#from future import standard_library
|
||||||
|
#standard_library.install_aliases()
|
||||||
|
import urllib.parse as urllib # Es muy lento en PY2. En PY3 es nativo
|
||||||
|
else:
|
||||||
|
import urllib # Usamos el nativo de PY2 que es más rápido
|
||||||
|
|
||||||
|
from core import httptools
|
||||||
|
from core import jsontools
|
||||||
|
from core import scrapertools
|
||||||
|
from platformcode import logger
|
||||||
|
|
||||||
|
|
||||||
|
def test_video_exists(page_url):
|
||||||
|
logger.info("(page_url='%s')" % page_url)
|
||||||
|
data = httptools.downloadpage(page_url).data
|
||||||
|
if "no longer exists" in data or "to copyright issues" in data:
|
||||||
|
return False, "[jplayer] El video ha sido borrado"
|
||||||
|
return True, ""
|
||||||
|
|
||||||
|
|
||||||
|
def get_video_url(page_url, user="", password="", video_password=""):
|
||||||
|
logger.info("(page_url='%s')" % page_url)
|
||||||
|
video_urls = []
|
||||||
|
post = urllib.urlencode({"r":"", "d":"www.jplayer.net"})
|
||||||
|
data = httptools.downloadpage(page_url, post=post).data
|
||||||
|
json = jsontools.load(data)["data"]
|
||||||
|
for _url in json:
|
||||||
|
url = _url["file"]
|
||||||
|
label = _url["label"]
|
||||||
|
video_urls.append([label +" [jplayer]", url])
|
||||||
|
|
||||||
|
return video_urls
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"find_videos": {
|
||||||
|
"ignore_urls": [],
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"pattern": "(https://www.keezmovies.com/video/[A-z0-9-]+)",
|
||||||
|
"url": "\\1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"free": true,
|
||||||
|
"id": "keezmovies",
|
||||||
|
"name": "keezmovies",
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"default": false,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "black_list",
|
||||||
|
"label": "@60654",
|
||||||
|
"type": "bool",
|
||||||
|
"visible": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "favorites_servers_list",
|
||||||
|
"label": "@60655",
|
||||||
|
"lvalues": [
|
||||||
|
"No",
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5"
|
||||||
|
],
|
||||||
|
"type": "list",
|
||||||
|
"visible": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thumbnail": ""
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from core import httptools
|
||||||
|
from core import scrapertools
|
||||||
|
from platformcode import logger
|
||||||
|
|
||||||
|
|
||||||
|
def test_video_exists(page_url):
|
||||||
|
logger.info("(page_url='%s')" % page_url)
|
||||||
|
global data
|
||||||
|
data = httptools.downloadpage(page_url).data
|
||||||
|
if "<h2>WE ARE SORRY</h2>" in data or '<title>404 Not Found</title>' in data:
|
||||||
|
return False, "[keezmovies] El fichero no existe o ha sido borrado"
|
||||||
|
return True, ""
|
||||||
|
|
||||||
|
|
||||||
|
def get_video_url(page_url, video_password):
|
||||||
|
logger.info("(page_url='%s')" % page_url)
|
||||||
|
video_urls = []
|
||||||
|
data = httptools.downloadpage(page_url).data
|
||||||
|
patron = '"quality_(\d+)p":"([^"]+)"'
|
||||||
|
matches = scrapertools.find_multiple_matches(data, patron)
|
||||||
|
for quality, scrapedurl in matches:
|
||||||
|
url = scrapedurl.replace("\/", "/").replace("\u0026", "&")
|
||||||
|
video_urls.append(["[keezmovies] %sp" %quality, url])
|
||||||
|
return video_urls
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"find_videos": {
|
||||||
|
"ignore_urls": [],
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"pattern": "(mangoplay.net(?://|/)embed.php\\?data=[A-z0-9_-]+)",
|
||||||
|
"url": "https://\\1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"free": true,
|
||||||
|
"id": "mangoplay",
|
||||||
|
"name": "mangoplay",
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"default": false,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "black_list",
|
||||||
|
"label": "@60654",
|
||||||
|
"type": "bool",
|
||||||
|
"visible": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "favorites_servers_list",
|
||||||
|
"label": "@60655",
|
||||||
|
"lvalues": [
|
||||||
|
"No",
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5"
|
||||||
|
],
|
||||||
|
"type": "list",
|
||||||
|
"visible": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thumbnail": ""
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# --------------------------------------------------------
|
||||||
|
# Conector mangoplay By Alfa development Group
|
||||||
|
# --------------------------------------------------------
|
||||||
|
|
||||||
|
from core import httptools
|
||||||
|
from core import scrapertools
|
||||||
|
from platformcode import logger
|
||||||
|
|
||||||
|
|
||||||
|
def test_video_exists(page_url):
|
||||||
|
logger.info("(page_url='%s')" % page_url)
|
||||||
|
data = httptools.downloadpage(page_url).data
|
||||||
|
if "no longer exists" in data or "to copyright issues" in data:
|
||||||
|
return False, "[mangoplay] El video ha sido borrado"
|
||||||
|
return True, ""
|
||||||
|
|
||||||
|
|
||||||
|
def get_video_url(page_url, user="", password="", video_password=""):
|
||||||
|
logger.info("(page_url='%s')" % page_url)
|
||||||
|
video_urls = []
|
||||||
|
data = httptools.downloadpage(page_url).data
|
||||||
|
url = scrapertools.find_single_match(data, 'shareId = "([^"]+)')
|
||||||
|
url = httptools.downloadpage(url, follow_redirects=False, only_headers=True).headers.get("location", "")
|
||||||
|
url = url.replace(" ","%20")
|
||||||
|
video_urls.append([".MP4 [mangoplay]", url])
|
||||||
|
|
||||||
|
return video_urls
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"find_videos": {
|
||||||
|
"ignore_urls": [],
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"pattern": "(https://mangovideo.pw/embed/\\d+)",
|
||||||
|
"url": "\\1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"free": true,
|
||||||
|
"id": "mangovideo",
|
||||||
|
"name": "mangovideo",
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"default": false,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "black_list",
|
||||||
|
"label": "@60654",
|
||||||
|
"type": "bool",
|
||||||
|
"visible": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "favorites_servers_list",
|
||||||
|
"label": "@60655",
|
||||||
|
"lvalues": [
|
||||||
|
"No",
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5"
|
||||||
|
],
|
||||||
|
"type": "list",
|
||||||
|
"visible": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thumbnail": ""
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# --------------------------------------------------------
|
||||||
|
# Conector mangovideo By Alfa development Group
|
||||||
|
# --------------------------------------------------------
|
||||||
|
from core import httptools
|
||||||
|
from core import scrapertools
|
||||||
|
from platformcode import logger
|
||||||
|
|
||||||
|
server = {'1': 'http://www.mangovideo.pw/contents/videos/', '7' : 'http://server9.mangovideo.pw/contents/videos/',
|
||||||
|
'8' : 'http://s10.mangovideo.pw/contents/videos/', '9' : 'http://server2.mangovideo.pw/contents/videos/',
|
||||||
|
'10' : 'http://server217.mangovideo.pw/contents/videos/', '11' : 'http://234.mangovideo.pw/contents/videos/',
|
||||||
|
'12' : 'http://98.mangovideo.pw/contents/videos/', '13' : 'http://68.mangovideo.pw/contents/videos/',
|
||||||
|
'15' : 'http://45.mangovideo.pw/contents/videos/'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def test_video_exists(page_url):
|
||||||
|
|
||||||
|
response = httptools.downloadpage(page_url)
|
||||||
|
|
||||||
|
if not response.sucess or \
|
||||||
|
"Not Found" in response.data \
|
||||||
|
or "File was deleted" in response.data \
|
||||||
|
or "is no longer available" in response.data:
|
||||||
|
return False, "[mangovideo] El fichero no existe o ha sido borrado"
|
||||||
|
return True, ""
|
||||||
|
|
||||||
|
|
||||||
|
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
||||||
|
logger.info()
|
||||||
|
video_urls = []
|
||||||
|
data = httptools.downloadpage(page_url).data
|
||||||
|
matches = scrapertools.find_multiple_matches(data, 'function/0/https://mangovideo.pw/get_file/(\d+)/\w+/(.*?.mp4)')
|
||||||
|
for scrapedserver,scrapedurl in matches:
|
||||||
|
scrapedserver = server.get(scrapedserver, scrapedserver)
|
||||||
|
url = scrapedserver + scrapedurl
|
||||||
|
video_urls.append(["[mangovideo]", url])
|
||||||
|
return video_urls
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"find_videos": {
|
||||||
|
"ignore_urls": [],
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"pattern": "https://manyvideos.xyz/embed/([A-z0-9]+)",
|
||||||
|
"url": "https://manyvideos.xyz/embed/\\1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"free": true,
|
||||||
|
"id": "manyvideos",
|
||||||
|
"name": "manyvideos",
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"default": false,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "black_list",
|
||||||
|
"label": "@60654",
|
||||||
|
"type": "bool",
|
||||||
|
"visible": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "favorites_servers_list",
|
||||||
|
"label": "@60655",
|
||||||
|
"lvalues": [
|
||||||
|
"No",
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5"
|
||||||
|
],
|
||||||
|
"type": "list",
|
||||||
|
"visible": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thumbnail": ""
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# --------------------------------------------------------
|
||||||
|
# Conector manyvideos By Alfa development Group
|
||||||
|
# --------------------------------------------------------
|
||||||
|
from core import httptools
|
||||||
|
from core import scrapertools
|
||||||
|
from platformcode import logger
|
||||||
|
import base64
|
||||||
|
from lib import jsunpack
|
||||||
|
|
||||||
|
def test_video_exists(page_url):
|
||||||
|
|
||||||
|
response = httptools.downloadpage(page_url)
|
||||||
|
|
||||||
|
if not response.sucess or \
|
||||||
|
"Not Found" in response.data \
|
||||||
|
or "File was deleted" in response.data \
|
||||||
|
or "is no longer available" in response.data:
|
||||||
|
return False, "[manyvideos] El fichero no existe o ha sido borrado"
|
||||||
|
return True, ""
|
||||||
|
|
||||||
|
|
||||||
|
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
||||||
|
logger.info()
|
||||||
|
video_urls = []
|
||||||
|
data = httptools.downloadpage(page_url).data
|
||||||
|
data = scrapertools.find_single_match(data, 'JuicyCodes.Run\(([^\)]+)\)')
|
||||||
|
data = data.replace("+", "")
|
||||||
|
data = base64.b64decode(data)
|
||||||
|
unpack = jsunpack.unpack(data)
|
||||||
|
matches = scrapertools.find_multiple_matches(unpack, '"file":"([^"]+)","label":"([^"]+)"')
|
||||||
|
for url,quality in matches:
|
||||||
|
url = url.replace("v2.", "v1.")
|
||||||
|
video_urls.append(["[manyvideos] %s" % quality, url])
|
||||||
|
return video_urls
|
||||||
Regular → Executable
+2
-2
@@ -8,9 +8,9 @@ from platformcode import logger
|
|||||||
def test_video_exists(page_url):
|
def test_video_exists(page_url):
|
||||||
logger.info("(page_url='%s')" % page_url)
|
logger.info("(page_url='%s')" % page_url)
|
||||||
data = httptools.downloadpage(page_url).data
|
data = httptools.downloadpage(page_url).data
|
||||||
if "Invalid or Deleted File" in data:
|
if "Invalid or Deleted File" in data or "Well, looks like we" in data:
|
||||||
return False, "[Mediafire] El archivo no existe o ha sido borrado"
|
return False, "[Mediafire] El archivo no existe o ha sido borrado"
|
||||||
elif "File Removed for Violation" in data:
|
if "File Removed for Violation" in data:
|
||||||
return False, "[Mediafire] Archivo eliminado por infracción"
|
return False, "[Mediafire] Archivo eliminado por infracción"
|
||||||
return True, ""
|
return True, ""
|
||||||
|
|
||||||
|
|||||||
Regular → Executable
+72
-9
@@ -1,27 +1,90 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
import sys
|
||||||
|
PY3 = False
|
||||||
|
if sys.version_info[0] >= 3: PY3 = True; unicode = str; unichr = chr; long = int
|
||||||
|
|
||||||
|
import json
|
||||||
|
import random
|
||||||
|
from core import httptools
|
||||||
from core import scrapertools
|
from core import scrapertools
|
||||||
from platformcode import platformtools, logger
|
from platformcode import platformtools, logger
|
||||||
|
|
||||||
|
files = None
|
||||||
|
|
||||||
def test_video_exists(page_url):
|
def test_video_exists(page_url):
|
||||||
logger.info("(page_url='%s')" % page_url)
|
types= "Archivo"
|
||||||
|
gen = "o"
|
||||||
|
msg = "El link tiene algún problema."
|
||||||
|
id_video = None
|
||||||
|
get = ""
|
||||||
|
seqno = random.randint(0, 0xFFFFFFFF)
|
||||||
|
url = page_url.split("#")[1]
|
||||||
|
f_id = url.split("!")[1]
|
||||||
|
id_video = None
|
||||||
|
if "|" in url:
|
||||||
|
url, id_video = url.split("|")
|
||||||
|
post = {'a': 'g', 'g': 1, 'p': f_id}
|
||||||
|
isfolder = False
|
||||||
|
if "/#F!" in page_url:
|
||||||
|
get = "&n=" + f_id
|
||||||
|
post = {"a":"f","c":1,"r":0}
|
||||||
|
isfolder = True
|
||||||
|
types= "Carpeta"
|
||||||
|
gen = "a"
|
||||||
|
if id_video:
|
||||||
|
#Aqui ya para hacer un check se complica, no hay una manera directa aún teniendo la id del video dentro de la carpeta
|
||||||
|
return True, ""
|
||||||
|
|
||||||
return True, ""
|
codes = {-1: 'Se ha producido un error interno en Mega.nz',
|
||||||
|
-2: 'Error en la petición realizada, Cod -2',
|
||||||
|
-3: 'Un atasco temporal o malfuncionamiento en el servidor de Mega impide que se procese su link',
|
||||||
|
-4: 'Ha excedido la cuota de transferencia permitida. Vuelva a intentarlo más tarde',
|
||||||
|
-6: types + ' no encontrad' + gen + ', cuenta eliminada',
|
||||||
|
-9: types + ' no encontrad'+ gen,
|
||||||
|
-11: 'Acceso restringido',
|
||||||
|
-13: 'Está intentando acceder a un archivo incompleto',
|
||||||
|
-14: 'Una operación de desencriptado ha fallado',
|
||||||
|
-15: 'Sesión de usuario expirada o invalida, logueese de nuevo',
|
||||||
|
-16: types + ' no disponible, la cuenta del uploader fue baneada',
|
||||||
|
-17: 'La petición sobrepasa su cuota de transferiencia permitida',
|
||||||
|
-18: types + ' temporalmente no disponible, intentelo de nuevo más tarde'
|
||||||
|
}
|
||||||
|
api = 'https://g.api.mega.co.nz/cs?id=%d%s' % (seqno, get)
|
||||||
|
req_api = httptools.downloadpage(api, post=json.dumps([post])).data
|
||||||
|
if isfolder:
|
||||||
|
req_api = json.loads(req_api)
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
req_api = json.loads(req_api)[0]
|
||||||
|
except:
|
||||||
|
req_api = json.loads(req_api)
|
||||||
|
logger.error(req_api)
|
||||||
|
if isinstance(req_api, (int, long)):
|
||||||
|
if req_api in codes:
|
||||||
|
msg = codes[req_api]
|
||||||
|
return False, msg
|
||||||
|
else:
|
||||||
|
#Comprobación limite cuota restante
|
||||||
|
from megaserver import Client
|
||||||
|
c = Client(url=page_url, is_playing_fnc=platformtools.is_playing)
|
||||||
|
global files
|
||||||
|
files = c.get_files()
|
||||||
|
if files == 509:
|
||||||
|
msg1 = "[B][COLOR tomato]El video excede el limite de visionado diario que Mega impone a los usuarios Free."
|
||||||
|
msg1 += " Prueba en otro servidor o canal.[/B][/COLOR]"
|
||||||
|
return False, msg1
|
||||||
|
elif isinstance(files, (int, long)):
|
||||||
|
return False, "Error codigo %s" % str(files)
|
||||||
|
|
||||||
|
return True, ""
|
||||||
|
|
||||||
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
||||||
|
page_url = page_url.replace('/embed#', '/#')
|
||||||
logger.info("(page_url='%s')" % page_url)
|
logger.info("(page_url='%s')" % page_url)
|
||||||
video_urls = []
|
video_urls = []
|
||||||
from megaserver import Client
|
|
||||||
|
|
||||||
page_url = page_url.replace('/embed#!', '/#!')
|
|
||||||
|
|
||||||
c = Client(url=page_url, is_playing_fnc=platformtools.is_playing)
|
|
||||||
|
|
||||||
files = c.get_files()
|
|
||||||
|
|
||||||
# si hay mas de 5 archivos crea un playlist con todos
|
# si hay mas de 5 archivos crea un playlist con todos
|
||||||
|
# Esta función (la de la playlist) no va, hay que ojear megaserver/handler.py aunque la llamada este en client.py
|
||||||
if len(files) > 5:
|
if len(files) > 5:
|
||||||
media_url = c.get_play_list()
|
media_url = c.get_play_list()
|
||||||
video_urls.append([scrapertools.get_filename_from_url(media_url)[-4:] + " [mega]", media_url])
|
video_urls.append([scrapertools.get_filename_from_url(media_url)[-4:] + " [mega]", media_url])
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ from core import scrapertools
|
|||||||
from lib import jsunpack
|
from lib import jsunpack
|
||||||
from platformcode import logger
|
from platformcode import logger
|
||||||
|
|
||||||
|
|
||||||
def test_video_exists(page_url):
|
def test_video_exists(page_url):
|
||||||
data = httptools.downloadpage(page_url).data
|
data = httptools.downloadpage(page_url).data
|
||||||
if data == "File was deleted" or data == '':
|
if data == "File was deleted" or data == '':
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"find_videos": {
|
||||||
|
"ignore_urls": [],
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"pattern": "(?:http:|)//mydaddy.cc/video/([A-z0-9]+)",
|
||||||
|
"url": "http://mydaddy.cc/video/\\1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"free": true,
|
||||||
|
"id": "mydaddy",
|
||||||
|
"name": "mydaddy",
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"default": false,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "black_list",
|
||||||
|
"label": "@60654",
|
||||||
|
"type": "bool",
|
||||||
|
"visible": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "favorites_servers_list",
|
||||||
|
"label": "@60655",
|
||||||
|
"lvalues": [
|
||||||
|
"No",
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5"
|
||||||
|
],
|
||||||
|
"type": "list",
|
||||||
|
"visible": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thumbnail": ""
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# --------------------------------------------------------
|
||||||
|
# Conector mydaddy By Alfa development Group
|
||||||
|
# --------------------------------------------------------
|
||||||
|
from core import httptools
|
||||||
|
from core import scrapertools
|
||||||
|
from platformcode import logger
|
||||||
|
|
||||||
|
def test_video_exists(page_url):
|
||||||
|
|
||||||
|
response = httptools.downloadpage(page_url)
|
||||||
|
|
||||||
|
if not response.sucess or \
|
||||||
|
"Not Found" in response.data \
|
||||||
|
or "File was deleted" in response.data \
|
||||||
|
or "is no longer available" in response.data:
|
||||||
|
return False, "[mydaddy] El fichero no existe o ha sido borrado"
|
||||||
|
return True, ""
|
||||||
|
|
||||||
|
|
||||||
|
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
||||||
|
logger.info()
|
||||||
|
video_urls = []
|
||||||
|
data = httptools.downloadpage(page_url).data
|
||||||
|
data = scrapertools.find_single_match(data, 'var srca = \[(.*?)\]')
|
||||||
|
matches = scrapertools.find_multiple_matches(data, 'file: "([^"]+)", label: "([^"]+)"')
|
||||||
|
for url,quality in matches:
|
||||||
|
if not url.startswith("http"):
|
||||||
|
url = "http:%s" % url
|
||||||
|
if not "Default" in quality:
|
||||||
|
video_urls.append(["[mydaddy] %s" % quality, url])
|
||||||
|
return video_urls
|
||||||
@@ -8,11 +8,7 @@
|
|||||||
"url": "https://embed.mystream.to/\\1"
|
"url": "https://embed.mystream.to/\\1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pattern": "https://mystream\\.premiumserver\\.club/(\\w+)",
|
"pattern": "https://mystream.to/watch/(\\w+)",
|
||||||
"url": "https://embed.mystream.to/\\1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"pattern": "https://mstream\\.(?:xyz|icu)/(\\w+)",
|
|
||||||
"url": "https://embed.mystream.to/\\1"
|
"url": "https://embed.mystream.to/\\1"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
+1
-8
@@ -4,10 +4,8 @@
|
|||||||
# --------------------------------------------------------
|
# --------------------------------------------------------
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from core import httptools
|
from core import httptools
|
||||||
from core import scrapertools
|
from core import scrapertools
|
||||||
from lib import js2py
|
|
||||||
from lib.aadecode import decode as aadecode
|
from lib.aadecode import decode as aadecode
|
||||||
from platformcode import logger
|
from platformcode import logger
|
||||||
|
|
||||||
@@ -17,7 +15,7 @@ def test_video_exists(page_url):
|
|||||||
data = httptools.downloadpage(page_url)
|
data = httptools.downloadpage(page_url)
|
||||||
if data.code == 404:
|
if data.code == 404:
|
||||||
return False, "[mystream] El archivo no existe o ha sido borrado"
|
return False, "[mystream] El archivo no existe o ha sido borrado"
|
||||||
if "<title>video is no longer available" in data.data:
|
if "<title>video is no longer available" in data.data or "<title>Video not found" in data.data:
|
||||||
return False, "[mystream] El archivo no existe o ha sido borrado"
|
return False, "[mystream] El archivo no existe o ha sido borrado"
|
||||||
return True, ""
|
return True, ""
|
||||||
|
|
||||||
@@ -28,11 +26,6 @@ def get_video_url(page_url, premium = False, user = "", password = "", video_pas
|
|||||||
headers = {'referer': page_url}
|
headers = {'referer': page_url}
|
||||||
data = httptools.downloadpage(page_url, headers=headers).data
|
data = httptools.downloadpage(page_url, headers=headers).data
|
||||||
data = re.sub(r'"|\n|\r|\t| |<br>|\s{2,}', "", data)
|
data = re.sub(r'"|\n|\r|\t| |<br>|\s{2,}', "", data)
|
||||||
for c in scrapertools.find_multiple_matches(data, '<script>(.*?)</script>'):
|
|
||||||
if 'function vv' in c:
|
|
||||||
vv = js2py.eval_js(c)
|
|
||||||
if 'key' in c:
|
|
||||||
key = js2py.eval_js(c)
|
|
||||||
code = scrapertools.find_single_match(data, '(?s)<script>\s*゚ω゚(.*?)</script>').strip()
|
code = scrapertools.find_single_match(data, '(?s)<script>\s*゚ω゚(.*?)</script>').strip()
|
||||||
text_decode = aadecode(code)
|
text_decode = aadecode(code)
|
||||||
matches = scrapertools.find_multiple_matches(text_decode, "'src', '([^']+)'")
|
matches = scrapertools.find_multiple_matches(text_decode, "'src', '([^']+)'")
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"find_videos": {
|
||||||
|
"ignore_urls": [],
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"pattern": "(https://myupload.co/plugins/mediaplayer/site/_embed.php\\?u=[A-z0-9]+)",
|
||||||
|
"url": "\\1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"free": true,
|
||||||
|
"id": "myupload",
|
||||||
|
"name": "myupload",
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"default": false,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "black_list",
|
||||||
|
"label": "@60654",
|
||||||
|
"type": "bool",
|
||||||
|
"visible": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "favorites_servers_list",
|
||||||
|
"label": "@60655",
|
||||||
|
"lvalues": [
|
||||||
|
"No",
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5"
|
||||||
|
],
|
||||||
|
"type": "list",
|
||||||
|
"visible": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thumbnail": ""
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# --------------------------------------------------------
|
||||||
|
# Conector myupload By Alfa development Group
|
||||||
|
# --------------------------------------------------------
|
||||||
|
from core import httptools
|
||||||
|
from core import scrapertools
|
||||||
|
from platformcode import logger
|
||||||
|
import base64
|
||||||
|
|
||||||
|
def test_video_exists(page_url):
|
||||||
|
|
||||||
|
response = httptools.downloadpage(page_url)
|
||||||
|
|
||||||
|
if not response.sucess or \
|
||||||
|
"Not Found" in response.data \
|
||||||
|
or "File was deleted" in response.data \
|
||||||
|
or "is no longer available" in response.data:
|
||||||
|
return False, "[myupload] El fichero no existe o ha sido borrado"
|
||||||
|
return True, ""
|
||||||
|
|
||||||
|
|
||||||
|
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
||||||
|
logger.info()
|
||||||
|
video_urls = []
|
||||||
|
data = httptools.downloadpage(page_url).data
|
||||||
|
matches = scrapertools.find_multiple_matches(data, 'tracker: "([^"]+)"')
|
||||||
|
for scrapedurl in matches:
|
||||||
|
url = base64.b64decode(scrapedurl)
|
||||||
|
video_urls.append(["[myupload]", url])
|
||||||
|
return video_urls
|
||||||
Regular → Executable
+5
-1
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"active": true,
|
"active": false,
|
||||||
"find_videos": {
|
"find_videos": {
|
||||||
"ignore_urls": [],
|
"ignore_urls": [],
|
||||||
"patterns": [
|
"patterns": [
|
||||||
@@ -7,6 +7,10 @@
|
|||||||
"pattern": "/netu/tv/(embed_)(.*?$)",
|
"pattern": "/netu/tv/(embed_)(.*?$)",
|
||||||
"url": "http://netu.tv/watch_video.php?v=\\2"
|
"url": "http://netu.tv/watch_video.php?v=\\2"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"pattern": "https://waaws.tk/player/embed_player.php?vid=([A-z0-9]+)&autoplay=yes",
|
||||||
|
"url": "http://netu.tv/watch_video.php?v=\\2"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"pattern": "(?:hqq|waaw|netu)(?:\\.tv\\/|\\.watch\\/|\\.php\\?).*?(?:v=|vid=)([A-z0-9]+)",
|
"pattern": "(?:hqq|waaw|netu)(?:\\.tv\\/|\\.watch\\/|\\.php\\?).*?(?:v=|vid=)([A-z0-9]+)",
|
||||||
"url": "http://netu.tv/watch_video.php?v=\\1"
|
"url": "http://netu.tv/watch_video.php?v=\\1"
|
||||||
|
|||||||
Regular → Executable
+23
-12
@@ -1,8 +1,20 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import random
|
import sys
|
||||||
|
PY3 = False
|
||||||
|
if sys.version_info[0] >= 3: PY3 = True; unicode = str; unichr = chr; long = int
|
||||||
|
|
||||||
|
if PY3:
|
||||||
|
#from future import standard_library
|
||||||
|
#standard_library.install_aliases()
|
||||||
|
import urllib.parse as urllib # Es muy lento en PY2. En PY3 es nativo
|
||||||
|
else:
|
||||||
|
import urllib # Usamos el nativo de PY2 que es más rápido
|
||||||
|
|
||||||
|
from builtins import chr
|
||||||
|
from builtins import range
|
||||||
|
|
||||||
import re
|
import re
|
||||||
import urllib
|
|
||||||
|
|
||||||
from core import httptools
|
from core import httptools
|
||||||
from core import jsontools
|
from core import jsontools
|
||||||
@@ -12,6 +24,8 @@ from platformcode import logger
|
|||||||
|
|
||||||
def test_video_exists(page_url):
|
def test_video_exists(page_url):
|
||||||
logger.info("(page_url='%s')" % page_url)
|
logger.info("(page_url='%s')" % page_url)
|
||||||
|
#Deshabilitamos el server hasta nueva orden
|
||||||
|
return False, "[netutv] Servidor deshabilitado"
|
||||||
# http://netu.tv/watch_video.php=XX solo contiene una redireccion, ir directamente a http://hqq.tv/player/embed_player.php?vid=XX
|
# http://netu.tv/watch_video.php=XX solo contiene una redireccion, ir directamente a http://hqq.tv/player/embed_player.php?vid=XX
|
||||||
page_url = page_url.replace("/watch_video.php?v=", "/player/embed_player.php?vid=")
|
page_url = page_url.replace("/watch_video.php?v=", "/player/embed_player.php?vid=")
|
||||||
data = httptools.downloadpage(page_url).data
|
data = httptools.downloadpage(page_url).data
|
||||||
@@ -35,17 +49,15 @@ def get_video_url(page_url, premium=False, user="", password="", video_password=
|
|||||||
page_url = page_url.replace('https://waaw.tv/', 'http://hqq.watch/')
|
page_url = page_url.replace('https://waaw.tv/', 'http://hqq.watch/')
|
||||||
|
|
||||||
data = httptools.downloadpage(page_url).data
|
data = httptools.downloadpage(page_url).data
|
||||||
logger.debug(data)
|
# ~ logger.debug(data)
|
||||||
|
|
||||||
# js_wise = scrapertools.find_single_match(data, "<script type=[\"']text/javascript[\"']>\s*;?(eval.*?)</script>")
|
js_wise = scrapertools.find_single_match(data, "<script type=[\"']text/javascript[\"']>\s*;?(eval.*?)</script>")
|
||||||
js_wise = scrapertools.find_single_match(data, "<script>\s*;(eval.*?)\s*</script>")
|
|
||||||
logger.info('JS_WISE= '+ js_wise)
|
|
||||||
data = jswise(js_wise).replace("\\", "")
|
data = jswise(js_wise).replace("\\", "")
|
||||||
logger.debug(data)
|
# ~ logger.debug(data)
|
||||||
|
|
||||||
alea = str(random.random())[2:]
|
alea = str(random.random())[2:]
|
||||||
data_ip = httptools.downloadpage('http://hqq.watch/player/ip.php?type=json&rand=%s' % alea).data
|
data_ip = httptools.downloadpage('http://hqq.watch/player/ip.php?type=json&rand=%s' % alea).data
|
||||||
logger.debug(data_ip)
|
# ~ logger.debug(data_ip)
|
||||||
json_data_ip = jsontools.load(data_ip)
|
json_data_ip = jsontools.load(data_ip)
|
||||||
|
|
||||||
url = scrapertools.find_single_match(data, 'self\.location\.replace\("([^)]+)\)')
|
url = scrapertools.find_single_match(data, 'self\.location\.replace\("([^)]+)\)')
|
||||||
@@ -53,15 +65,14 @@ def get_video_url(page_url, premium=False, user="", password="", video_password=
|
|||||||
url = url.replace('"+data.ip+"', json_data_ip['ip'])
|
url = url.replace('"+data.ip+"', json_data_ip['ip'])
|
||||||
url = url.replace('"+need_captcha+"', '0') #json_data_ip['need_captcha'])
|
url = url.replace('"+need_captcha+"', '0') #json_data_ip['need_captcha'])
|
||||||
url = url.replace('"+token', '')
|
url = url.replace('"+token', '')
|
||||||
# logger.info('URL= '+url)
|
# ~ logger.debug(url)
|
||||||
# logger.debug(url)
|
|
||||||
|
|
||||||
headers = { "User-Agent": 'Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.127 Large Screen Safari/533.4 GoogleTV/162671' }
|
headers = { "User-Agent": 'Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.127 Large Screen Safari/533.4 GoogleTV/162671' }
|
||||||
data = httptools.downloadpage('http://hqq.watch'+url, headers=headers).data
|
data = httptools.downloadpage('http://hqq.watch'+url, headers=headers).data
|
||||||
# logger.debug(data)
|
# ~ logger.debug(data)
|
||||||
|
|
||||||
codigo_js = scrapertools.find_multiple_matches(data, '<script>document.write\(unescape\("([^"]+)')
|
codigo_js = scrapertools.find_multiple_matches(data, '<script>document.write\(unescape\("([^"]+)')
|
||||||
# logger.debug(codigo_js)
|
# ~ logger.debug(codigo_js)
|
||||||
|
|
||||||
js_aux = urllib.unquote(codigo_js[0])
|
js_aux = urllib.unquote(codigo_js[0])
|
||||||
at = scrapertools.find_single_match(js_aux, 'var at = "([^"]+)')
|
at = scrapertools.find_single_match(js_aux, 'var at = "([^"]+)')
|
||||||
|
|||||||
@@ -0,0 +1,74 @@
|
|||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"find_videos": {
|
||||||
|
"ignore_urls": [],
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"pattern": "http://(www.nuvid.com)/embed/([0-9]+)",
|
||||||
|
"url": "https://\\1/player_config_json/?vid=\\2&aid=0&domain_id=0&embed=0&ref=null&check_speed=0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "http://(www.drtuber.com)/embed/([0-9]+)",
|
||||||
|
"url": "https://\\1/player_config_json/?vid=\\2&aid=0&domain_id=0&embed=0&ref=null&check_speed=0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "http://(www.iceporn.com)/embed/([0-9]+)",
|
||||||
|
"url": "https://\\1/player_config_json/?vid=\\2&aid=0&domain_id=0&embed=0&ref=null&check_speed=0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "http://(www.viptube.com)/embed/([0-9]+)",
|
||||||
|
"url": "https://\\1/player_config_json/?vid=\\2&aid=0&domain_id=0&embed=0&ref=null&check_speed=0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "http://(www.vivatube.com)/embed/([0-9]+)",
|
||||||
|
"url": "https://\\1/player_config_json/?vid=\\2&aid=0&domain_id=0&embed=0&ref=null&check_speed=0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "https://(www.tubeon.com)/es/video/([0-9]+)/",
|
||||||
|
"url": "https://\\1/player_config_json/?vid=\\2&aid=0&domain_id=0&embed=0&ref=null&check_speed=0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "https://(www.hd21.com)/es/video/([0-9]+)/",
|
||||||
|
"url": "https://\\1/player_config_json/?vid=\\2&aid=0&domain_id=0&embed=0&ref=null&check_speed=0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "https://(www.yeptube.com)/es/video/([0-9]+)/",
|
||||||
|
"url": "https://\\1/player_config_json/?vid=\\2&aid=0&domain_id=0&embed=0&ref=null&check_speed=0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "https://(www.winporn.com)/es/video/([0-9]+)/",
|
||||||
|
"url": "https://\\1/player_config_json/?vid=\\2&aid=0&domain_id=0&embed=0&ref=null&check_speed=0"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"free": true,
|
||||||
|
"id": "nuvid",
|
||||||
|
"name": "nuvid",
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"default": false,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "black_list",
|
||||||
|
"label": "@60654",
|
||||||
|
"type": "bool",
|
||||||
|
"visible": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "favorites_servers_list",
|
||||||
|
"label": "@60655",
|
||||||
|
"lvalues": [
|
||||||
|
"No",
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5"
|
||||||
|
],
|
||||||
|
"type": "list",
|
||||||
|
"visible": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thumbnail": ""
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from core import httptools
|
||||||
|
from core import scrapertools
|
||||||
|
from platformcode import logger
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def get_video_url(page_url, video_password):
|
||||||
|
logger.info("(page_url='%s')" % page_url)
|
||||||
|
video_urls = []
|
||||||
|
server = scrapertools.find_single_match(page_url, 'https://www.([A-z0-9-]+).com')
|
||||||
|
data = httptools.downloadpage(page_url).data
|
||||||
|
data = scrapertools.find_single_match(data, '"files":(.*?)"quality"')
|
||||||
|
patron = '"([lh])q":"([^"]+)"'
|
||||||
|
matches = scrapertools.find_multiple_matches(data, patron)
|
||||||
|
for quality, scrapedurl in matches:
|
||||||
|
url = scrapedurl.replace("\/", "/")
|
||||||
|
if "l" in quality: quality = "360p"
|
||||||
|
if "h" in quality: quality = "720p"
|
||||||
|
video_urls.append(["[%s] %s" %(server,quality), url])
|
||||||
|
return video_urls
|
||||||
+10
-1
@@ -1,6 +1,15 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import urllib
|
import sys
|
||||||
|
PY3 = False
|
||||||
|
if sys.version_info[0] >= 3: PY3 = True; unicode = str; unichr = chr; long = int
|
||||||
|
|
||||||
|
if PY3:
|
||||||
|
#from future import standard_library
|
||||||
|
#standard_library.install_aliases()
|
||||||
|
import urllib.parse as urllib # Es muy lento en PY2. En PY3 es nativo
|
||||||
|
else:
|
||||||
|
import urllib # Usamos el nativo de PY2 que es más rápido
|
||||||
|
|
||||||
from core import httptools
|
from core import httptools
|
||||||
from core import scrapertools
|
from core import scrapertools
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"find_videos": {
|
||||||
|
"ignore_urls": [],
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"pattern": "(https://[a-zA-Z0-9]+\\.openloadpremium\\.com\\/m3u8\\/.*?\\.m3u8)",
|
||||||
|
"url": "\\1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "(https://[a-zA-Z0-9]+\\.pelisplay\\.tv/.*?m3u8.php\\?id=\\d+)",
|
||||||
|
"url": "\\1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "streamium\\.xyz/.*?hash=([a-zA-Z0-9]+)",
|
||||||
|
"url": "http://streamium.xyz/files/\\1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"free": true,
|
||||||
|
"id": "oprem",
|
||||||
|
"name": "oprem",
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"default": false,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "black_list",
|
||||||
|
"label": "@60654",
|
||||||
|
"type": "bool",
|
||||||
|
"visible": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "favorites_servers_list",
|
||||||
|
"label": "@60655",
|
||||||
|
"lvalues": [
|
||||||
|
"No",
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5"
|
||||||
|
],
|
||||||
|
"type": "list",
|
||||||
|
"visible": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# --------------------------------------------------------
|
||||||
|
# Conector Oprem By Alfa development Group
|
||||||
|
# --------------------------------------------------------
|
||||||
|
|
||||||
|
import os
|
||||||
|
from core import httptools
|
||||||
|
from platformcode import logger, config
|
||||||
|
|
||||||
|
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
||||||
|
logger.info("(page_url='%s')" % page_url)
|
||||||
|
|
||||||
|
data = httptools.downloadpage(page_url).data
|
||||||
|
if 'peliculonhd' in page_url:
|
||||||
|
import re
|
||||||
|
patron = r'/mpegTS/([^/]+)/([^\s]+)'
|
||||||
|
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||||
|
for _id, quota in matches:
|
||||||
|
old = '/mpegTS/%s/%s' % (_id, quota)
|
||||||
|
gurl = 'https://lh3.googleusercontent.com/d/%s?quotaUser=%s'
|
||||||
|
new = gurl % (_id, quota)
|
||||||
|
data = data.replace(old, new)
|
||||||
|
data = data.replace('s://lh3.googleusercontent.com', '://localhost:8781')
|
||||||
|
|
||||||
|
|
||||||
|
m3u8 = os.path.join(config.get_data_path(), "op_master.m3u8")
|
||||||
|
outfile = open(m3u8, 'wb')
|
||||||
|
outfile.write(data)
|
||||||
|
outfile.close()
|
||||||
|
page_url = m3u8
|
||||||
|
from lib import servop
|
||||||
|
servop.start()
|
||||||
|
|
||||||
|
video_urls = [["%s [Oprem]" % page_url[-4:], page_url]]
|
||||||
|
|
||||||
|
return video_urls
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"find_videos": {
|
||||||
|
"ignore_urls": [],
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"pattern": "https://(?:www.|)pornhub.com/embed/([A-z0-9]+)",
|
||||||
|
"url": "https://www.pornhub.com/view_video.php?viewkey=\\1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "(https://www.pornhub.com/view_video.php?viewkey=[A-z0-9]+)",
|
||||||
|
"url": "\\1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pattern": "(pornhub.com/view_video.php\\?viewkey=[A-z0-9]+)",
|
||||||
|
"url": "https://www.\\1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"free": true,
|
||||||
|
"id": "pornhub",
|
||||||
|
"name": "pornhub",
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"default": false,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "black_list",
|
||||||
|
"label": "@60654",
|
||||||
|
"type": "bool",
|
||||||
|
"visible": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "favorites_servers_list",
|
||||||
|
"label": "@60655",
|
||||||
|
"lvalues": [
|
||||||
|
"No",
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5"
|
||||||
|
],
|
||||||
|
"type": "list",
|
||||||
|
"visible": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thumbnail": ""
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# --------------------------------------------------------
|
||||||
|
# Conector pornhub By Alfa development Group
|
||||||
|
# --------------------------------------------------------
|
||||||
|
|
||||||
|
from core import httptools
|
||||||
|
from core import scrapertools
|
||||||
|
from platformcode import logger
|
||||||
|
|
||||||
|
|
||||||
|
def test_video_exists(page_url):
|
||||||
|
response = httptools.downloadpage(page_url)
|
||||||
|
if not response.sucess or \
|
||||||
|
"Not Found" in response.data \
|
||||||
|
or "File was deleted" in response.data \
|
||||||
|
or "removed" in response.data \
|
||||||
|
or not "defaultQuality" in response.data \
|
||||||
|
or "is no longer available" in response.data:
|
||||||
|
return False, "[pornhub] El fichero no existe o ha sido borrado"
|
||||||
|
return True, ""
|
||||||
|
|
||||||
|
def get_video_url(page_url, user="", password="", video_password=""):
|
||||||
|
logger.info()
|
||||||
|
video_urls = []
|
||||||
|
data = httptools.downloadpage(page_url).data
|
||||||
|
data = scrapertools.find_single_match(data, '<div id="vpContentContainer">(.*?)</script>')
|
||||||
|
data = data.replace('" + "', '')
|
||||||
|
videourl = scrapertools.find_multiple_matches(data, 'var quality_(\d+)p=(.*?);')
|
||||||
|
scrapertools.printMatches(videourl)
|
||||||
|
for scrapedquality,scrapedurl in videourl:
|
||||||
|
orden = scrapertools.find_multiple_matches(scrapedurl, '\*\/([A-z0-9]+)')
|
||||||
|
logger.debug(orden)
|
||||||
|
url= ""
|
||||||
|
for i in orden:
|
||||||
|
url += scrapertools.find_single_match(data, '%s="([^"]+)"' %i)
|
||||||
|
logger.debug(url)
|
||||||
|
video_urls.append([scrapedquality + "p [pornhub]", url])
|
||||||
|
return video_urls
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"find_videos": {
|
||||||
|
"ignore_urls": [],
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"pattern": "(https://www.pornrewind.com/embed/\\w+)",
|
||||||
|
"url": "\\1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"free": true,
|
||||||
|
"id": "pornrewind",
|
||||||
|
"name": "pornrewind",
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"default": false,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "black_list",
|
||||||
|
"label": "@60654",
|
||||||
|
"type": "bool",
|
||||||
|
"visible": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "favorites_servers_list",
|
||||||
|
"label": "@60655",
|
||||||
|
"lvalues": [
|
||||||
|
"No",
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5"
|
||||||
|
],
|
||||||
|
"type": "list",
|
||||||
|
"visible": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thumbnail": ""
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# --------------------------------------------------------
|
||||||
|
# Conector pornrewind By Alfa development Group
|
||||||
|
# --------------------------------------------------------
|
||||||
|
|
||||||
|
from core import httptools
|
||||||
|
from core import scrapertools
|
||||||
|
from platformcode import logger
|
||||||
|
|
||||||
|
from lib.kt_player import decode
|
||||||
|
|
||||||
|
def test_video_exists(page_url):
|
||||||
|
|
||||||
|
response = httptools.downloadpage(page_url)
|
||||||
|
|
||||||
|
if not response.sucess or \
|
||||||
|
"Not Found" in response.data \
|
||||||
|
or "File was deleted" in response.data \
|
||||||
|
or "is no longer available" in response.data:
|
||||||
|
return False, "[pornrewind] El fichero no existe o ha sido borrado"
|
||||||
|
|
||||||
|
global video_url, license_code
|
||||||
|
video_url = scrapertools.find_single_match(response.data, "video_url: '([^']+)'")
|
||||||
|
license_code = scrapertools.find_single_match(response.data, "license_code: '([^']+)'")
|
||||||
|
|
||||||
|
return True, ""
|
||||||
|
|
||||||
|
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
||||||
|
logger.info()
|
||||||
|
# mediaurl = decode(video_url, license_code)
|
||||||
|
mediaurl = video_url
|
||||||
|
if not mediaurl.startswith("https"):
|
||||||
|
mediaurl = "https://%s" % mediaurl
|
||||||
|
return [["[pornrewind]", mediaurl]]
|
||||||
Regular → Executable
+2
-2
@@ -4,8 +4,8 @@
|
|||||||
"ignore_urls": [],
|
"ignore_urls": [],
|
||||||
"patterns": [
|
"patterns": [
|
||||||
{
|
{
|
||||||
"pattern": "(?:powvideo|povw1deo).(?:net|xyz|com)/(?:embed-|iframe-|preview-|)([a-z0-9]+)",
|
"pattern": "(?:powvideo|povw1deo|powvldeo).(?:net|xyz|com|cc)/(?:embed-|iframe-|preview-|)([a-z0-9]+)",
|
||||||
"url": "http://powvideo.net/iframe-\\1-1536x701.html"
|
"url": "https://powvldeo.cc/iframe-\\1-920x360.html"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
+11
-5
@@ -1,5 +1,11 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import sys
|
||||||
|
PY3 = False
|
||||||
|
if sys.version_info[0] >= 3: PY3 = True; unicode = str; unichr = chr; long = int
|
||||||
|
|
||||||
|
import re
|
||||||
|
|
||||||
from core import httptools
|
from core import httptools
|
||||||
from core import scrapertools
|
from core import scrapertools
|
||||||
from lib import jsunpack
|
from lib import jsunpack
|
||||||
@@ -13,7 +19,9 @@ def test_video_exists(page_url):
|
|||||||
|
|
||||||
httptools.downloadpage(referer)
|
httptools.downloadpage(referer)
|
||||||
|
|
||||||
|
global data
|
||||||
data = httptools.downloadpage(page_url, headers={'referer': referer}).data
|
data = httptools.downloadpage(page_url, headers={'referer': referer}).data
|
||||||
|
|
||||||
if data == "File was deleted" or data == '':
|
if data == "File was deleted" or data == '':
|
||||||
return False, "[powvideo] El video ha sido borrado"
|
return False, "[powvideo] El video ha sido borrado"
|
||||||
if 'function(p,a,c,k,e,' not in data:
|
if 'function(p,a,c,k,e,' not in data:
|
||||||
@@ -25,15 +33,13 @@ def get_video_url(page_url, premium=False, user="", password="", video_password=
|
|||||||
logger.info()
|
logger.info()
|
||||||
itemlist = []
|
itemlist = []
|
||||||
|
|
||||||
referer = page_url.replace('iframe', 'preview')
|
|
||||||
|
|
||||||
data = httptools.downloadpage(page_url, headers={'referer': referer}).data
|
|
||||||
|
|
||||||
packed = scrapertools.find_single_match(data, "<script type=[\"']text/javascript[\"']>(eval.*?)</script>")
|
packed = scrapertools.find_single_match(data, "<script type=[\"']text/javascript[\"']>(eval.*?)</script>")
|
||||||
unpacked = jsunpack.unpack(packed)
|
unpacked = jsunpack.unpack(packed)
|
||||||
|
|
||||||
url = scrapertools.find_single_match(unpacked, "(?:src):\\\\'([^\\\\]+.mp4)\\\\'")
|
url = scrapertools.find_single_match(unpacked, "(?:src):\\\\'([^\\\\]+.mp4)\\\\'")
|
||||||
|
if not PY3: from lib import alfaresolver
|
||||||
|
else: from lib import alfaresolver_py3 as alfaresolver
|
||||||
|
url = alfaresolver.decode_video_url(url, data, 2)
|
||||||
itemlist.append([".mp4" + " [powvideo]", url])
|
itemlist.append([".mp4" + " [powvideo]", url])
|
||||||
|
|
||||||
itemlist.sort(key=lambda x: x[0], reverse=True)
|
itemlist.sort(key=lambda x: x[0], reverse=True)
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"find_videos": {
|
||||||
|
"ignore_urls": [],
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"pattern": "prostream.to/(?:embed-|)([A-z0-9]+)",
|
||||||
|
"url": "https://prostream.to/embed-\\1.html"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"free": true,
|
||||||
|
"id": "prostream",
|
||||||
|
"name": "prostream",
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"default": false,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "black_list",
|
||||||
|
"label": "@60654",
|
||||||
|
"type": "bool",
|
||||||
|
"visible": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "favorites_servers_list",
|
||||||
|
"label": "@60655",
|
||||||
|
"lvalues": [
|
||||||
|
"No",
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5"
|
||||||
|
],
|
||||||
|
"type": "list",
|
||||||
|
"visible": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thumbnail": "https://prostream.to/assets/img/logo.png"
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# --------------------------------------------------------
|
||||||
|
# Conector Prostream By Alfa development Group
|
||||||
|
# --------------------------------------------------------
|
||||||
|
|
||||||
|
from core import httptools
|
||||||
|
from core import scrapertools
|
||||||
|
from lib import jsunpack
|
||||||
|
from platformcode import logger
|
||||||
|
|
||||||
|
|
||||||
|
def test_video_exists(page_url):
|
||||||
|
logger.info("(page_url='%s')" % page_url)
|
||||||
|
global data
|
||||||
|
data = httptools.downloadpage(page_url).data
|
||||||
|
if "File is no longer available" in data:
|
||||||
|
return False, "[Prostream] El fichero no existe o ha sido borrado"
|
||||||
|
return True, ""
|
||||||
|
|
||||||
|
|
||||||
|
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
||||||
|
logger.info("url=" + page_url)
|
||||||
|
video_urls = []
|
||||||
|
ext = 'mp4'
|
||||||
|
|
||||||
|
packed = scrapertools.find_single_match(data, "text/javascript'>(eval.*?)\s*</script>")
|
||||||
|
unpacked = jsunpack.unpack(packed)
|
||||||
|
media_url = scrapertools.find_single_match(unpacked, r'sources:\s*\["([^"]+)"')
|
||||||
|
|
||||||
|
ext = media_url[-4:]
|
||||||
|
video_urls.append(["%s [Prostream]" % (ext), media_url])
|
||||||
|
|
||||||
|
return video_urls
|
||||||
Regular → Executable
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
"ignore_urls": [],
|
"ignore_urls": [],
|
||||||
"patterns": [
|
"patterns": [
|
||||||
{
|
{
|
||||||
"pattern": "rapidvideo.(?:org|com)/(?:\\?v=|e/|embed/|v/|)([A-z0-9]+)",
|
"pattern": "(?:rapidvideo|rapidvid).(?:org|com|to|is)/(?:\\?v=|e/|embed/|v/|d/)([A-z0-9]+)",
|
||||||
"url": "https://www.rapidvideo.com/e/\\1"
|
"url": "https://www.rapidvideo.com/e/\\1"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
Regular → Executable
+12
-11
@@ -36,17 +36,18 @@ def get_video_url(page_url, premium=False, user="", password="", video_password=
|
|||||||
match = scrapertools.find_multiple_matches(data, patron)
|
match = scrapertools.find_multiple_matches(data, patron)
|
||||||
if match:
|
if match:
|
||||||
for url1 in match:
|
for url1 in match:
|
||||||
res = scrapertools.find_single_match(url1, '=(\w+)')
|
res = scrapertools.find_single_match(url1, '=(\w+)')
|
||||||
data = httptools.downloadpage(url1).data
|
data = httptools.downloadpage(url1).data
|
||||||
if "Please click on this button to open this video" in data:
|
if "Please click on this button to open this video" in data:
|
||||||
data = httptools.downloadpage(url1, post=post).data
|
data = httptools.downloadpage(url1, post=post).data
|
||||||
url = scrapertools.find_single_match(data, 'source src="([^"]+)')
|
url = scrapertools.find_single_match(data, 'source src="([^"]+)')
|
||||||
ext = scrapertools.get_filename_from_url(url)[-4:]
|
ext = scrapertools.get_filename_from_url(url)[-4:]
|
||||||
video_urls.append(['%s %s [rapidvideo]' % (ext, res), url])
|
video_urls.append(['%s %s [rapidvideo]' % (ext, res), url])
|
||||||
else:
|
else:
|
||||||
patron = 'data-setup.*?src="([^"]+)".*?'
|
patron = 'src="([^"]+)" type="video/([^"]+)" label="([^"]+)"'
|
||||||
patron += 'type="([^"]+)"'
|
|
||||||
match = scrapertools.find_multiple_matches(data, patron)
|
match = scrapertools.find_multiple_matches(data, patron)
|
||||||
for url, ext in match:
|
if match:
|
||||||
video_urls.append(['%s [rapidvideo]' % (ext), url])
|
for url, ext, res in match:
|
||||||
|
video_urls.append(['.%s %s [Rapidvideo]' % (ext, res), url])
|
||||||
|
|
||||||
return video_urls
|
return video_urls
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"find_videos": {
|
||||||
|
"ignore_urls": [],
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"pattern": "rcdn.me/(?:flash-|embed-|)([A-z0-9]+)",
|
||||||
|
"url": "https://rcdn.me/embed/\\1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"free": true,
|
||||||
|
"id": "rcdnme",
|
||||||
|
"name": "rcdnme",
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"default": false,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "black_list",
|
||||||
|
"label": "@60654",
|
||||||
|
"type": "bool",
|
||||||
|
"visible": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"id": "favorites_servers_list",
|
||||||
|
"label": "@60655",
|
||||||
|
"lvalues": [
|
||||||
|
"No",
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5"
|
||||||
|
],
|
||||||
|
"type": "list",
|
||||||
|
"visible": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thumbnail": "https://i.imgur.com/NErNgTg.jpg"
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# --------------------------------------------------------
|
||||||
|
# Conector Rcdnme By Alfa development Group
|
||||||
|
# --------------------------------------------------------
|
||||||
|
|
||||||
|
from core import httptools
|
||||||
|
from core import scrapertools
|
||||||
|
from lib import jsunpack
|
||||||
|
from platformcode import logger
|
||||||
|
|
||||||
|
|
||||||
|
def test_video_exists(page_url):
|
||||||
|
logger.info("(page_url='%s')" % page_url)
|
||||||
|
data = httptools.downloadpage(page_url)
|
||||||
|
|
||||||
|
if "Object not found" in data.data or "longer exists on our servers" in data.data:
|
||||||
|
return False, "[Rcdnme] El archivo no existe o ha sido borrado"
|
||||||
|
if data.code == 500:
|
||||||
|
return False, "[Rcdnme] Error interno del servidor"
|
||||||
|
return True, ""
|
||||||
|
|
||||||
|
|
||||||
|
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
||||||
|
logger.info("(page_url='%s')" % page_url)
|
||||||
|
|
||||||
|
data = httptools.downloadpage(page_url).data
|
||||||
|
if "p,a,c,k,e,d" in data:
|
||||||
|
data = jsunpack.unpack(data).replace("\\", "")
|
||||||
|
video_urls = []
|
||||||
|
videos = scrapertools.find_multiple_matches(data, 'file":"([^"]+)","label":"(.*?)"')
|
||||||
|
subtitulo = scrapertools.find_single_match(data, 'tracks:\s*\[{"file":"(.*?)"')
|
||||||
|
if "http" not in subtitulo and subtitulo != "":
|
||||||
|
subtitulo = "https://rcdn.me" + subtitulo
|
||||||
|
|
||||||
|
for video_url, video_calidad in videos:
|
||||||
|
extension = scrapertools.get_filename_from_url(video_url)[-4:]
|
||||||
|
|
||||||
|
video_url = video_url.replace("\\", "")
|
||||||
|
|
||||||
|
if extension not in [".vtt", ".srt"]:
|
||||||
|
video_urls.append(["%s %s [rcdnme]" % (extension, video_calidad), video_url, 0, subtitulo])
|
||||||
|
try:
|
||||||
|
video_urls.sort(key=lambda it: int(it[0].split("p ", 1)[0].rsplit(" ")[1]))
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
for video_url in video_urls:
|
||||||
|
logger.info(" %s - %s" % (video_url[0], video_url[1]))
|
||||||
|
|
||||||
|
return video_urls
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user