diff options
| author | Bobby <[email protected]> | 2024-09-30 10:30:16 -0400 |
|---|---|---|
| committer | Bobby <[email protected]> | 2024-09-30 10:30:16 -0400 |
| commit | d1f8f5a9ec19458fd17da2ed2dca4e02b163427b (patch) | |
| tree | cfa30458125ecb448c459014d1a71c091fe4fa00 | |
| parent | 172715e8ab25d770555a72bc3de9bdcad2485d35 (diff) | |
| download | yugen-d1f8f5a9ec19458fd17da2ed2dca4e02b163427b.tar.xz yugen-d1f8f5a9ec19458fd17da2ed2dca4e02b163427b.zip | |
Zoro watch data
| -rw-r--r-- | watch/utils.py | 29 | ||||
| -rw-r--r-- | watch/views.py | 26 |
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", []), |
