From f53c53ba1726e2f88f747b0395aee9d462130811 Mon Sep 17 00:00:00 2001 From: g0ldyy <153996346+g0ldyy@users.noreply.github.com> Date: Mon, 5 Jan 2026 16:03:47 +0100 Subject: [PATCH] feat: update BitMagnet scraper to use IMDb ID and media type for queries --- comet/scrapers/bitmagnet.py | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/comet/scrapers/bitmagnet.py b/comet/scrapers/bitmagnet.py index ea18a17..66b5957 100644 --- a/comet/scrapers/bitmagnet.py +++ b/comet/scrapers/bitmagnet.py @@ -55,15 +55,30 @@ class BitmagnetScraper(BaseScraper): continue return torrents - async def scrape_bitmagnet_page(self, query, offset, limit): + async def scrape_bitmagnet_page( + self, imdb_id, scrape_type, offset, limit, season=None, episode=None + ): try: - params = {"t": "search", "q": query, "offset": offset, "limit": limit} + params = { + "t": scrape_type, + "imdbid": imdb_id, + "offset": offset, + "limit": limit, + } + if season: + params["season"] = season + if episode: + params["ep"] = episode async with self.session.get( f"{self.url}/torznab/api", params=params ) as response: data_text = await response.text() + if not data_text.strip(): + return [] root = ET.fromstring(data_text) return self.parse_bitmagnet_items(root) + except ET.ParseError: + return [] except Exception as e: logger.warning(f"Error scraping BitMagnet page offset={offset}: {e}") return [] @@ -71,7 +86,10 @@ class BitmagnetScraper(BaseScraper): async def scrape(self, request: ScrapeRequest): torrents = [] limit = 100 - query = request.title + imdb_id = request.media_only_id + scrape_type = "movie" if request.media_type == "movie" else "tvsearch" + season = request.season + episode = request.episode batch_size = settings.BITMAGNET_MAX_CONCURRENT_PAGES offset = 0 @@ -85,7 +103,11 @@ class BitmagnetScraper(BaseScraper): current_offset = offset + (i * limit) if current_offset >= settings.BITMAGNET_MAX_OFFSET: break - tasks.append(self.scrape_bitmagnet_page(query, current_offset, limit)) + tasks.append( + self.scrape_bitmagnet_page( + imdb_id, scrape_type, current_offset, limit, season, episode + ) + ) if not tasks: break