aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBobby <[email protected]>2024-09-30 10:30:16 -0400
committerBobby <[email protected]>2024-09-30 10:30:16 -0400
commitd1f8f5a9ec19458fd17da2ed2dca4e02b163427b (patch)
treecfa30458125ecb448c459014d1a71c091fe4fa00
parent172715e8ab25d770555a72bc3de9bdcad2485d35 (diff)
downloadyugen-d1f8f5a9ec19458fd17da2ed2dca4e02b163427b.tar.xz
yugen-d1f8f5a9ec19458fd17da2ed2dca4e02b163427b.zip
Zoro watch data
-rw-r--r--watch/utils.py29
-rw-r--r--watch/views.py26
2 files changed, 44 insertions, 11 deletions
diff --git a/watch/utils.py b/watch/utils.py
index cc688d6..83a755b 100644
--- a/watch/utils.py
+++ b/watch/utils.py
@@ -86,18 +86,43 @@ def get_anime_data(anime_id, provider="gogo", dub=False):
return anime_data
+def find_zoro_server (episode_id, mode):
+ base_url = f"{os.getenv('ZORO_URL')}/anime/servers?episodeId={episode_id}"
+ print(base_url)
+ response = requests.get(base_url)
+ response = response.json()
+
+ if "message" in response:
+ return None, mode
+
+ if mode == "dub" and "dub" in response and len(response["dub"]) > 0:
+ server_id = response["dub"][0]["serverName"]
+ mode = "dub"
+ elif len(response["sub"]) > 0 and "sub" in response:
+ server_id = response["sub"][0]["serverName"]
+ mode = "sub"
+ elif len(response["raw"]) > 0:
+ server_id = response["raw"][0]["serverName"]
+ mode = "raw"
+
+ return server_id, mode
+
+
@lru_cache(maxsize=100)
def get_zoro_episode_streaming_data(episode_url, dub=False):
episode_url = episode_url.split("watch/")[1]
cache_key = f"zoro_episode_streaming_data_{episode_url}_{'dub' if dub else 'sub'}"
episode_data = get_from_redis_cache(cache_key)
category = "dub" if dub else "sub"
+ server, category = find_zoro_server(episode_url, category)
if not episode_data:
- base_url = f"{os.getenv('ZORO_URL')}/anime/episode-srcs?id={episode_url}&category={category}"
+ base_url = f"{os.getenv('ZORO_URL')}/anime/episode-srcs?id={episode_url}&category={category}&server={server}"
print(f"Trying URL: {base_url}")
response = requests.get(base_url, timeout=10)
episode_data = response.json()
- store_in_redis_cache(cache_key, json.dumps(episode_data), 3600 * 12)
+
+ if "message" not in episode_data:
+ store_in_redis_cache(cache_key, json.dumps(episode_data), 3600 * 12)
else:
episode_data = json.loads(episode_data)
diff --git a/watch/views.py b/watch/views.py
index e06710b..1c50f93 100644
--- a/watch/views.py
+++ b/watch/views.py
@@ -50,7 +50,7 @@ def watch(request, anime_id, episode=None):
episodes = attach_episode_metadata(anime_data, episodes)
episode_data = next((ep for ep in episodes if ep['number'] == int(episode)), None)
- if not preload_request:
+ if not preload_request and episode_data:
additional_data = {
"anime_title_english": anime_data["title"]["english"] if "title" in anime_data and "english" in anime_data["title"] else "",
"anime_title_romaji": anime_data["title"]["romaji"] if "title" in anime_data and "romaji" in anime_data["title"] else "",
@@ -61,19 +61,27 @@ def watch(request, anime_id, episode=None):
update_anime_user_history(request.user, anime_id, episode, current_watched_time, additional_data)
- if provider == "zoro":
- streaming_data = get_zoro_episode_streaming_data(episode_data["url"], mode)
- else:
- streaming_data = get_gogo_episode_streaming_data(episode_data["id"])
+ if episode_data:
+ if provider == "zoro":
+ streaming_data = get_zoro_episode_streaming_data(episode_data["url"], mode)
+ else:
+ streaming_data = get_gogo_episode_streaming_data(episode_data["id"])
+
+ if preload_request:
+ return JsonResponse({"status": f"Preloaded episode {episode}"})
- if preload_request:
- return JsonResponse({"status": f"Preloaded episode {episode}"})
+ stream_url = streaming_data["sources"][0]["url"] if streaming_data and "sources" in streaming_data else None
+ else:
+ episode_data = {
+ "number": 0,
+ }
+ streaming_data = None
+ stream_url = ""
- stream_url = streaming_data["sources"][0]["url"] if streaming_data and "sources" in streaming_data else None
context = {
"anime": anime_data,
"animeID": anime_id,
- "current_episode_number": episode,
+ "current_episode_number": episode if episode_data else 0,
"current_episode": episode_data,
"all_episodes": episodes,
"characters": anime_data.get("characters", []),