@classmethod def search(cls, query: str) -> List[Dict[str, Any]]: url = cls.SEARCH_URL.format(query=query.replace(" ", "%20")) soup = BeautifulSoup(cls._get(url).text, "html.parser") cards = soup.select("div.movie-box") # CSS selector works for current layout results = [] for c in cards: title_tag = c.select_one("h2 a") if not title_tag: continue title = title_tag.get_text(strip=True) href = cls._clean_link(title_tag["href"])
# Fuzzy fallback – we score against the **title** only. titles = [r["title"] for r in results] scored = process.extract( query_norm, titles, scorer=fuzz.token_sort_ratio, limit=None, ) matched_titles = title for title, score, _ in scored if score >= min_fuzzy return [r for r in results if r["title"] in matched_titles] @classmethod def search(cls
results.append( "source": "FilmyFly", "title": title, "year": year, "language": language, "quality": quality, "url": href, ) return results query: str) ->
@staticmethod def _clean_link(raw: str) -> str: """Turn relative URLs into absolute ones.""" return raw if raw.startswith("http") else f"https:raw" Any]]: url = cls.SEARCH_URL.format(query=query.replace(" "