diff --git a/channels/animeworld.py b/channels/animeworld.py index 19ba5d17..bb40d89b 100644 --- a/channels/animeworld.py +++ b/channels/animeworld.py @@ -174,7 +174,7 @@ def peliculas(item): @support.scrape def episodios(item): anime=True - pagination = 25 + pagination = 50 # data = get_data(item) patronBlock= r'
.*?)(?:
[^"]+)"[^>]*>(?P[^<]+)<' @@ -194,6 +194,7 @@ def findvideos(item): # resp = support.match(get_data(item), headers=headers, patron=r'data-name="(\d+)">([^<]+)<') resp = support.match(item, headers=headers, patron=r'data-name="(\d+)">([^<]+)<') data = resp.data + for ID, name in resp.matches: if not item.number: item.number = support.match(item.title, patron=r'(\d+) -').match match = support.match(data, patronBlock=r'data-name="' + ID + r'"[^>]+>(.*?)(?:
|

)(?P\d+.\d+)?(?: – )?(?P[^<]+)<a (?P<url>.*?)(?:<br|</p)' + patron = r'(?: /> |<p>)(?P<episode>\d+.\d+)?(?: – )?(?P<title>[^<]+)<a (?P<data>.*?)(?:<br|</p)' else: patron = r'<br />\s*<a href="(?P<url>[^"]+)" target="_blank" rel="noopener[^>]+>(?P<episode>\d+.\d+)?(?: – )?(?P<title>[^<]+)</a>' @@ -123,4 +123,4 @@ def episodios(item): def findvideos(item): - return support.server(item, item.url if item.contentType != 'movie' else support.match(item.url, headers=headers).data ) + return support.server(item, item.data if item.contentType != 'movie' else support.match(item.url, headers=headers).data ) diff --git a/platformcode/xbmc_videolibrary.py b/platformcode/xbmc_videolibrary.py index d9d217a9..2e231fe4 100644 --- a/platformcode/xbmc_videolibrary.py +++ b/platformcode/xbmc_videolibrary.py @@ -85,7 +85,7 @@ def mark_auto_as_watched(item): xbmc.sleep(1000) # if item.options['continue']: - if actual_time < mark_time: + if 10 < actual_time < mark_time: item.played_time = actual_time else: item.played_time = 0 platformtools.set_played_time(item) diff --git a/servers/doodstream.json b/servers/doodstream.json index 0fe45f6c..79adbefe 100644 --- a/servers/doodstream.json +++ b/servers/doodstream.json @@ -4,7 +4,7 @@ "ignore_urls": [], "patterns": [ { - "pattern": "https://dood(?:stream|).(?:watch|to|com)/((?:e|d)/[a-z0-9]+)", + "pattern": "https://dood(?:stream|).[^/]+/((?:e|d)/[a-z0-9]+)", "url": "https://dood.to/\\1" } ] diff --git a/servers/ninjastream.json b/servers/ninjastream.json new file mode 100644 index 00000000..06ef620a --- /dev/null +++ b/servers/ninjastream.json @@ -0,0 +1,41 @@ +{ + "active": true, + "find_videos": { + "ignore_urls": [], + "patterns": [ + { + "pattern": "ninjastream.to/(?:watch/)?([0-9a-zA-Z]+)", + "url": "https://ninjastream.to/watch/\\1" + } + ] + }, + "free": true, + "id":"ninjastream", + "name": "NinjaStream", + "settings": [ + { + "default": false, + "enabled": true, + "id": "black_list", + "label": "@70708", + "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 + } + ] +} diff --git a/servers/ninjastream.py b/servers/ninjastream.py new file mode 100644 index 00000000..aabe7382 --- /dev/null +++ b/servers/ninjastream.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +import json +from core import support, httptools +from platformcode import logger, config + +def test_video_exists(page_url): + global data + logger.debug('page url=', page_url) + response = httptools.downloadpage(page_url) + + if response.code == 404: + return False, config.get_localized_string(70449) % 'NinjaStream' + else: + data = response.data + return True, "" + + +def get_video_url(page_url, premium=False, user="", password="", video_password=""): + global data + logger.debug("URL", page_url) + video_urls = [] + + h = json.loads(support.match(data, patron='stream="([^"]+)"').match.replace('"','"').replace('\\','')) + baseurl = h['host'] + h['hash'] + matches = support.match(baseurl + '/index.m3u8', patron=r'RESOLUTION=\d+x(\d+)\s*([^\s]+)').matches + + for quality, url in matches: + video_urls.append(["{} {}p [NinjaStream]".format(url.split('.')[-1], quality), '{}/{}'.format(baseurl, url)]) + + return video_urls \ No newline at end of file diff --git a/servers/okstream.json b/servers/okstream.json new file mode 100644 index 00000000..cbc34931 --- /dev/null +++ b/servers/okstream.json @@ -0,0 +1,41 @@ +{ + "active": true, + "find_videos": { + "ignore_urls": [], + "patterns": [ + { + "pattern": "okstream.cc/([0-9a-zA-Z]+)", + "url": "https://www.okstream.cc/e/\\1" + } + ] + }, + "free": true, + "id":"okstream", + "name": "OkStream", + "settings": [ + { + "default": false, + "enabled": true, + "id": "black_list", + "label": "@70708", + "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 + } + ] +} diff --git a/servers/okstream.py b/servers/okstream.py new file mode 100644 index 00000000..36e8be82 --- /dev/null +++ b/servers/okstream.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- + +from core import httptools, scrapertools +from platformcode import logger, config + +def test_video_exists(page_url): + global data + logger.debug('page url=', page_url) + response = httptools.downloadpage(page_url) + + if response.code == 404: + return False, config.get_localized_string(70449) % 'OkStream' + else: + data = response.data + return True, "" + + +def get_video_url(page_url, premium=False, user="", password="", video_password=""): + global data + logger.debug("URL", page_url) + video_urls = [] + keys = scrapertools.find_single_match(data, '>var keys="([^"]+)"') + protection = scrapertools.find_single_match(data, '>var protection="([^"]+)"') + url = httptools.downloadpage("https://www.okstream.cc/request/", post='&morocco={}&mycountry={}'.format(keys, protection), headers={'Referer':page_url}).data + url = url.strip() + video_urls.append([url.split('.')[-1] + " [OkStream]", url]) + + return video_urls \ No newline at end of file diff --git a/servers/userload.json b/servers/userload.json new file mode 100644 index 00000000..1aca3d12 --- /dev/null +++ b/servers/userload.json @@ -0,0 +1,41 @@ +{ + "active": true, + "find_videos": { + "ignore_urls": [], + "patterns": [ + { + "pattern": "userload.co/embed/([a-z0-9]+)", + "url": "https://userload.co/e/\\1" + } + ] + }, + "free": true, + "id": "userload", + "name": "userload", + "settings": [ + { + "default": false, + "enabled": true, + "id": "black_list", + "label": "@70708", + "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 + } + ] +} \ No newline at end of file diff --git a/servers/userload.py b/servers/userload.py new file mode 100644 index 00000000..b8396349 --- /dev/null +++ b/servers/userload.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +import json +from core import support, httptools +from platformcode import logger, config + +def test_video_exists(page_url): + global data + logger.debug('page url=', page_url) + response = httptools.downloadpage(page_url) + + if response.code == 404: + return False, config.get_localized_string(70449) % 'Userload' + else: + data = response.data + return True, "" + + +def get_video_url(page_url, premium=False, user="", password="", video_password=""): + global data + logger.debug("URL", page_url) + video_urls = [] + var = support.match(data, patron=r"var\|\|([^']+)").match.split('|') + if var: + post = 'morocco={}&mycountry={}'.format(var[7], var[17]) + url = support.match('https://userload.co/api/request/', post=post, patron=r'([^\s\r\n]+)').match + if url: + video_urls.append(["{} [Userload]".format(url.split('.')[-1]), url]) + + return video_urls \ No newline at end of file