From 2c7c37bc12e08cb1d29691907b1b7cc21470f41c Mon Sep 17 00:00:00 2001
From: AbdullahM0hamed <25087116+AbdullahM0hamed@users.noreply.github.com>
Date: Sun, 21 Mar 2021 20:20:31 +0000
Subject: [PATCH] Update ryuanime
---
anime_downloader/config.py | 7 ++++-
anime_downloader/extractors/vidstream.py | 15 ++++++++--
anime_downloader/sites/ryuanime.py | 35 ++++++++++++++----------
3 files changed, 39 insertions(+), 18 deletions(-)
diff --git a/anime_downloader/config.py b/anime_downloader/config.py
index 0b60707..141bfd6 100644
--- a/anime_downloader/config.py
+++ b/anime_downloader/config.py
@@ -117,7 +117,12 @@ DEFAULT_CONFIG = {
},
'ryuanime': {
'version': 'subbed',
- 'server': 'trollvid',
+ 'servers': [
+ 'vidstream',
+ 'mp4upload',
+ 'xstreamcdn',
+ 'trollvid'
+ ]
},
'animekisa': {
'server': 'gcloud',
diff --git a/anime_downloader/extractors/vidstream.py b/anime_downloader/extractors/vidstream.py
index 1faa216..aa79701 100644
--- a/anime_downloader/extractors/vidstream.py
+++ b/anime_downloader/extractors/vidstream.py
@@ -28,7 +28,8 @@ class VidStream(BaseExtractor):
}
url = self.url.replace('https:////', 'https://')
- url = url.replace('https://gogo-stream.com/download', 'https://gogo-stream.com/server.php')
+ url = url.replace('https://gogo-stream.com/download',
+ 'https://gogo-stream.com/server.php')
soup = helpers.soupify(helpers.get(url))
linkserver = soup.select('li.linkserver')
logger.debug('Linkserver: {}'.format(linkserver))
@@ -64,7 +65,11 @@ class VidStream(BaseExtractor):
#
#
# Used to create a download url.
- soup_id = soup.select('input#id')[0]['value']
+ try:
+ soup_id = soup.select('input#id')[0]['value']
+ except IndexError:
+ return self._get_link_new(soup)
+
soup_title = soup.select('input#title')[0]['value']
soup_typesub = soup.select('input#typesub')[0].get('value', 'SUB')
@@ -103,6 +108,11 @@ class VidStream(BaseExtractor):
return {'stream_url': ''}
+ def _get_link_new(self, soup):
+ link_buttons = soup.select('div.mirror_link')[
+ 0].select('div.dowload > a[href]')
+ return {'stream_url': link_buttons[0].get('href')}
+
class Extractor:
"""dummy class to prevent changing self"""
@@ -110,4 +120,3 @@ class Extractor:
def __init__(self, dictionary):
for k, v in dictionary.items():
setattr(self, k, v)
-
diff --git a/anime_downloader/sites/ryuanime.py b/anime_downloader/sites/ryuanime.py
index c3089a0..59fdded 100644
--- a/anime_downloader/sites/ryuanime.py
+++ b/anime_downloader/sites/ryuanime.py
@@ -22,13 +22,16 @@ class RyuAnime(Anime, sitename='ryuanime'):
@classmethod
def search(cls, query):
- soup = helpers.soupify(helpers.get("https://ryuanime.com/browse-anime", params={"search": query}))
- result_data = soup.select("li.list-inline-item:has(p.anime-name):has(a.ani-link)")
+ soup = helpers.soupify(helpers.get(
+ "https://ryuanime.com/browse-anime", params={"search": query}))
+ result_data = soup.select(
+ "li.list-inline-item:has(p.anime-name):has(a.ani-link)")
search_results = [
SearchResult(
title=result.select("p.anime-name")[0].text,
- url='https://ryuanime.com' + result.select("a.ani-link")[0].get("href")
+ url='https://ryuanime.com' +
+ result.select("a.ani-link")[0].get("href")
)
for result in result_data
]
@@ -36,7 +39,8 @@ class RyuAnime(Anime, sitename='ryuanime'):
def _scrape_episodes(self):
soup = helpers.soupify(helpers.get(self.url))
- episodes = ['https://ryuanime.com' + x.get("href") for x in soup.select("li.jt-di > a")]
+ episodes = ['https://ryuanime.com' +
+ x.get("href") for x in soup.select("li.jt-di > a")]
if len(episodes) == 0:
logger.warning("No episodes found")
@@ -49,17 +53,16 @@ class RyuAnime(Anime, sitename='ryuanime'):
class RyuAnimeEpisode(AnimeEpisode, sitename='ryuanime'):
- def getLink(self, name, _id):
- if name == "trollvid":
- return "https://trollvid.net/embed/" + _id
- elif name == "mp4upload":
- return f"https://mp4upload.com/embed-{_id}.html"
- elif name == "xstreamcdn":
- return f"https://xstreamcdn.com/v/" + _id
-
def _get_sources(self):
page = helpers.get(self.url).text
+ server_links = {
+ 'trollvid': 'https://trollvid.net/embed/{}',
+ 'mp4upload': 'https://mp4upload.com/embed-{}.html',
+ 'xstreamcdn': 'https://xstreamcdn.com/v/{}',
+ 'vidstreaming': 'https://vidstreaming.io/download?id={}'
+ }
+
# Example:
"""
[
@@ -69,16 +72,20 @@ class RyuAnimeEpisode(AnimeEpisode, sitename='ryuanime'):
}
]
"""
- hosts = json.loads(re.search(r"let.*?episode.*?videos.*?(\[\{.*?\}\])", page).group(1))
+ hosts = json.loads(
+ re.search(r"let.*?episode.*?videos.*?(\[\{.*?\}\])", page).group(1))
sources_list = []
for host in hosts:
name = host.get("host")
_id = host.get("id")
- link = self.getLink(name, _id)
+ link = server_links[name].format(_id)
if link:
+ if name == 'vidstreaming':
+ name = 'vidstream'
+
sources_list.append({
"extractor": name,
"url": link,