diff --git a/README.md b/README.md index c244d7b47..0114bbff5 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,7 @@ If you need something that is not already part of Bazarr, feel free to create a ## Supported subtitles providers: - Addic7ed +- Animetosho (requires AniDb HTTP API client described [here](https://wiki.anidb.net/HTTP_API_Definition)) - Assrt - BetaSeries - BSplayer diff --git a/bazarr/app/config.py b/bazarr/app/config.py index cda51d0ef..49ae4cf32 100644 --- a/bazarr/app/config.py +++ b/bazarr/app/config.py @@ -109,6 +109,7 @@ validators = [ Validator('general.adaptive_searching_delta', must_exist=True, default='1w', is_type_of=str, is_in=['3d', '1w', '2w', '3w', '4w']), Validator('general.enabled_providers', must_exist=True, default=[], is_type_of=list), + Validator('general.enabled_integrations', must_exist=True, default=[], is_type_of=list), Validator('general.multithreading', must_exist=True, default=True, is_type_of=bool), Validator('general.chmod_enabled', must_exist=True, default=False, is_type_of=bool), Validator('general.chmod', must_exist=True, default='0640', is_type_of=str), @@ -234,6 +235,11 @@ validators = [ Validator('addic7ed.user_agent', must_exist=True, default='', is_type_of=str), Validator('addic7ed.vip', must_exist=True, default=False, is_type_of=bool), + # animetosho section + Validator('animetosho.search_threshold', must_exist=True, default=6, is_type_of=int, gte=1, lte=15), + Validator('animetosho.anidb_api_client', must_exist=True, default='', is_type_of=str, cast=str), + Validator('animetosho.anidb_api_client_ver', must_exist=True, default=1, is_type_of=int, gte=1, lte=9), + # avistaz section Validator('avistaz.cookies', must_exist=True, default='', is_type_of=str), Validator('avistaz.user_agent', must_exist=True, default='', is_type_of=str), @@ -369,6 +375,10 @@ validators = [ Validator('postgresql.database', must_exist=True, default='', is_type_of=str), Validator('postgresql.username', must_exist=True, default='', is_type_of=str, cast=str), Validator('postgresql.password', must_exist=True, default='', is_type_of=str, cast=str), + + # anidb section + Validator('anidb.api_client', must_exist=True, default='', is_type_of=str), + Validator('anidb.api_client_ver', must_exist=True, default=1, is_type_of=int), ] @@ -442,6 +452,7 @@ array_keys = ['excluded_tags', 'subzero_mods', 'excluded_series_types', 'enabled_providers', + 'enabled_integrations', 'path_mappings', 'path_mappings_movie', 'language_equals', diff --git a/bazarr/app/get_providers.py b/bazarr/app/get_providers.py index bb78f29d9..7df6b8742 100644 --- a/bazarr/app/get_providers.py +++ b/bazarr/app/get_providers.py @@ -324,6 +324,9 @@ def get_providers_auth(): 'timeout': settings.whisperai.timeout, 'ffmpeg_path': _FFMPEG_BINARY, 'loglevel': settings.whisperai.loglevel, + }, + "animetosho": { + 'search_threshold': settings.animetosho.search_threshold, } } diff --git a/bazarr/subtitles/refiners/__init__.py b/bazarr/subtitles/refiners/__init__.py index 750fa4f18..ff1e715a0 100644 --- a/bazarr/subtitles/refiners/__init__.py +++ b/bazarr/subtitles/refiners/__init__.py @@ -3,9 +3,11 @@ from .ffprobe import refine_from_ffprobe from .database import refine_from_db from .arr_history import refine_from_arr_history +from .anidb import refine_from_anidb registered = { "database": refine_from_db, "ffprobe": refine_from_ffprobe, "arr_history": refine_from_arr_history, + "anidb": refine_from_anidb, } diff --git a/bazarr/subtitles/refiners/anidb.py b/bazarr/subtitles/refiners/anidb.py new file mode 100644 index 000000000..2174e0f7c --- /dev/null +++ b/bazarr/subtitles/refiners/anidb.py @@ -0,0 +1,140 @@ +# coding=utf-8 +# fmt: off + +import logging +import requests +from collections import namedtuple +from datetime import timedelta +from requests.exceptions import HTTPError + +from app.config import settings +from subliminal import Episode, region + +try: + from lxml import etree +except ImportError: + try: + import xml.etree.cElementTree as etree + except ImportError: + import xml.etree.ElementTree as etree + +refined_providers = {'animetosho'} + +api_url = 'http://api.anidb.net:9001/httpapi' + + +class AniDBClient(object): + def __init__(self, api_client_key=None, api_client_ver=1, session=None): + self.session = session or requests.Session() + self.api_client_key = api_client_key + self.api_client_ver = api_client_ver + + AnimeInfo = namedtuple('AnimeInfo', ['anime', 'episode_offset']) + + @region.cache_on_arguments(expiration_time=timedelta(days=1).total_seconds()) + def get_series_mappings(self): + r = self.session.get( + 'https://raw.githubusercontent.com/Anime-Lists/anime-lists/master/anime-list.xml', + timeout=10 + ) + + r.raise_for_status() + + return r.content + + @region.cache_on_arguments(expiration_time=timedelta(days=1).total_seconds()) + def get_series_id(self, mappings, tvdb_series_season, tvdb_series_id, episode): + # Enrich the collection of anime with the episode offset + animes = [ + self.AnimeInfo(anime, int(anime.attrib.get('episodeoffset', 0))) + for anime in mappings.findall( + f".//anime[@tvdbid='{tvdb_series_id}'][@defaulttvdbseason='{tvdb_series_season}']" + ) + ] + + if not animes: + return None + + # Sort the anime by offset in ascending order + animes.sort(key=lambda a: a.episode_offset) + + # Different from Tvdb, Anidb have different ids for the Parts of a season + anidb_id = None + offset = 0 + + for index, anime_info in enumerate(animes): + anime, episode_offset = anime_info + anidb_id = int(anime.attrib.get('anidbid')) + if episode > episode_offset: + anidb_id = anidb_id + offset = episode_offset + + return anidb_id, episode - offset + + @region.cache_on_arguments(expiration_time=timedelta(days=1).total_seconds()) + def get_series_episodes_ids(self, tvdb_series_id, season, episode): + mappings = etree.fromstring(self.get_series_mappings()) + + series_id, episode_no = self.get_series_id(mappings, season, tvdb_series_id, episode) + + if not series_id: + return None, None + + episodes = etree.fromstring(self.get_episodes(series_id)) + + return series_id, int(episodes.find(f".//episode[epno='{episode_no}']").attrib.get('id')) + + @region.cache_on_arguments(expiration_time=timedelta(days=1).total_seconds()) + def get_episodes(self, series_id): + r = self.session.get( + api_url, + params={ + 'request': 'anime', + 'client': self.api_client_key, + 'clientver': self.api_client_ver, + 'protover': 1, + 'aid': series_id + }, + timeout=10) + r.raise_for_status() + + xml_root = etree.fromstring(r.content) + + response_code = xml_root.attrib.get('code') + if response_code == '500': + raise HTTPError('AniDB API Abuse detected. Banned status.') + elif response_code == '302': + raise HTTPError('AniDB API Client error. Client is disabled or does not exists.') + + episode_elements = xml_root.find('episodes') + + if not episode_elements: + raise ValueError + + return etree.tostring(episode_elements, encoding='utf8', method='xml') + + +def refine_from_anidb(path, video): + if refined_providers.intersection(settings.general.enabled_providers) and video.series_anidb_id is None: + refine_anidb_ids(video) + + +def refine_anidb_ids(video): + if not isinstance(video, Episode) and not video.series_tvdb_id: + logging.debug(f'Video is not an Anime TV series, skipping refinement for {video}') + + return video + + anidb_client = AniDBClient(settings.anidb.api_client, settings.anidb.api_client_ver) + + season = video.season if video.season else 0 + + anidb_series_id, anidb_episode_id = anidb_client.get_series_episodes_ids(video.series_tvdb_id, season, video.episode) + + if not anidb_episode_id: + logging.error(f'Could not find anime series {video.series}') + + return video + + video.series_anidb_id = anidb_series_id + video.series_anidb_episode_id = anidb_episode_id diff --git a/custom_libs/subliminal/video.py b/custom_libs/subliminal/video.py index 1264d0b84..12aeba5f5 100644 --- a/custom_libs/subliminal/video.py +++ b/custom_libs/subliminal/video.py @@ -129,7 +129,8 @@ class Episode(Video): """ def __init__(self, name, series, season, episode, title=None, year=None, original_series=True, tvdb_id=None, - series_tvdb_id=None, series_imdb_id=None, alternative_series=None, **kwargs): + series_tvdb_id=None, series_imdb_id=None, alternative_series=None, series_anidb_id=None, + series_anidb_episode_id=None, **kwargs): super(Episode, self).__init__(name, **kwargs) #: Series of the episode @@ -162,6 +163,9 @@ class Episode(Video): #: Alternative names of the series self.alternative_series = alternative_series or [] + self.series_anidb_episode_id = series_anidb_episode_id + self.series_anidb_id = series_anidb_id + @classmethod def fromguess(cls, name, guess): if guess['type'] != 'episode': diff --git a/custom_libs/subliminal_patch/extensions.py b/custom_libs/subliminal_patch/extensions.py index eeb2ee4cb..800a1d547 100644 --- a/custom_libs/subliminal_patch/extensions.py +++ b/custom_libs/subliminal_patch/extensions.py @@ -64,4 +64,3 @@ subliminal.refiner_manager.register('drone = subliminal_patch.refiners.drone:ref subliminal.refiner_manager.register('filebot = subliminal_patch.refiners.filebot:refine') subliminal.refiner_manager.register('file_info_file = subliminal_patch.refiners.file_info_file:refine') subliminal.refiner_manager.register('symlinks = subliminal_patch.refiners.symlinks:refine') - diff --git a/custom_libs/subliminal_patch/providers/animetosho.py b/custom_libs/subliminal_patch/providers/animetosho.py new file mode 100644 index 000000000..d9c078503 --- /dev/null +++ b/custom_libs/subliminal_patch/providers/animetosho.py @@ -0,0 +1,164 @@ +# -*- coding: utf-8 -*- +from __future__ import absolute_import + +import logging +import lzma + +from guessit import guessit +from requests import Session +from subzero.language import Language + + +from subliminal.exceptions import ConfigurationError, ProviderError +from subliminal_patch.providers import Provider +from subliminal_patch.providers.mixins import ProviderSubtitleArchiveMixin +from subliminal_patch.subtitle import Subtitle, guess_matches +from subliminal.video import Episode + +try: + from lxml import etree +except ImportError: + try: + import xml.etree.cElementTree as etree + except ImportError: + import xml.etree.ElementTree as etree + +logger = logging.getLogger(__name__) + +# TODO: Test and Support Other Languages +supported_languages = [ + "eng", # English + "ita", # Italian +] + + +class AnimeToshoSubtitle(Subtitle): + """AnimeTosho.org Subtitle.""" + provider_name = 'animetosho' + + def __init__(self, language, download_link, meta): + super(AnimeToshoSubtitle, self).__init__(language, page_link=download_link) + self.meta = meta + self.download_link = download_link + + @property + def id(self): + return self.download_link + + def get_matches(self, video): + matches = set() + matches |= guess_matches(video, guessit(self.meta['filename'])) + + # Add these data are explicit extracted from the API and they always have to match otherwise they wouldn't + # arrive at this point and would stop on list_subtitles. + matches.update(['title', 'series', 'tvdb_id', 'season', 'episode']) + + return matches + + +class AnimeToshoProvider(Provider, ProviderSubtitleArchiveMixin): + """AnimeTosho.org Provider.""" + subtitle_class = AnimeToshoSubtitle + languages = {Language('por', 'BR')} | {Language(sl) for sl in supported_languages} + video_types = Episode + + def __init__(self, search_threshold=None): + self.session = None + + if not all([search_threshold]): + raise ConfigurationError("Search threshold, Api Client and Version must be specified!") + + self.search_threshold = search_threshold + + def initialize(self): + self.session = Session() + + def terminate(self): + self.session.close() + + def list_subtitles(self, video, languages): + if not video.series_anidb_episode_id: + raise ProviderError("Video does not have an AnimeTosho Episode ID!") + + return [s for s in self._get_series(video.series_anidb_episode_id) if s.language in languages] + + def download_subtitle(self, subtitle): + logger.info('Downloading subtitle %r', subtitle) + + r = self.session.get(subtitle.page_link, timeout=10) + r.raise_for_status() + + # Check if the bytes content starts with the xz magic number of the xz archives + if not self._is_xz_file(r.content): + raise ProviderError('Unidentified archive type') + + subtitle.content = lzma.decompress(r.content) + + return subtitle + + @staticmethod + def _is_xz_file(content): + return content.startswith(b'\xFD\x37\x7A\x58\x5A\x00') + + def _get_series(self, episode_id): + storage_download_url = 'https://animetosho.org/storage/attach/' + feed_api_url = 'https://feed.animetosho.org/json' + + subtitles = [] + + entries = self._get_series_entries(episode_id) + + for entry in entries: + r = self.session.get( + feed_api_url, + params={ + 'show': 'torrent', + 'id': entry['id'], + }, + timeout=10 + ) + r.raise_for_status() + + for file in r.json()['files']: + if 'attachments' not in file: + continue + + subtitle_files = list(filter(lambda f: f['type'] == 'subtitle', file['attachments'])) + + for subtitle_file in subtitle_files: + hex_id = format(subtitle_file['id'], '08x') + + subtitle = self.subtitle_class( + Language.fromalpha3b(subtitle_file['info']['lang']), + storage_download_url + '{}/{}.xz'.format(hex_id, subtitle_file['id']), + meta=file, + ) + + logger.debug('Found subtitle %r', subtitle) + + subtitles.append(subtitle) + + return subtitles + + def _get_series_entries(self, episode_id): + api_url = 'https://feed.animetosho.org/json' + + r = self.session.get( + api_url, + params={ + 'eid': episode_id, + }, + timeout=10 + ) + + r.raise_for_status() + + j = r.json() + + # Ignore records that are not yet ready or has been abandoned by AnimeTosho. + entries = list(filter(lambda t: t['status'] == 'complete', j))[:self.search_threshold] + + # Return the latest entries that have been added as it is used to cutoff via the user configuration threshold + entries.sort(key=lambda t: t['timestamp'], reverse=True) + + return entries diff --git a/custom_libs/subliminal_patch/video.py b/custom_libs/subliminal_patch/video.py index 0d613bb94..f5df0c92e 100644 --- a/custom_libs/subliminal_patch/video.py +++ b/custom_libs/subliminal_patch/video.py @@ -33,6 +33,8 @@ class Video(Video_): edition=None, other=None, info_url=None, + series_anidb_id=None, + series_anidb_episode_id=None, **kwargs ): super(Video, self).__init__( @@ -57,3 +59,5 @@ class Video(Video_): self.original_path = name self.other = other self.info_url = info_url + self.series_anidb_series_id = series_anidb_id, + self.series_anidb_episode_id = series_anidb_episode_id, diff --git a/frontend/src/pages/Settings/Providers/components.tsx b/frontend/src/pages/Settings/Providers/components.tsx index 87abe7571..91076d7de 100644 --- a/frontend/src/pages/Settings/Providers/components.tsx +++ b/frontend/src/pages/Settings/Providers/components.tsx @@ -39,14 +39,24 @@ import { } from "../utilities/FormValues"; import { SettingsProvider, useSettings } from "../utilities/SettingsProvider"; import { useSettingValue } from "../utilities/hooks"; -import { ProviderInfo, ProviderList } from "./list"; +import { ProviderInfo } from "./list"; -const ProviderKey = "settings-general-enabled_providers"; +type SettingsKey = + | "settings-general-enabled_providers" + | "settings-general-enabled_integrations"; -export const ProviderView: FunctionComponent = () => { +interface ProviderViewProps { + availableOptions: Readonly; + settingsKey: SettingsKey; +} + +export const ProviderView: FunctionComponent = ({ + availableOptions, + settingsKey, +}) => { const settings = useSettings(); const staged = useStagedValues(); - const providers = useSettingValue(ProviderKey); + const providers = useSettingValue(settingsKey); const { update } = useFormActions(); @@ -61,17 +71,27 @@ export const ProviderView: FunctionComponent = () => { staged, settings, onChange: update, + availableOptions: availableOptions, + settingsKey: settingsKey, }); } }, - [modals, providers, settings, staged, update], + [ + modals, + providers, + settings, + staged, + update, + availableOptions, + settingsKey, + ], ); const cards = useMemo(() => { if (providers) { return providers .flatMap((v) => { - const item = ProviderList.find((inn) => inn.key === v); + const item = availableOptions.find((inn) => inn.key === v); if (item) { return item; } else { @@ -89,7 +109,7 @@ export const ProviderView: FunctionComponent = () => { } else { return []; } - }, [providers, select]); + }, [providers, select, availableOptions]); return ( @@ -106,6 +126,8 @@ interface ProviderToolProps { staged: LooseObject; settings: Settings; onChange: (v: LooseObject) => void; + availableOptions: Readonly; + settingsKey: Readonly; } const SelectItem = forwardRef< @@ -126,6 +148,8 @@ const ProviderTool: FunctionComponent = ({ staged, settings, onChange, + availableOptions, + settingsKey, }) => { const modals = useModals(); @@ -147,11 +171,11 @@ const ProviderTool: FunctionComponent = ({ if (idx !== -1) { const newProviders = [...enabledProviders]; newProviders.splice(idx, 1); - onChangeRef.current({ [ProviderKey]: newProviders }); + onChangeRef.current({ [settingsKey]: newProviders }); modals.closeAll(); } } - }, [payload, enabledProviders, modals]); + }, [payload, enabledProviders, modals, settingsKey]); const submit = useCallback( (values: FormValues) => { @@ -161,8 +185,7 @@ const ProviderTool: FunctionComponent = ({ // Add this provider if not exist if (enabledProviders.find((v) => v === info.key) === undefined) { - const newProviders = [...enabledProviders, info.key]; - changes[ProviderKey] = newProviders; + changes[settingsKey] = [...enabledProviders, info.key]; } // Apply submit hooks @@ -172,7 +195,7 @@ const ProviderTool: FunctionComponent = ({ modals.closeAll(); } }, - [info, enabledProviders, modals], + [info, enabledProviders, modals, settingsKey], ); const canSave = info !== null; @@ -188,18 +211,18 @@ const ProviderTool: FunctionComponent = ({ } }, []); - const availableOptions = useMemo( + const options = useMemo( () => - ProviderList.filter( + availableOptions.filter( (v) => enabledProviders?.find((p) => p === v.key && p !== info?.key) === undefined, ), - [info?.key, enabledProviders], + [info?.key, enabledProviders, availableOptions], ); - const options = useSelectorOptions( - availableOptions, + const selectorOptions = useSelectorOptions( + options, (v) => v.name ?? capitalize(v.key), ); @@ -289,7 +312,7 @@ const ProviderTool: FunctionComponent = ({ placeholder="Click to Select a Provider" itemComponent={SelectItem} disabled={payload !== null} - {...options} + {...selectorOptions} value={info} onChange={onSelect} > diff --git a/frontend/src/pages/Settings/Providers/index.tsx b/frontend/src/pages/Settings/Providers/index.tsx index bd8b648ff..ce855c4ee 100644 --- a/frontend/src/pages/Settings/Providers/index.tsx +++ b/frontend/src/pages/Settings/Providers/index.tsx @@ -11,12 +11,16 @@ import { Text, } from "../components"; import { ProviderView } from "./components"; +import { IntegrationList, ProviderList } from "./list"; const SettingsProvidersView: FunctionComponent = () => { return (
- +
{ Link to subscribe
+
+ +
); }; diff --git a/frontend/src/pages/Settings/Providers/list.ts b/frontend/src/pages/Settings/Providers/list.ts index 967526187..eff9ea4e9 100644 --- a/frontend/src/pages/Settings/Providers/list.ts +++ b/frontend/src/pages/Settings/Providers/list.ts @@ -64,6 +64,20 @@ export const ProviderList: Readonly = [ }, ], }, + { + key: "animetosho", + name: "Anime Tosho", + description: + "Anime Tosho is a free, completely automated service which mirrors most torrents posted on TokyoTosho's anime category, Nyaa.si's English translated anime category and AniDex's anime category.", + inputs: [ + { + type: "text", + key: "search_threshold", + defaultValue: 6, + name: "Search Threshold. Increase if you often cannot find subtitles for your Anime. Note that increasing the value will decrease the performance of the search for each Episode.", + }, + ], + }, { key: "argenteam_dump", name: "Argenteam Dump", @@ -538,3 +552,24 @@ export const ProviderList: Readonly = [ description: "Chinese Subtitles Provider. Anti-captcha required.", }, ]; + +export const IntegrationList: Readonly = [ + { + key: "anidb", + name: "AniDB", + description: + "AniDB is non-profit database of anime information that is freely open to the public.", + inputs: [ + { + type: "text", + key: "api_client", + name: "API Client", + }, + { + type: "text", + key: "api_client_ver", + name: "API Client Version", + }, + ], + }, +]; diff --git a/tests/conftest.py b/tests/conftest.py index 46d8fc4a0..c7fbdea07 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -7,7 +7,7 @@ import pkg_resources sys.path.insert(0, os.path.join(os.path.dirname(__file__), "../libs/")) sys.path.insert(0, os.path.join(os.path.dirname(__file__), "../bazarr/")) - +sys.path.insert(0, os.path.join(os.path.dirname(__file__), "../custom_libs/")) def pytest_report_header(config): conflicting_packages = _get_conflicting("libs") diff --git a/tests/subliminal_patch/data/animetosho_episode_response.json b/tests/subliminal_patch/data/animetosho_episode_response.json new file mode 100644 index 000000000..3f7a898d3 --- /dev/null +++ b/tests/subliminal_patch/data/animetosho_episode_response.json @@ -0,0 +1,756 @@ +[ + { + "id": 608526, + "title": "[EMBER] Ore dake Level Up na Ken S01E12 [1080p] [HEVC WEBRip] (Solo Leveling)", + "link": "https://animetosho.org/view/ember-ore-dake-level-up-na-ken-s01e12.n1796835", + "timestamp": 1711853493, + "status": "complete", + "tosho_id": null, + "nyaa_id": 1796835, + "nyaa_subdom": null, + "anidex_id": null, + "torrent_url": "https://animetosho.org/storage/torrent/f9670720a5142ec31aa8e3715745f1392e3ffd5b/%5BEMBER%5D%20Solo%20Leveling%20-%2012.torrent", + "torrent_name": "[EMBER] Solo Leveling - 12.mkv", + "info_hash": "f9670720a5142ec31aa8e3715745f1392e3ffd5b", + "info_hash_v2": null, + "magnet_uri": "magnet:?xt=urn:btih:7FTQOIFFCQXMGGVI4NYVORPRHEXD77K3&tr=http%3A%2F%2Fnyaa.tracker.wf%3A7777%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Fexodus.desync.com%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce&dn=%5BEMBER%5D%20Ore%20dake%20Level%20Up%20na%20Ken%20S01E12%20%5B1080p%5D%20%5BHEVC%20WEBRip%5D%20%28Solo%20Leveling%29", + "seeders": 316, + "leechers": 24, + "torrent_downloaded_count": 1164, + "tracker_updated": 1711872554, + "nzb_url": "https://animetosho.org/storage/nzbs/0009490e/%5BEMBER%5D%20Solo%20Leveling%20-%2012.nzb", + "total_size": 369572311, + "num_files": 1, + "anidb_aid": 17495, + "anidb_eid": 277518, + "anidb_fid": null, + "article_url": null, + "article_title": null, + "website_url": null + }, + { + "id": 608516, + "title": "[Anime Time] Solo Leveling - 12 [1080p][HEVC 10bit x265][AAC][Multi Sub] [Weekly] Ore dake Level Up na Ken", + "link": "https://animetosho.org/view/anime-time-solo-leveling-12-1080p-hevc-10bit.n1796824", + "timestamp": 1711851382, + "status": "complete", + "tosho_id": null, + "nyaa_id": 1796824, + "nyaa_subdom": null, + "anidex_id": null, + "torrent_url": "https://animetosho.org/storage/torrent/db16234b7aba70d2d901bde30fb0aa899589da47/%5BAnime%20Time%5D%20Solo%20Leveling%20-%2012%20%5B1080p%5D%5BHEVC%2010bit%20x265%5D%5BAAC%5D%5BMulti%20Sub%5D.torrent", + "torrent_name": "[Anime Time] Solo Leveling - 12 [1080p][HEVC 10bit x265][AAC][Multi Sub].mkv", + "info_hash": "db16234b7aba70d2d901bde30fb0aa899589da47", + "info_hash_v2": null, + "magnet_uri": "magnet:?xt=urn:btih:3MLCGS32XJYNFWIBXXRQ7MFKRGKYTWSH&tr=http%3A%2F%2Fnyaa.tracker.wf%3A7777%2Fannounce&tr=http%3A%2F%2Fanidex.moe%3A6969%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Fexodus.desync.com%3A6969%2Fannounce&dn=%5BAnime%20Time%5D%20Solo%20Leveling%20-%2012%20%5B1080p%5D%5BHEVC%2010bit%20x265%5D%5BAAC%5D%5BMulti%20Sub%5D%20%5BWeekly%5D%20Ore%20dake%20Level%20Up%20na%20Ken", + "seeders": 85, + "leechers": 11, + "torrent_downloaded_count": 436, + "tracker_updated": 1711892085, + "nzb_url": "https://animetosho.org/storage/nzbs/00094904/%5BAnime%20Time%5D%20Solo%20Leveling%20-%2012%20%5B1080p%5D%5BHEVC%2010bit%20x265%5D%5BAAC%5D%5BMulti%20Sub%5D.nzb", + "total_size": 588022366, + "num_files": 1, + "anidb_aid": 17495, + "anidb_eid": 277518, + "anidb_fid": null, + "article_url": null, + "article_title": null, + "website_url": "http://animetime.cc/" + }, + { + "id": 608491, + "title": "Solo Leveling - 12 (WEB 4K | 2160p AV1 AAC).mkv", + "link": "https://animetosho.org/view/solo-leveling-12-web-4k-2160p-av1-aac-mkv.d595164", + "timestamp": 1711845852, + "status": "complete", + "tosho_id": null, + "nyaa_id": null, + "nyaa_subdom": null, + "anidex_id": 595164, + "torrent_url": "https://animetosho.org/storage/torrent/cfc631026a1837ef70ff6993aa9c1b1304e0d75b/Solo%20Leveling%20-%2012%20%28WEB%204K%20AV1%20AAC%29.torrent", + "torrent_name": "Solo Leveling - 12 (WEB 4K AV1 AAC).mkv", + "info_hash": "cfc631026a1837ef70ff6993aa9c1b1304e0d75b", + "info_hash_v2": null, + "magnet_uri": "magnet:?xt=urn:btih:Z7DDCATKDA3664H7NGJ2VHA3CMCOBV23&tr=http%3A%2F%2Fanidex.moe%3A6969%2Fannounce&tr=http%3A%2F%2Fnyaa.tracker.wf%3A7777%2Fannounce&tr=http%3A%2F%2Ftracker.anirena.com%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker-udp.anirena.com%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&dn=Solo%20Leveling%20-%2012%20%28WEB%204K%20%7C%202160p%20AV1%20AAC%29.mkv", + "seeders": 11, + "leechers": 0, + "torrent_downloaded_count": 118, + "tracker_updated": 1712027991, + "nzb_url": "https://animetosho.org/storage/nzbs/000948eb/Solo%20Leveling%20-%2012%20%28WEB%204K%20AV1%20AAC%29.nzb", + "total_size": 586875995, + "num_files": 1, + "anidb_aid": 17495, + "anidb_eid": 277518, + "anidb_fid": null, + "article_url": null, + "article_title": null, + "website_url": null + }, + { + "id": 608439, + "title": "[SanKyuu] Ore dake Level Up na Ken (Solo Leveling) - 12 [WEB 1080p][AV1][AAC E-AC3][Multi-Sub]", + "link": "https://animetosho.org/view/sankyuu-ore-dake-level-up-na-ken-solo.n1796722", + "timestamp": 1711836670, + "status": "complete", + "tosho_id": null, + "nyaa_id": 1796722, + "nyaa_subdom": null, + "anidex_id": null, + "torrent_url": "https://animetosho.org/storage/torrent/fb8193f9da38b06a444e2a50966c3fbefdb7dcde/%5BSanKyuu%5D%20Ore%20dake%20Level%20Up%20na%20Ken%20%28Solo%20Leveling%29%20-%2012%20%5BWEB%201080p%20AV1%20AAC%20E-AC3%5D%20%5B325A372A%5D.torrent", + "torrent_name": "[SanKyuu] Ore dake Level Up na Ken (Solo Leveling) - 12 [WEB 1080p AV1 AAC E-AC3] [325A372A].mkv", + "info_hash": "fb8193f9da38b06a444e2a50966c3fbefdb7dcde", + "info_hash_v2": null, + "magnet_uri": "magnet:?xt=urn:btih:7OAZH6O2HCYGURCOFJIJM3B7X363PXG6&tr=http%3A%2F%2Fnyaa.tracker.wf%3A7777%2Fannounce&tr=http%3A%2F%2Fanidex.moe%3A6969%2Fannounce&tr=http%3A%2F%2Ftracker.anirena.com%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker-udp.anirena.com%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&dn=%5BSanKyuu%5D%20Ore%20dake%20Level%20Up%20na%20Ken%20%28Solo%20Leveling%29%20-%2012%20%5BWEB%201080p%5D%5BAV1%5D%5BAAC%20E-AC3%5D%5BMulti-Sub%5D", + "seeders": 51, + "leechers": 2, + "torrent_downloaded_count": 522, + "tracker_updated": 1711939563, + "nzb_url": "https://animetosho.org/storage/nzbs/000948b7/%5BSanKyuu%5D%20Ore%20dake%20Level%20Up%20na%20Ken%20%28Solo%20Leveling%29%20-%2012%20%5BWEB%201080p%20AV1%20AAC%20E-AC3%5D%20%5B325A372A%5D.nzb", + "total_size": 477160034, + "num_files": 1, + "anidb_aid": 17495, + "anidb_eid": 277518, + "anidb_fid": null, + "article_url": null, + "article_title": null, + "website_url": null + }, + { + "id": 608407, + "title": "[NeoLX] Solo Leveling - S01E12 [END][1080p x264 10bits AAC][Multiple Subtitles].mkv", + "link": "https://animetosho.org/view/neolx-solo-leveling-s01e12-end-1080p-x264-10bits.1859288", + "timestamp": 1711831500, + "status": "complete", + "tosho_id": 1859288, + "nyaa_id": null, + "nyaa_subdom": null, + "anidex_id": null, + "torrent_url": "https://animetosho.org/storage/torrent/4a053ad27c1ca38db68b77f1a81860948bec93cb/%5BNeoLX%5D%20Solo%20Leveling%20-%20S01E12%20%5BEND%5D%5B1080p%20x264%2010bits%20AAC%5D%5BMultiple%20Subtitles%5D.torrent", + "torrent_name": "[NeoLX] Solo Leveling - S01E12 [END][1080p x264 10bits AAC][Multiple Subtitles].mkv", + "info_hash": "4a053ad27c1ca38db68b77f1a81860948bec93cb", + "info_hash_v2": null, + "magnet_uri": "magnet:?xt=urn:btih:JICTVUT4DSRY3NULO7Y2QGDASSF6ZE6L&tr=http%3A%2F%2Fanidex.moe%3A6969%2Fannounce&tr=http%3A%2F%2Ftracker.anirena.com%3A80%2Fannounce&tr=http%3A%2F%2Ftracker.acgnx.se%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.tiny-vps.com%3A6969%2Fannounce&dn=%5BNeoLX%5D%20Solo%20Leveling%20-%20S01E12%20%5BEND%5D%5B1080p%20x264%2010bits%20AAC%5D%5BMultiple%20Subtitles%5D.mkv", + "seeders": 22, + "leechers": 0, + "torrent_downloaded_count": 444, + "tracker_updated": 1712027991, + "nzb_url": "https://animetosho.org/storage/nzbs/00094897/%5BNeoLX%5D%20Solo%20Leveling%20-%20S01E12%20%5BEND%5D%5B1080p%20x264%2010bits%20AAC%5D%5BMultiple%20Subtitles%5D.nzb", + "total_size": 1775949490, + "num_files": 1, + "anidb_aid": 17495, + "anidb_eid": 277518, + "anidb_fid": null, + "article_url": null, + "article_title": null, + "website_url": null + }, + { + "id": 608385, + "title": "[CameEsp] Solo Leveling - 12 [1080p][ESP-ENG][mkv].mkv", + "link": "https://animetosho.org/view/cameesp-solo-leveling-12-1080p-esp-eng-mkv-mkv.1859281", + "timestamp": 1711829220, + "status": "skipped", + "tosho_id": 1859281, + "nyaa_id": 1796635, + "nyaa_subdom": null, + "anidex_id": null, + "torrent_url": "https://animetosho.org/storage/torrent/7e683310c0a03a8d94ad4a1aaac0b7f97d98e70e/%5BCameEsp%5D%20Solo%20Leveling%20-%2012%20%5B1080p%5D%5BESP-ENG%5D%5Bmkv%5D.torrent", + "torrent_name": "", + "info_hash": "7e683310c0a03a8d94ad4a1aaac0b7f97d98e70e", + "info_hash_v2": null, + "magnet_uri": "magnet:?xt=urn:btih:PZUDGEGAUA5I3FFNJINKVQFX7F6ZRZYO&tr=http%3A%2F%2Fnyaa.tracker.wf%3A7777%2Fannounce&tr=http%3A%2F%2Fanidex.moe%3A6969%2Fannounce&tr=http%3A%2F%2Ftracker.anirena.com%3A80%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&dn=%5BCameEsp%5D%20Solo%20Leveling%20-%2012%20%5B1080p%5D%5BESP-ENG%5D%5Bmkv%5D.mkv", + "seeders": 178, + "leechers": 21, + "torrent_downloaded_count": 541, + "tracker_updated": null, + "nzb_url": null, + "total_size": 1448914325, + "num_files": 1, + "anidb_aid": 17495, + "anidb_eid": 277518, + "anidb_fid": null, + "article_url": null, + "article_title": null, + "website_url": "https://linkr.bio/CAME_CameEsp" + }, + { + "id": 608386, + "title": "[CameEsp] Solo Leveling - 12 [720p][ESP-ENG][mkv].mkv", + "link": "https://animetosho.org/view/cameesp-solo-leveling-12-720p-esp-eng-mkv-mkv.1859282", + "timestamp": 1711829220, + "status": "skipped", + "tosho_id": 1859282, + "nyaa_id": 1796636, + "nyaa_subdom": null, + "anidex_id": null, + "torrent_url": "https://animetosho.org/storage/torrent/3b35bdf9880489b38f7a318cca8fe02ff31e430c/%5BCameEsp%5D%20Solo%20Leveling%20-%2012%20%5B720p%5D%5BESP-ENG%5D%5Bmkv%5D.torrent", + "torrent_name": "", + "info_hash": "3b35bdf9880489b38f7a318cca8fe02ff31e430c", + "info_hash_v2": null, + "magnet_uri": "magnet:?xt=urn:btih:HM2336MIASE3HD32GGGMVD7AF7ZR4QYM&tr=http%3A%2F%2Fnyaa.tracker.wf%3A7777%2Fannounce&tr=http%3A%2F%2Fanidex.moe%3A6969%2Fannounce&tr=http%3A%2F%2Ftracker.anirena.com%3A80%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&dn=%5BCameEsp%5D%20Solo%20Leveling%20-%2012%20%5B720p%5D%5BESP-ENG%5D%5Bmkv%5D.mkv", + "seeders": 35, + "leechers": 10, + "torrent_downloaded_count": 160, + "tracker_updated": null, + "nzb_url": null, + "total_size": 737663624, + "num_files": 1, + "anidb_aid": 17495, + "anidb_eid": 277518, + "anidb_fid": null, + "article_url": null, + "article_title": null, + "website_url": "https://linkr.bio/CAME_CameEsp" + }, + { + "id": 608370, + "title": "[Valenciano] Ore dake Level Up na Ken - 12 [1080p][AV1 10bit][AAC][Multi-Sub] (Weekly).mkv", + "link": "https://animetosho.org/view/valenciano-ore-dake-level-up-na-ken-12.n1796530", + "timestamp": 1711826614, + "status": "complete", + "tosho_id": null, + "nyaa_id": 1796530, + "nyaa_subdom": null, + "anidex_id": null, + "torrent_url": "https://animetosho.org/storage/torrent/f89a9ffa23f5fc3321f3e2c476dbccbf0435fc98/%5BValenciano%5D%20Ore%20dake%20Level%20Up%20na%20Ken%20-%2012%20%5B1080p%5D%5BAV1%2010bit%5D%5BAAC%5D%5BMulti-Sub%5D%20%28Weekly%29.torrent", + "torrent_name": "[Valenciano] Ore dake Level Up na Ken - 12 [1080p][AV1 10bit][AAC][Multi-Sub] (Weekly).mkv", + "info_hash": "f89a9ffa23f5fc3321f3e2c476dbccbf0435fc98", + "info_hash_v2": null, + "magnet_uri": "magnet:?xt=urn:btih:7CNJ76RD6X6DGIPT4LCHNW6MX4CDL7EY&tr=http%3A%2F%2Fnyaa.tracker.wf%3A7777%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Fexodus.desync.com%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce&dn=%5BValenciano%5D%20Ore%20dake%20Level%20Up%20na%20Ken%20-%2012%20%5B1080p%5D%5BAV1%2010bit%5D%5BAAC%5D%5BMulti-Sub%5D%20%28Weekly%29.mkv", + "seeders": 22, + "leechers": 2, + "torrent_downloaded_count": 240, + "tracker_updated": 1711940503, + "nzb_url": "https://animetosho.org/storage/nzbs/00094872/%5BValenciano%5D%20Ore%20dake%20Level%20Up%20na%20Ken%20-%2012%20%5B1080p%5D%5BAV1%2010bit%5D%5BAAC%5D%5BMulti-Sub%5D%20%28Weekly%29.nzb", + "total_size": 427930434, + "num_files": 1, + "anidb_aid": 17495, + "anidb_eid": 277518, + "anidb_fid": null, + "article_url": null, + "article_title": null, + "website_url": "https://discord.gg/83dRFDFDp7" + }, + { + "id": 608368, + "title": "[Erai-raws] Ore dake Level Up na Ken - 12 [1080p][HEVC][Multiple Subtitle] [ENG][POR-BR][SPA-LA][SPA][ARA][FRE][GER][ITA][RUS]", + "link": "https://animetosho.org/view/erai-raws-ore-dake-level-up-na-ken.n1796524", + "timestamp": 1711825169, + "status": "complete", + "tosho_id": null, + "nyaa_id": 1796524, + "nyaa_subdom": null, + "anidex_id": null, + "torrent_url": "https://animetosho.org/storage/torrent/8009ee0e9b20732f44df9bf5eaef926df0814d68/%5BErai-raws%5D%20Ore%20dake%20Level%20Up%20na%20Ken%20-%2012%20%5B1080p%5D%5BHEVC%5D%5BMultiple%20Subtitle%5D%5BB46F650F%5D.torrent", + "torrent_name": "[Erai-raws] Ore dake Level Up na Ken - 12 [1080p][HEVC][Multiple Subtitle][B46F650F].mkv", + "info_hash": "8009ee0e9b20732f44df9bf5eaef926df0814d68", + "info_hash_v2": null, + "magnet_uri": "magnet:?xt=urn:btih:QAE64DU3EBZS6RG7TP26V34SNXYICTLI&tr=http%3A%2F%2Fnyaa.tracker.wf%3A7777%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=http%3A%2F%2Fopen.acgnxtracker.com%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce&dn=%5BErai-raws%5D%20Ore%20dake%20Level%20Up%20na%20Ken%20-%2012%20%5B1080p%5D%5BHEVC%5D%5BMultiple%20Subtitle%5D%20%5BENG%5D%5BPOR-BR%5D%5BSPA-LA%5D%5BSPA%5D%5BARA%5D%5BFRE%5D%5BGER%5D%5BITA%5D%5BRUS%5D", + "seeders": 298, + "leechers": 12, + "torrent_downloaded_count": 2398, + "tracker_updated": 1711933623, + "nzb_url": "https://animetosho.org/storage/nzbs/00094870/%5BErai-raws%5D%20Ore%20dake%20Level%20Up%20na%20Ken%20-%2012%20%5B1080p%5D%5BHEVC%5D%5BMultiple%20Subtitle%5D%5BB46F650F%5D.nzb", + "total_size": 1073028408, + "num_files": 1, + "anidb_aid": 17495, + "anidb_eid": 277518, + "anidb_fid": 3399105, + "article_url": null, + "article_title": null, + "website_url": "https://www.erai-raws.info/anime-list/ore-dake-level-up-na-ken/" + }, + { + "id": 608349, + "title": "[DKB] Solo Leveling - S01E12 [1080p][END][HEVC x265 10bit][Multi-Subs][weekly]", + "link": "https://animetosho.org/view/dkb-solo-leveling-s01e12-1080p-end-hevc-x265.n1796502", + "timestamp": 1711823055, + "status": "complete", + "tosho_id": null, + "nyaa_id": 1796502, + "nyaa_subdom": null, + "anidex_id": null, + "torrent_url": "https://animetosho.org/storage/torrent/d89e1a3b415c0b569481b06dbbe58d936f2e6f0a/%5BDKB%5D%20Solo%20Leveling%20-%20S01E12%20%5B1080p%5D%5BEND%5D%5BHEVC%20x265%2010bit%5D%5BMulti-Subs%5D.torrent", + "torrent_name": "[DKB] Solo Leveling - S01E12 [1080p][END][HEVC x265 10bit][Multi-Subs].mkv", + "info_hash": "d89e1a3b415c0b569481b06dbbe58d936f2e6f0a", + "info_hash_v2": null, + "magnet_uri": "magnet:?xt=urn:btih:3CPBUO2BLQFVNFEBWBW3XZMNSNXS43YK&tr=http%3A%2F%2Fnyaa.tracker.wf%3A7777%2Fannounce&tr=http%3A%2F%2Fanidex.moe%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.internetwarriors.net%3A1337%2Fannounce&dn=%5BDKB%5D%20Solo%20Leveling%20-%20S01E12%20%5B1080p%5D%5BEND%5D%5BHEVC%20x265%2010bit%5D%5BMulti-Subs%5D%5Bweekly%5D", + "seeders": 153, + "leechers": 9, + "torrent_downloaded_count": 1010, + "tracker_updated": 1711922054, + "nzb_url": "https://animetosho.org/storage/nzbs/0009485d/%5BDKB%5D%20Solo%20Leveling%20-%20S01E12%20%5B1080p%5D%5BEND%5D%5BHEVC%20x265%2010bit%5D%5BMulti-Subs%5D.nzb", + "total_size": 665460303, + "num_files": 1, + "anidb_aid": 17495, + "anidb_eid": 277518, + "anidb_fid": 3399329, + "article_url": null, + "article_title": null, + "website_url": "https://discord.gg/ZBQCQ7u" + }, + { + "id": 608347, + "title": "[ASW] Solo Leveling - 12 [1080p HEVC x265 10Bit][AAC]", + "link": "https://animetosho.org/view/asw-solo-leveling-12-1080p-hevc-x265-10bit-aac.n1796496", + "timestamp": 1711822239, + "status": "complete", + "tosho_id": null, + "nyaa_id": 1796496, + "nyaa_subdom": null, + "anidex_id": null, + "torrent_url": "https://animetosho.org/storage/torrent/78d41db42271123d520f971b71a67d970cfdb64c/%5BASW%5D%20Solo%20Leveling%20-%2012%20%5B1080p%20HEVC%5D%5BE1A01A3E%5D.torrent", + "torrent_name": "[ASW] Solo Leveling - 12 [1080p HEVC][E1A01A3E].mkv", + "info_hash": "78d41db42271123d520f971b71a67d970cfdb64c", + "info_hash_v2": null, + "magnet_uri": "magnet:?xt=urn:btih:PDKB3NBCOEJD2UQPS4NXDJT5S4GP3NSM&tr=http%3A%2F%2Fnyaa.tracker.wf%3A7777%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Fexodus.desync.com%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce&dn=%5BASW%5D%20Solo%20Leveling%20-%2012%20%5B1080p%20HEVC%20x265%2010Bit%5D%5BAAC%5D", + "seeders": 689, + "leechers": 212, + "torrent_downloaded_count": 1960, + "tracker_updated": null, + "nzb_url": "https://animetosho.org/storage/nzbs/0009485b/%5BASW%5D%20Solo%20Leveling%20-%2012%20%5B1080p%20HEVC%5D%5BE1A01A3E%5D.nzb", + "total_size": 455351405, + "num_files": 1, + "anidb_aid": 17495, + "anidb_eid": 277518, + "anidb_fid": 3399037, + "article_url": null, + "article_title": null, + "website_url": "https://discord.gg/6XnYdWP" + }, + { + "id": 608346, + "title": "[Tenrai-Sensei] Solo Leveling - S01E12 - Arise [Web][1080p][HEVC 10bit x265] Ore dake Level Up na Ken", + "link": "https://animetosho.org/view/tenrai-sensei-solo-leveling-s01e12-arise-web-1080p.n1796495", + "timestamp": 1711822029, + "status": "complete", + "tosho_id": null, + "nyaa_id": 1796495, + "nyaa_subdom": null, + "anidex_id": null, + "torrent_url": "https://animetosho.org/storage/torrent/8b22acf6c18e9ac56f0af00a6061918712d8d992/Solo%20Leveling%20-%20S01E12%20-%20Arise.torrent", + "torrent_name": "Solo Leveling - S01E12 - Arise.mkv", + "info_hash": "8b22acf6c18e9ac56f0af00a6061918712d8d992", + "info_hash_v2": null, + "magnet_uri": "magnet:?xt=urn:btih:RMRKZ5WBR2NMK3YK6AFGAYMRQ4JNRWMS&tr=http%3A%2F%2Fnyaa.tracker.wf%3A7777%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Fexodus.desync.com%3A6969%2Fannounce&tr=udp%3A%2F%2Fopentracker.i2p.rocks%3A6969%2Fannounce&dn=%5BTenrai-Sensei%5D%20Solo%20Leveling%20-%20S01E12%20-%20Arise%20%5BWeb%5D%5B1080p%5D%5BHEVC%2010bit%20x265%5D%20Ore%20dake%20Level%20Up%20na%20Ken", + "seeders": 1000000000, + "leechers": 1000000000, + "torrent_downloaded_count": 3028, + "tracker_updated": null, + "nzb_url": "https://animetosho.org/storage/nzbs/0009485a/Solo%20Leveling%20-%20S01E12%20-%20Arise.nzb", + "total_size": 574082022, + "num_files": 1, + "anidb_aid": 17495, + "anidb_eid": 277518, + "anidb_fid": 3399753, + "article_url": null, + "article_title": null, + "website_url": "https://discord.gg/WucPeE5ume" + }, + { + "id": 608339, + "title": "[Judas] Ore dake Level Up na Ken (Solo Leveling) - S01E12 [1080p][HEVC x265 10bit][Multi-Subs] (Weekly)", + "link": "https://animetosho.org/view/judas-ore-dake-level-up-na-ken-solo.n1796483", + "timestamp": 1711821551, + "status": "complete", + "tosho_id": null, + "nyaa_id": 1796483, + "nyaa_subdom": null, + "anidex_id": null, + "torrent_url": "https://animetosho.org/storage/torrent/aa0f1690f5bff99891883dbbde61e4c59920aa5e/%5BJudas%5D%20Solo%20Leveling%20-%20S01E12.torrent", + "torrent_name": "[Judas] Solo Leveling - S01E12.mkv", + "info_hash": "aa0f1690f5bff99891883dbbde61e4c59920aa5e", + "info_hash_v2": null, + "magnet_uri": "magnet:?xt=urn:btih:VIHRNEHVX74ZREMIHW554YPEYWMSBKS6&tr=http%3A%2F%2Fnyaa.tracker.wf%3A7777%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Fexodus.desync.com%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce&dn=%5BJudas%5D%20Ore%20dake%20Level%20Up%20na%20Ken%20%28Solo%20Leveling%29%20-%20S01E12%20%5B1080p%5D%5BHEVC%20x265%2010bit%5D%5BMulti-Subs%5D%20%28Weekly%29", + "seeders": 422, + "leechers": 20, + "torrent_downloaded_count": 3434, + "tracker_updated": 1711874024, + "nzb_url": "https://animetosho.org/storage/nzbs/00094853/%5BJudas%5D%20Solo%20Leveling%20-%20S01E12.nzb", + "total_size": 485334036, + "num_files": 1, + "anidb_aid": 17495, + "anidb_eid": 277518, + "anidb_fid": 3399248, + "article_url": null, + "article_title": null, + "website_url": "https://discord.gg/vbJ7RTn" + }, + { + "id": 608338, + "title": "[Raze] Solo Leveling (Ore dake Level Up na Ken) - 12 x265 10bit 1080p 143.8561fps.mkv", + "link": "https://animetosho.org/view/raze-solo-leveling-ore-dake-level-up-na.n1796482", + "timestamp": 1711821474, + "status": "complete", + "tosho_id": null, + "nyaa_id": 1796482, + "nyaa_subdom": null, + "anidex_id": null, + "torrent_url": "https://animetosho.org/storage/torrent/bcebcb468c1a2557404afa18f4948cb4fded5c17/%5BRaze%5D%20Solo%20Leveling%20%28Ore%20dake%20Level%20Up%20na%20Ken%29%20-%2012%20x265%2010bit%201080p%20143.8561fps.torrent", + "torrent_name": "[Raze] Solo Leveling (Ore dake Level Up na Ken) - 12 x265 10bit 1080p 143.8561fps.mkv", + "info_hash": "bcebcb468c1a2557404afa18f4948cb4fded5c17", + "info_hash_v2": null, + "magnet_uri": "magnet:?xt=urn:btih:XTV4WRUMDISVOQCK7IMPJFEMWT662XAX&tr=http%3A%2F%2Fnyaa.tracker.wf%3A7777%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Fexodus.desync.com%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce&dn=%5BRaze%5D%20Solo%20Leveling%20%28Ore%20dake%20Level%20Up%20na%20Ken%29%20-%2012%20x265%2010bit%201080p%20143.8561fps.mkv", + "seeders": 15, + "leechers": 1, + "torrent_downloaded_count": 216, + "tracker_updated": 1711932770, + "nzb_url": "https://animetosho.org/storage/nzbs/00094852/%5BRaze%5D%20Solo%20Leveling%20%28Ore%20dake%20Level%20Up%20na%20Ken%29%20-%2012%20x265%2010bit%201080p%20143.8561fps.nzb", + "total_size": 987255128, + "num_files": 1, + "anidb_aid": 17495, + "anidb_eid": 277518, + "anidb_fid": null, + "article_url": null, + "article_title": null, + "website_url": "https://discord.gg/72ZKssY" + }, + { + "id": 608324, + "title": "Ore dake Level Up na Ken - S01E12 - 720p WEB x264 -NanDesuKa (CR).mkv", + "link": "https://animetosho.org/view/ore-dake-level-up-na-ken-s01e12-720p.n1796469", + "timestamp": 1711817371, + "status": "complete", + "tosho_id": null, + "nyaa_id": 1796469, + "nyaa_subdom": null, + "anidex_id": null, + "torrent_url": "https://animetosho.org/storage/torrent/514d25bbb699f0cd50ba82663f4d9972e42aec7e/Ore%20dake%20Level%20Up%20na%20Ken%20-%20S01E12%20-%20720p%20WEB%20x264%20-NanDesuKa%20%28CR%29.torrent", + "torrent_name": "Ore dake Level Up na Ken - S01E12 - 720p WEB x264 -NanDesuKa (CR).mkv", + "info_hash": "514d25bbb699f0cd50ba82663f4d9972e42aec7e", + "info_hash_v2": null, + "magnet_uri": "magnet:?xt=urn:btih:KFGSLO5WTHYM2UF2QJTD6TMZOLSCV3D6&tr=http%3A%2F%2Fnyaa.tracker.wf%3A7777%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.internetwarriors.net%3A1337%2Fannounce&tr=udp%3A%2F%2Fexodus.desync.com%3A6969%2Fannounce&dn=Ore%20dake%20Level%20Up%20na%20Ken%20-%20S01E12%20-%20720p%20WEB%20x264%20-NanDesuKa%20%28CR%29.mkv", + "seeders": 24, + "leechers": 1, + "torrent_downloaded_count": 147, + "tracker_updated": 1711941873, + "nzb_url": "https://animetosho.org/storage/nzbs/00094844/Ore%20dake%20Level%20Up%20na%20Ken%20-%20S01E12%20-%20720p%20WEB%20x264%20-NanDesuKa%20%28CR%29.nzb", + "total_size": 733563952, + "num_files": 1, + "anidb_aid": 17495, + "anidb_eid": 277518, + "anidb_fid": null, + "article_url": null, + "article_title": null, + "website_url": null + }, + { + "id": 608323, + "title": "Ore dake Level Up na Ken - S01E12 - 1080p WEB x264 -NanDesuKa (CR).mkv", + "link": "https://animetosho.org/view/ore-dake-level-up-na-ken-s01e12-1080p.n1796468", + "timestamp": 1711817278, + "status": "complete", + "tosho_id": null, + "nyaa_id": 1796468, + "nyaa_subdom": null, + "anidex_id": null, + "torrent_url": "https://animetosho.org/storage/torrent/2368c8599cb9dfcd15c4133c195a026c0c061452/Ore%20dake%20Level%20Up%20na%20Ken%20-%20S01E12%20-%201080p%20WEB%20x264%20-NanDesuKa%20%28CR%29.torrent", + "torrent_name": "Ore dake Level Up na Ken - S01E12 - 1080p WEB x264 -NanDesuKa (CR).mkv", + "info_hash": "2368c8599cb9dfcd15c4133c195a026c0c061452", + "info_hash_v2": null, + "magnet_uri": "magnet:?xt=urn:btih:ENUMQWM4XHP42FOECM6BSWQCNQGAMFCS&tr=http%3A%2F%2Fnyaa.tracker.wf%3A7777%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.internetwarriors.net%3A1337%2Fannounce&tr=udp%3A%2F%2Fexodus.desync.com%3A6969%2Fannounce&dn=Ore%20dake%20Level%20Up%20na%20Ken%20-%20S01E12%20-%201080p%20WEB%20x264%20-NanDesuKa%20%28CR%29.mkv", + "seeders": 43, + "leechers": 1, + "torrent_downloaded_count": 325, + "tracker_updated": 1711950739, + "nzb_url": "https://animetosho.org/storage/nzbs/00094843/Ore%20dake%20Level%20Up%20na%20Ken%20-%20S01E12%20-%201080p%20WEB%20x264%20-NanDesuKa%20%28CR%29.nzb", + "total_size": 1444814636, + "num_files": 1, + "anidb_aid": 17495, + "anidb_eid": 277518, + "anidb_fid": null, + "article_url": null, + "article_title": null, + "website_url": null + }, + { + "id": 608322, + "title": "Ore dake Level Up na Ken - S01E12 - 480p WEB x264 -NanDesuKa (CR).mkv", + "link": "https://animetosho.org/view/ore-dake-level-up-na-ken-s01e12-480p.n1796467", + "timestamp": 1711817275, + "status": "complete", + "tosho_id": null, + "nyaa_id": 1796467, + "nyaa_subdom": null, + "anidex_id": null, + "torrent_url": "https://animetosho.org/storage/torrent/65c34046223f78409badf5138035708875dae046/Ore%20dake%20Level%20Up%20na%20Ken%20-%20S01E12%20-%20480p%20WEB%20x264%20-NanDesuKa%20%28CR%29.torrent", + "torrent_name": "Ore dake Level Up na Ken - S01E12 - 480p WEB x264 -NanDesuKa (CR).mkv", + "info_hash": "65c34046223f78409badf5138035708875dae046", + "info_hash_v2": null, + "magnet_uri": "magnet:?xt=urn:btih:MXBUARRCH54EBG5N6UJYANLQRB25VYCG&tr=http%3A%2F%2Fnyaa.tracker.wf%3A7777%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.internetwarriors.net%3A1337%2Fannounce&tr=udp%3A%2F%2Fexodus.desync.com%3A6969%2Fannounce&dn=Ore%20dake%20Level%20Up%20na%20Ken%20-%20S01E12%20-%20480p%20WEB%20x264%20-NanDesuKa%20%28CR%29.mkv", + "seeders": 2, + "leechers": 1, + "torrent_downloaded_count": 47, + "tracker_updated": 1711939543, + "nzb_url": "https://animetosho.org/storage/nzbs/00094842/Ore%20dake%20Level%20Up%20na%20Ken%20-%20S01E12%20-%20480p%20WEB%20x264%20-NanDesuKa%20%28CR%29.nzb", + "total_size": 379888841, + "num_files": 1, + "anidb_aid": 17495, + "anidb_eid": 277518, + "anidb_fid": null, + "article_url": null, + "article_title": null, + "website_url": null + }, + { + "id": 608321, + "title": "[ToonsHub] Solo Leveling E12 Arise 2160p B-Global WEB-DL x264 (Multi-Subs)", + "link": "https://animetosho.org/view/toonshub-solo-leveling-e12-arise-2160p-b-global.n1796464", + "timestamp": 1711816495, + "status": "complete", + "tosho_id": null, + "nyaa_id": 1796464, + "nyaa_subdom": null, + "anidex_id": null, + "torrent_url": "https://animetosho.org/storage/torrent/953e7663ac91c946ee46efd1f00c544a81ac5210/Solo%20Leveling%20E12%20Arise%202160p%20B-Global%20WEB-DL%20x264%20%5BJapanese%5D%20%28AAC%202.0%29%20MSubs_ToonsHub_.torrent", + "torrent_name": "Solo Leveling E12 Arise 2160p B-Global WEB-DL x264 [Japanese] (AAC 2.0) MSubs_ToonsHub_.mkv", + "info_hash": "953e7663ac91c946ee46efd1f00c544a81ac5210", + "info_hash_v2": null, + "magnet_uri": "magnet:?xt=urn:btih:SU7HMY5MSHEUN3SG57I7ADCUJKA2YUQQ&tr=http%3A%2F%2Fnyaa.tracker.wf%3A7777%2Fannounce&tr=http%3A%2F%2Fanidex.moe%3A6969%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Fexodus.desync.com%3A6969%2Fannounce&dn=%5BToonsHub%5D%20Solo%20Leveling%20E12%20Arise%202160p%20B-Global%20WEB-DL%20x264%20%28Multi-Subs%29", + "seeders": 283, + "leechers": 6, + "torrent_downloaded_count": 2103, + "tracker_updated": 1711940653, + "nzb_url": "https://animetosho.org/storage/nzbs/00094841/Solo%20Leveling%20E12%20Arise%202160p%20B-Global%20WEB-DL%20x264%20%5BJapanese%5D%20%28AAC%202.0%29%20MSubs_ToonsHub_.nzb", + "total_size": 1725930387, + "num_files": 1, + "anidb_aid": 17495, + "anidb_eid": 277518, + "anidb_fid": null, + "article_url": null, + "article_title": null, + "website_url": "https://discord.gg/2mPFKykW4j" + }, + { + "id": 608320, + "title": "Solo Leveling S01E12 Arise 1080p CR WEB-DL AAC2.0 H 264-VARYG (Ore dake Level Up na Ken, Multi-Subs)", + "link": "https://animetosho.org/view/solo-leveling-s01e12-arise-1080p-cr-web-dl.n1796463", + "timestamp": 1711816461, + "status": "complete", + "tosho_id": null, + "nyaa_id": 1796463, + "nyaa_subdom": null, + "anidex_id": null, + "torrent_url": "https://animetosho.org/storage/torrent/e8c25942e297bfd38515d785ca82e0dac7a09688/Solo.Leveling.S01E12.Arise.1080p.CR.WEB-DL.AAC2.0.H.264-VARYG.torrent", + "torrent_name": "Solo.Leveling.S01E12.Arise.1080p.CR.WEB-DL.AAC2.0.H.264-VARYG.mkv", + "info_hash": "e8c25942e297bfd38515d785ca82e0dac7a09688", + "info_hash_v2": null, + "magnet_uri": "magnet:?xt=urn:btih:5DBFSQXCS675HBIV26C4VAXA3LD2BFUI&tr=http%3A%2F%2Fnyaa.tracker.wf%3A7777%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Fexodus.desync.com%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce&dn=Solo%20Leveling%20S01E12%20Arise%201080p%20CR%20WEB-DL%20AAC2.0%20H%20264-VARYG%20%28Ore%20dake%20Level%20Up%20na%20Ken%2C%20Multi-Subs%29", + "seeders": 476, + "leechers": 78, + "torrent_downloaded_count": 2233, + "tracker_updated": 1711948863, + "nzb_url": "https://animetosho.org/storage/nzbs/00094840/Solo.Leveling.S01E12.Arise.1080p.CR.WEB-DL.AAC2.0.H.264-VARYG.nzb", + "total_size": 1447070929, + "num_files": 1, + "anidb_aid": 17495, + "anidb_eid": 277518, + "anidb_fid": null, + "article_url": null, + "article_title": null, + "website_url": "https://myanimelist.net/anime/52299/" + }, + { + "id": 608319, + "title": "[ToonsHub] Solo Leveling E12 Arise 1080p B-Global WEB-DL x264 (Multi-Subs)", + "link": "https://animetosho.org/view/toonshub-solo-leveling-e12-arise-1080p-b-global.n1796462", + "timestamp": 1711816458, + "status": "complete", + "tosho_id": null, + "nyaa_id": 1796462, + "nyaa_subdom": null, + "anidex_id": null, + "torrent_url": "https://animetosho.org/storage/torrent/adf123922973e4c0f7979ab6d3874d2e2e0e5207/Solo%20Leveling%20E12%20Arise%201080p%20B-Global%20WEB-DL%20x264%20%5BJapanese%5D%20%28AAC%202.0%29%20MSubs_ToonsHub_.torrent", + "torrent_name": "Solo Leveling E12 Arise 1080p B-Global WEB-DL x264 [Japanese] (AAC 2.0) MSubs_ToonsHub_.mkv", + "info_hash": "adf123922973e4c0f7979ab6d3874d2e2e0e5207", + "info_hash_v2": null, + "magnet_uri": "magnet:?xt=urn:btih:VXYSHERJOPSMB54XTK3NHB2NFYXA4UQH&tr=http%3A%2F%2Fnyaa.tracker.wf%3A7777%2Fannounce&tr=http%3A%2F%2Fanidex.moe%3A6969%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Fexodus.desync.com%3A6969%2Fannounce&dn=%5BToonsHub%5D%20Solo%20Leveling%20E12%20Arise%201080p%20B-Global%20WEB-DL%20x264%20%28Multi-Subs%29", + "seeders": 112, + "leechers": 2, + "torrent_downloaded_count": 955, + "tracker_updated": 1711941514, + "nzb_url": "https://animetosho.org/storage/nzbs/0009483f/Solo%20Leveling%20E12%20Arise%201080p%20B-Global%20WEB-DL%20x264%20%5BJapanese%5D%20%28AAC%202.0%29%20MSubs_ToonsHub_.nzb", + "total_size": 424813220, + "num_files": 1, + "anidb_aid": 17495, + "anidb_eid": 277518, + "anidb_fid": null, + "article_url": null, + "article_title": null, + "website_url": "https://discord.gg/2mPFKykW4j" + }, + { + "id": 608318, + "title": "[Erai-raws] Ore dake Level Up na Ken - 12 [480p][Multiple Subtitle] [ENG][POR-BR][SPA-LA][SPA][ARA][FRE][GER][ITA][RUS]", + "link": "https://animetosho.org/view/erai-raws-ore-dake-level-up-na-ken.n1796461", + "timestamp": 1711816354, + "status": "complete", + "tosho_id": null, + "nyaa_id": 1796461, + "nyaa_subdom": null, + "anidex_id": null, + "torrent_url": "https://animetosho.org/storage/torrent/5b4a6ec6c71d1033f336bdf027fc3f56dbb6544b/%5BErai-raws%5D%20Ore%20dake%20Level%20Up%20na%20Ken%20-%2012%20%5B480p%5D%5BMultiple%20Subtitle%5D%5B348538A9%5D.torrent", + "torrent_name": "[Erai-raws] Ore dake Level Up na Ken - 12 [480p][Multiple Subtitle][348538A9].mkv", + "info_hash": "5b4a6ec6c71d1033f336bdf027fc3f56dbb6544b", + "info_hash_v2": null, + "magnet_uri": "magnet:?xt=urn:btih:LNFG5RWHDUIDH4ZWXXYCP7B7K3N3MVCL&tr=http%3A%2F%2Fnyaa.tracker.wf%3A7777%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=http%3A%2F%2Fopen.acgnxtracker.com%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce&dn=%5BErai-raws%5D%20Ore%20dake%20Level%20Up%20na%20Ken%20-%2012%20%5B480p%5D%5BMultiple%20Subtitle%5D%20%5BENG%5D%5BPOR-BR%5D%5BSPA-LA%5D%5BSPA%5D%5BARA%5D%5BFRE%5D%5BGER%5D%5BITA%5D%5BRUS%5D", + "seeders": 57, + "leechers": 1, + "torrent_downloaded_count": 593, + "tracker_updated": 1711935570, + "nzb_url": "https://animetosho.org/storage/nzbs/0009483e/%5BErai-raws%5D%20Ore%20dake%20Level%20Up%20na%20Ken%20-%2012%20%5B480p%5D%5BMultiple%20Subtitle%5D%5B348538A9%5D.nzb", + "total_size": 390242548, + "num_files": 1, + "anidb_aid": 17495, + "anidb_eid": 277518, + "anidb_fid": 3399156, + "article_url": null, + "article_title": null, + "website_url": "https://www.erai-raws.info/anime-list/ore-dake-level-up-na-ken/" + }, + { + "id": 608317, + "title": "[Erai-raws] Ore dake Level Up na Ken - 12 [720p][Multiple Subtitle] [ENG][POR-BR][SPA-LA][SPA][ARA][FRE][GER][ITA][RUS]", + "link": "https://animetosho.org/view/erai-raws-ore-dake-level-up-na-ken.n1796459", + "timestamp": 1711816335, + "status": "complete", + "tosho_id": null, + "nyaa_id": 1796459, + "nyaa_subdom": null, + "anidex_id": null, + "torrent_url": "https://animetosho.org/storage/torrent/371911c245694044bb84dfa1cb162c5922e46090/%5BErai-raws%5D%20Ore%20dake%20Level%20Up%20na%20Ken%20-%2012%20%5B720p%5D%5BMultiple%20Subtitle%5D%5BFF79133E%5D.torrent", + "torrent_name": "[Erai-raws] Ore dake Level Up na Ken - 12 [720p][Multiple Subtitle][FF79133E].mkv", + "info_hash": "371911c245694044bb84dfa1cb162c5922e46090", + "info_hash_v2": null, + "magnet_uri": "magnet:?xt=urn:btih:G4MRDQSFNFAEJO4E36Q4WFRMLEROIYEQ&tr=http%3A%2F%2Fnyaa.tracker.wf%3A7777%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=http%3A%2F%2Fopen.acgnxtracker.com%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce&dn=%5BErai-raws%5D%20Ore%20dake%20Level%20Up%20na%20Ken%20-%2012%20%5B720p%5D%5BMultiple%20Subtitle%5D%20%5BENG%5D%5BPOR-BR%5D%5BSPA-LA%5D%5BSPA%5D%5BARA%5D%5BFRE%5D%5BGER%5D%5BITA%5D%5BRUS%5D", + "seeders": 244, + "leechers": 8, + "torrent_downloaded_count": 1819, + "tracker_updated": 1711891219, + "nzb_url": "https://animetosho.org/storage/nzbs/0009483d/%5BErai-raws%5D%20Ore%20dake%20Level%20Up%20na%20Ken%20-%2012%20%5B720p%5D%5BMultiple%20Subtitle%5D%5BFF79133E%5D.nzb", + "total_size": 743917601, + "num_files": 1, + "anidb_aid": 17495, + "anidb_eid": 277518, + "anidb_fid": 3399115, + "article_url": null, + "article_title": null, + "website_url": "https://www.erai-raws.info/anime-list/ore-dake-level-up-na-ken/" + }, + { + "id": 608316, + "title": "[Erai-raws] Ore dake Level Up na Ken - 12 [1080p][Multiple Subtitle] [ENG][POR-BR][SPA-LA][SPA][ARA][FRE][GER][ITA][RUS]", + "link": "https://animetosho.org/view/erai-raws-ore-dake-level-up-na-ken.n1796456", + "timestamp": 1711816309, + "status": "complete", + "tosho_id": null, + "nyaa_id": 1796456, + "nyaa_subdom": null, + "anidex_id": null, + "torrent_url": "https://animetosho.org/storage/torrent/927f32f78956475287b80b7a3b8069d775b3bb74/%5BErai-raws%5D%20Ore%20dake%20Level%20Up%20na%20Ken%20-%2012%20%5B1080p%5D%5BMultiple%20Subtitle%5D%5BC8116259%5D.torrent", + "torrent_name": "[Erai-raws] Ore dake Level Up na Ken - 12 [1080p][Multiple Subtitle][C8116259].mkv", + "info_hash": "927f32f78956475287b80b7a3b8069d775b3bb74", + "info_hash_v2": null, + "magnet_uri": "magnet:?xt=urn:btih:SJ7TF54JKZDVFB5YBN5DXADJ2523HO3U&tr=http%3A%2F%2Fnyaa.tracker.wf%3A7777%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=http%3A%2F%2Fopen.acgnxtracker.com%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce&dn=%5BErai-raws%5D%20Ore%20dake%20Level%20Up%20na%20Ken%20-%2012%20%5B1080p%5D%5BMultiple%20Subtitle%5D%20%5BENG%5D%5BPOR-BR%5D%5BSPA-LA%5D%5BSPA%5D%5BARA%5D%5BFRE%5D%5BGER%5D%5BITA%5D%5BRUS%5D", + "seeders": 1054, + "leechers": 30, + "torrent_downloaded_count": 7259, + "tracker_updated": 1711904421, + "nzb_url": "https://animetosho.org/storage/nzbs/0009483c/%5BErai-raws%5D%20Ore%20dake%20Level%20Up%20na%20Ken%20-%2012%20%5B1080p%5D%5BMultiple%20Subtitle%5D%5BC8116259%5D.nzb", + "total_size": 1455168235, + "num_files": 1, + "anidb_aid": 17495, + "anidb_eid": 277518, + "anidb_fid": 3399072, + "article_url": null, + "article_title": null, + "website_url": "https://www.erai-raws.info/anime-list/ore-dake-level-up-na-ken/" + }, + { + "id": 608315, + "title": "[SubsPlease] Solo Leveling - 12 (1080p) [5B47BF7E].mkv", + "link": "https://animetosho.org/view/subsplease-solo-leveling-12-1080p-5b47bf7e-mkv.1859208", + "timestamp": 1711816291, + "status": "complete", + "tosho_id": 1859208, + "nyaa_id": 1796455, + "nyaa_subdom": null, + "anidex_id": null, + "torrent_url": "https://animetosho.org/storage/torrent/ac03972f83b13773c7d6c0387969d3873c98fe6e/%5BSubsPlease%5D%20Solo%20Leveling%20-%2012%20%281080p%29%20%5B5B47BF7E%5D.torrent", + "torrent_name": "[SubsPlease] Solo Leveling - 12 (1080p) [5B47BF7E].mkv", + "info_hash": "ac03972f83b13773c7d6c0387969d3873c98fe6e", + "info_hash_v2": null, + "magnet_uri": "magnet:?xt=urn:btih:VQBZOL4DWE3XHR6WYA4HS2OTQ46JR7TO&tr=http%3A%2F%2Fnyaa.tracker.wf%3A7777%2Fannounce&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2F9.rarbg.to%3A2710%2Fannounce&tr=udp%3A%2F%2F9.rarbg.me%3A2710%2Fannounce&dn=%5BSubsPlease%5D%20Solo%20Leveling%20-%2012%20%281080p%29%20%5B5B47BF7E%5D.mkv", + "seeders": 4800, + "leechers": 126, + "torrent_downloaded_count": 32750, + "tracker_updated": 1711902497, + "nzb_url": "https://animetosho.org/storage/nzbs/0009483b/%5BSubsPlease%5D%20Solo%20Leveling%20-%2012%20%281080p%29%20%5B5B47BF7E%5D.nzb", + "total_size": 1448782755, + "num_files": 1, + "anidb_aid": 17495, + "anidb_eid": 277518, + "anidb_fid": 3398902, + "article_url": null, + "article_title": null, + "website_url": "https://subsplease.org" + }, + { + "id": 608314, + "title": "[SubsPlease] Solo Leveling - 12 (720p) [83538700].mkv", + "link": "https://animetosho.org/view/subsplease-solo-leveling-12-720p-83538700-mkv.1859207", + "timestamp": 1711816270, + "status": "complete", + "tosho_id": 1859207, + "nyaa_id": 1796454, + "nyaa_subdom": null, + "anidex_id": null, + "torrent_url": "https://animetosho.org/storage/torrent/5a65737737ea4a6c24c2ef17fb87906f250f2b2b/%5BSubsPlease%5D%20Solo%20Leveling%20-%2012%20%28720p%29%20%5B83538700%5D.torrent", + "torrent_name": "[SubsPlease] Solo Leveling - 12 (720p) [83538700].mkv", + "info_hash": "5a65737737ea4a6c24c2ef17fb87906f250f2b2b", + "info_hash_v2": null, + "magnet_uri": "magnet:?xt=urn:btih:LJSXG5ZX5JFGYJGC54L7XB4QN4SQ6KZL&tr=http%3A%2F%2Fnyaa.tracker.wf%3A7777%2Fannounce&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2F9.rarbg.to%3A2710%2Fannounce&tr=udp%3A%2F%2F9.rarbg.me%3A2710%2Fannounce&dn=%5BSubsPlease%5D%20Solo%20Leveling%20-%2012%20%28720p%29%20%5B83538700%5D.mkv", + "seeders": 1155, + "leechers": 51, + "torrent_downloaded_count": 8614, + "tracker_updated": 1711883436, + "nzb_url": "https://animetosho.org/storage/nzbs/0009483a/%5BSubsPlease%5D%20Solo%20Leveling%20-%2012%20%28720p%29%20%5B83538700%5D.nzb", + "total_size": 737532022, + "num_files": 1, + "anidb_aid": 17495, + "anidb_eid": 277518, + "anidb_fid": 3398956, + "article_url": null, + "article_title": null, + "website_url": "https://subsplease.org" + }, + { + "id": 608313, + "title": "[SubsPlease] Solo Leveling - 12 (480p) [9FBA731B].mkv", + "link": "https://animetosho.org/view/subsplease-solo-leveling-12-480p-9fba731b-mkv.1859206", + "timestamp": 1711816267, + "status": "complete", + "tosho_id": 1859206, + "nyaa_id": 1796453, + "nyaa_subdom": null, + "anidex_id": null, + "torrent_url": "https://animetosho.org/storage/torrent/071cfac21f433b07e81e43f33f9a869098af4f64/%5BSubsPlease%5D%20Solo%20Leveling%20-%2012%20%28480p%29%20%5B9FBA731B%5D.torrent", + "torrent_name": "[SubsPlease] Solo Leveling - 12 (480p) [9FBA731B].mkv", + "info_hash": "071cfac21f433b07e81e43f33f9a869098af4f64", + "info_hash_v2": null, + "magnet_uri": "magnet:?xt=urn:btih:A4OPVQQ7IM5QP2A6IPZT7GUGSCMK6T3E&tr=http%3A%2F%2Fnyaa.tracker.wf%3A7777%2Fannounce&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2F9.rarbg.to%3A2710%2Fannounce&tr=udp%3A%2F%2F9.rarbg.me%3A2710%2Fannounce&dn=%5BSubsPlease%5D%20Solo%20Leveling%20-%2012%20%28480p%29%20%5B9FBA731B%5D.mkv", + "seeders": 385, + "leechers": 143, + "torrent_downloaded_count": 2467, + "tracker_updated": null, + "nzb_url": "https://animetosho.org/storage/nzbs/00094839/%5BSubsPlease%5D%20Solo%20Leveling%20-%2012%20%28480p%29%20%5B9FBA731B%5D.nzb", + "total_size": 383857166, + "num_files": 1, + "anidb_aid": 17495, + "anidb_eid": 277518, + "anidb_fid": 3399016, + "article_url": null, + "article_title": null, + "website_url": "https://subsplease.org" + } +] \ No newline at end of file diff --git a/tests/subliminal_patch/data/animetosho_series_response.json b/tests/subliminal_patch/data/animetosho_series_response.json new file mode 100644 index 000000000..290a8f7a8 --- /dev/null +++ b/tests/subliminal_patch/data/animetosho_series_response.json @@ -0,0 +1,232 @@ +{ + "title": "[EMBER] Ore dake Level Up na Ken S01E12 [1080p] [HEVC WEBRip] (Solo Leveling)", + "timestamp": 1711853493, + "status": "complete", + "tosho_id": null, + "nyaa_id": 1796835, + "nyaa_subdom": null, + "anidex_id": null, + "comment": "", + "is_dupe": false, + "deleted": false, + "torrent_url": "https://animetosho.org/storage/torrent/f9670720a5142ec31aa8e3715745f1392e3ffd5b/%5BEMBER%5D%20Solo%20Leveling%20-%2012.torrent", + "torrent_name": "[EMBER] Solo Leveling - 12.mkv", + "info_hash": "f9670720a5142ec31aa8e3715745f1392e3ffd5b", + "info_hash_v2": null, + "magnet_uri": "magnet:?xt=urn:btih:7FTQOIFFCQXMGGVI4NYVORPRHEXD77K3&tr=http%3A%2F%2Fnyaa.tracker.wf%3A7777%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Fexodus.desync.com%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce&dn=%5BEMBER%5D%20Ore%20dake%20Level%20Up%20na%20Ken%20S01E12%20%5B1080p%5D%20%5BHEVC%20WEBRip%5D%20%28Solo%20Leveling%29", + "nzb_url": "https://animetosho.org/storage/nzbs/0009490e/%5BEMBER%5D%20Solo%20Leveling%20-%2012.nzb", + "anidb_aid": 17495, + "anidb_eid": 277518, + "anidb_fid": null, + "article_url": null, + "article_title": null, + "website_url": null, + "total_size": 369572311, + "num_files": 1, + "primary_file_id": 1154190, + "files": [ + { + "id": 1154190, + "is_archive": false, + "filename": "[EMBER] Solo Leveling - 12.mkv", + "size": 369572311, + "processed": true, + "crc32": "cc8c36bc", + "md5": "07306f34a7cc9d25c2ec8a3b7d0b573a", + "sha1": "d79665531066b24439b0ef421074e6445d8b25a6", + "sha256": "0df3ec5424233bdb75ff33077b196e515455152a76ab5d4eab7a63cdcbb8c917", + "ed2k": "c0359507e7da148750279ff229cb9fbf", + "bt2": "b4526e074a41981e73cdcd13b9142a4a774bd15ff641b5cf114ace527268d213", + "vidframe_timestamps": [ + 15000, + 354000, + 693000, + 1032000, + 1371000 + ], + "file_info_type": "mediainfo", + "file_info": "General\nUnique ID : 196382376391031659169980002506916611524 (0x93BDDEB35938CEE294C45B12E5A5C5C4)\nComplete name : [EMBER] Solo Leveling - 12.mkv\nFormat : Matroska\nFormat version : Version 4\nFile size : 352 MiB\nDuration : 23 min 40 s\nOverall bit rate : 2 082 kb/s\nFrame rate : 23.976 FPS\nMovie name : S01E12-Arise\nEncoded date : 2024-03-31 02:15:23 UTC\nWriting application : mkvmerge v69.0.0 ('Day And Age') 64-bit\nWriting library : libebml v1.4.2 + libmatroska v1.6.4\nCover : Yes\nAttachments : cover.jpg / Roboto-Medium.ttf / Roboto-MediumItalic.ttf / arial.ttf / arialbd.ttf / comic.ttf / comicbd.ttf / times.ttf / timesbd.ttf / trebuc.ttf / trebucbd.ttf / verdana.ttf / verdanab.ttf / CONSOLA.TTF / CONSOLAB.TTF\n\nVideo\nID : 1\nFormat : HEVC\nFormat/Info : High Efficiency Video Coding\nFormat profile : Main 10@L4@High\nCodec ID : V_MPEGH/ISO/HEVC\nDuration : 23 min 40 s\nBit rate : 1 914 kb/s\nWidth : 1 920 pixels\nHeight : 1 080 pixels\nDisplay aspect ratio : 16:9\nFrame rate mode : Constant\nFrame rate : 23.976 (24000/1001) FPS\nColor space : YUV\nChroma subsampling : 4:2:0\nBit depth : 10 bits\nBits/(Pixel*Frame) : 0.038\nStream size : 324 MiB (92%)\nTitle : Presented By EMBER\nWriting library : x265 2.4+14-bc0e9bd7c08f5ddc:[Windows][GCC 6.3.0][64 bit] 10bit: KG7x [x265.ru]\nEncoding settings : cpuid=1173503 / frame-threads=3 / numa-pools=8 / wpp / no-pmode / no-pme / no-psnr / no-ssim / log-level=2 / input-csp=1 / input-res=1920x1080 / interlace=0 / total-frames=0 / level-idc=40 / high-tier=1 / uhd-bd=0 / ref=4 / no-allow-non-conformance / no-repeat-headers / annexb / no-aud / no-hrd / info / hash=0 / no-temporal-layers / open-gop / min-keyint=23 / keyint=250 / bframes=8 / b-adapt=2 / b-pyramid / bframe-bias=0 / rc-lookahead=70 / lookahead-slices=4 / scenecut=40 / no-intra-refresh / ctu=64 / min-cu-size=8 / rect / no-amp / max-tu-size=32 / tu-inter-depth=2 / tu-intra-depth=2 / limit-tu=4 / rdoq-level=2 / dynamic-rd=0.00 / no-ssim-rd / signhide / no-tskip / nr-intra=0 / nr-inter=0 / no-constrained-intra / no-strong-intra-smoothing / max-merge=3 / limit-refs=3 / limit-modes / me=3 / subme=3 / merange=57 / temporal-mvp / weightp / no-weightb / no-analyze-src-pics / deblock=1:1 / no-sao / no-sao-non-deblock / rd=4 / no-early-skip / rskip / no-fast-intra / no-tskip-fast / no-cu-lossless / no-b-intra / rdpenalty=0 / psy-rd=1.20 / psy-rdoq=2.00 / no-rd-refine / analysis-mode=0 / no-lossless / cbqpoffs=0 / crqpoffs=0 / rc=crf / crf=23.0 / qcomp=0.60 / qpstep=4 / stats-write=0 / stats-read=0 / vbv-maxrate=30000 / vbv-bufsize=30000 / vbv-init=0.9 / crf-max=0.0 / crf-min=0.0 / ipratio=1.40 / pbratio=1.30 / aq-mode=3 / aq-strength=0.70 / cutree / zone-count=0 / no-strict-cbr / qg-size=32 / no-rc-grain / qpmax=69 / qpmin=0 / sar=0 / overscan=0 / videoformat=5 / range=0 / colorprim=1 / transfer=1 / colormatrix=1 / chromaloc=0 / display-window=0 / max-cll=0,0 / min-luma=0 / max-luma=1023 / log2-max-poc-lsb=8 / vui-timing-info / vui-hrd-info / slices=1 / opt-qp-pps / opt-ref-list-length-pps / no-multi-pass-opt-rps / scenecut-bias=0.05 / no-opt-cu-delta-qp / no-aq-motion / no-hdr / no-hdr-opt / no-dhdr10-opt / refine-level=5 / no-limit-sao / ctu-info=0\nDefault : Yes\nForced : No\nColor range : Limited\nColor primaries : BT.709\nTransfer characteristics : BT.709\nMatrix coefficients : BT.709\n\nAudio\nID : 2\nFormat : AAC LC\nFormat/Info : Advanced Audio Codec Low Complexity\nCodec ID : A_AAC-2\nDuration : 23 min 40 s\nBit rate : 128 kb/s\nChannel(s) : 2 channels\nChannel layout : L R\nSampling rate : 44.1 kHz\nFrame rate : 43.066 FPS (1024 SPF)\nCompression mode : Lossy\nStream size : 21.7 MiB (6%)\nLanguage : Japanese\nDefault : Yes\nForced : No\n\nText\nID : 3\nFormat : ASS\nCodec ID : S_TEXT/ASS\nCodec ID/Info : Advanced Sub Station Alpha\nDuration : 23 min 20 s\nBit rate : 98 b/s\nFrame rate : 0.168 FPS\nCount of elements : 235\nCompression mode : Lossless\nStream size : 16.8 KiB (0%)\nLanguage : English\nDefault : Yes\nForced : No\n\nMenu\n00:00:00.000 : en:Intro\n00:02:00.000 : en:OP\n00:03:30.000 : en:Main EP\n00:21:42.000 : en:ED\n00:23:12.000 : en:Extra", + "attachments": [ + { + "id": 268579, + "filename": "arial.ttf", + "type": "other", + "info": { + "mime": "application/x-truetype-font" + }, + "size": 892680 + }, + { + "id": 624527, + "filename": "arialbd.ttf", + "type": "other", + "info": { + "mime": "application/x-truetype-font" + }, + "size": 854584 + }, + { + "id": 1962029, + "filename": "chapters.xml", + "type": "xmlmeta", + "info": { + "meta": "chapters" + }, + "size": 1874 + }, + { + "id": 9973, + "filename": "comic.ttf", + "type": "other", + "info": { + "mime": "application/x-truetype-font" + }, + "size": 240588 + }, + { + "id": 13424, + "filename": "comicbd.ttf", + "type": "other", + "info": { + "mime": "application/x-truetype-font" + }, + "size": 224404 + }, + { + "id": 727768, + "filename": "CONSOLA.TTF", + "type": "other", + "info": { + "mime": "application/x-truetype-font" + }, + "size": 358460 + }, + { + "id": 183919, + "filename": "CONSOLAB.TTF", + "type": "other", + "info": { + "mime": "application/x-truetype-font" + }, + "size": 368720 + }, + { + "id": 1900106, + "filename": "cover.jpg", + "type": "other", + "info": { + "mime": "image/jpeg" + }, + "size": 178243 + }, + { + "id": 1066790, + "filename": "Roboto-Medium.ttf", + "type": "other", + "info": { + "mime": "application/x-truetype-font" + }, + "size": 351704 + }, + { + "id": 1066791, + "filename": "Roboto-MediumItalic.ttf", + "type": "other", + "info": { + "mime": "application/x-truetype-font" + }, + "size": 378412 + }, + { + "id": 1962028, + "filename": "tags.xml", + "type": "xmlmeta", + "info": { + "meta": "tags" + }, + "size": 2698 + }, + { + "id": 653220, + "filename": "times.ttf", + "type": "other", + "info": { + "mime": "application/x-truetype-font" + }, + "size": 975228 + }, + { + "id": 653221, + "filename": "timesbd.ttf", + "type": "other", + "info": { + "mime": "application/x-truetype-font" + }, + "size": 980120 + }, + { + "id": 1961547, + "filename": "track3.eng.ass", + "type": "subtitle", + "info": { + "number": 3, + "codec": "ASS", + "lang": "eng", + "default": 1, + "enabled": 1, + "forced": 0, + "trackid": 2, + "tracknum": 3 + }, + "size": 25988 + }, + { + "id": 71778, + "filename": "trebuc.ttf", + "type": "other", + "info": { + "mime": "application/x-truetype-font" + }, + "size": 218432 + }, + { + "id": 16207, + "filename": "trebucbd.ttf", + "type": "other", + "info": { + "mime": "application/x-truetype-font" + }, + "size": 206776 + }, + { + "id": 1149, + "filename": "verdana.ttf", + "type": "other", + "info": { + "mime": "application/x-truetype-font" + }, + "size": 240456 + }, + { + "id": 8678, + "filename": "verdanab.ttf", + "type": "other", + "info": { + "mime": "application/x-truetype-font" + }, + "size": 208456 + } + ], + "links": { + "ClickNUpload": "https://clicknupload.red/ydok51qdzjr7", + "DailyUploads": "https://dailyuploads.net/nksc253gopcq", + "DownloadGG": "https://download.gg/file-18642810_87ce8be6abbb74f6", + "GoFile": "https://gofile.io/d/XgPwnN", + "KrakenFiles": "https://krakenfiles.com/view/9lJPP2MvAt/file.html", + "MdiaLoad": "https://down.mdiaload.com/t9w39f21ad9o", + "MultiUp": "https://multiup.io/download/b7958d691eb0b38477acdb63db00cca6/%5BEMBER%5D%20Solo%20Leveling%20-%2012.mkv", + "Uppit": "http://uppit.com/g58333gdg3ei" + } + } + ] +} \ No newline at end of file diff --git a/tests/subliminal_patch/test_animetosho.py b/tests/subliminal_patch/test_animetosho.py new file mode 100644 index 000000000..acb62781c --- /dev/null +++ b/tests/subliminal_patch/test_animetosho.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python3 + +import os +import pytest + +from subliminal_patch.core import Episode +from subliminal_patch.providers.animetosho import AnimeToshoProvider +from subzero.language import Language + +@pytest.fixture(scope="session") +def anime_episodes(): + return { + "frieren_s01e01": Episode( + "Frieren - Beyond Journey's End S01E28 1080p WEB x264 AAC -Tsundere-Raws (CR) (Sousou no Frieren).mkv", + "Frieren: Beyond Journey's End", + 1, + 28, + source="Web", + series_anidb_id=17617, + series_anidb_episode_id=271418, + series_tvdb_id=424536, + series_imdb_id="tt22248376", + release_group="Tsundere-Raws", + resolution="1080p", + video_codec="H.264", + ), + "solo_leveling_s01e10": Episode( + "[New-raws] Ore Dake Level Up na Ken - 12 END [1080p] [AMZN].mkv", + "Solo Leveling", + 1, + 12, + source="Web", + series_anidb_id=17495, + series_anidb_episode_id=277518, + series_tvdb_id=389597, + series_imdb_id="tt21209876", + release_group="New-raws", + resolution="1080p", + video_codec="H.264", + ), + } + + +def test_list_subtitles(anime_episodes, requests_mock, data): + language = Language("eng") + item = anime_episodes["solo_leveling_s01e10"] + + with open(os.path.join(data, 'animetosho_episode_response.json'), "rb") as f: + requests_mock.get(' https://feed.animetosho.org/json?eid=277518', content=f.read()) + + with open(os.path.join(data, 'animetosho_series_response.json'), "rb") as f: + response = f.read() + requests_mock.get('https://feed.animetosho.org/json?show=torrent&id=608516', content=response) + requests_mock.get('https://feed.animetosho.org/json?show=torrent&id=608526', content=response) + + with AnimeToshoProvider(2) as provider: + subtitles = provider.list_subtitles(item, languages={language}) + + assert len(subtitles) == 2