mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-05-11 18:10:15 +08:00
105 lines
2.9 KiB
Python
105 lines
2.9 KiB
Python
from typing import Optional, List, Tuple
|
|
|
|
from app.utils.singleton import Singleton
|
|
|
|
|
|
class StreamingPlatforms(metaclass=Singleton):
|
|
"""
|
|
流媒体平台简称与全称。
|
|
"""
|
|
STREAMING_PLATFORMS: List[Tuple[str, str]] = [
|
|
("AMZN", "Amazon"),
|
|
("NF", "Netflix"),
|
|
("ATVP", "Apple TV+"),
|
|
("iT", "iTunes"),
|
|
("DSNP", "Disney+"),
|
|
("HS", "Hotstar"),
|
|
("APPS", "Disney+ MENA"),
|
|
("PMTP", "Paramount+"),
|
|
("HMAX", "Max"),
|
|
("", "Max"),
|
|
("HULU", "Hulu"),
|
|
("MA", "Movies Anywhere"),
|
|
("BCORE", "Bravia Core"),
|
|
("MS", "Microsoft Store"),
|
|
("SHO", "Showtime"),
|
|
("STAN", "Stan"),
|
|
("PCOK", "Peacock"),
|
|
("SKST", "SkyShowtime"),
|
|
("NOW", "Now TV"),
|
|
("FXTL", "Foxtel Now"),
|
|
("BNGE", "Binge"),
|
|
("CRKL", "Crackle"),
|
|
("RKTN", "Rakuten TV"),
|
|
("ALL4", "All 4"),
|
|
("AS", "Adult Swim"),
|
|
("BRTB", "Brtb TV"),
|
|
("CNLP", "Canal+"),
|
|
("CRIT", "Criterion Channel"),
|
|
("DSCP", "Discovery+"),
|
|
("", "ESPN"),
|
|
("FOOD", "Food Network"),
|
|
("MUBI", "Mubi"),
|
|
("PLAY", "Google Play"),
|
|
("YT", "YouTube"),
|
|
("", "friDay"),
|
|
("", "KKTV"),
|
|
("", "ofiii"),
|
|
("", "LiTV"),
|
|
("", "MyVideo"),
|
|
("Hami", "Hami Video"),
|
|
("", "meWATCH"),
|
|
("CATCHPLAY", "CATCHPLAY+"),
|
|
("", "LINE TV"),
|
|
("VIU", "Viu"),
|
|
("IQ", ""),
|
|
("", "WeTV"),
|
|
("ABMA", "Abema"),
|
|
("ADN", ""),
|
|
("AT-X", ""),
|
|
("Baha", ""),
|
|
("BG", "B-Global"),
|
|
("CR", "Crunchyroll"),
|
|
("", "DMM"),
|
|
("FOD", ""),
|
|
("FUNi", "Funimation"),
|
|
("HIDI", "HIDIVE"),
|
|
("UNXT", "U-NEXT"),
|
|
]
|
|
|
|
def __init__(self):
|
|
"""初始化流媒体平台匹配器"""
|
|
self._lookup_cache = {}
|
|
self._build_cache()
|
|
|
|
def _build_cache(self) -> None:
|
|
"""
|
|
构建查询缓存。
|
|
"""
|
|
self._lookup_cache.clear()
|
|
for short_name, full_name in self.STREAMING_PLATFORMS:
|
|
canonical_name = full_name or short_name
|
|
if not canonical_name:
|
|
continue
|
|
|
|
aliases = {short_name, full_name}
|
|
for alias in aliases:
|
|
if alias:
|
|
self._lookup_cache[alias.upper()] = canonical_name
|
|
|
|
def get_streaming_platform_name(self, platform_code: str) -> Optional[str]:
|
|
"""
|
|
根据流媒体平台简称或全称获取标准名称。
|
|
"""
|
|
if platform_code is None:
|
|
return None
|
|
return self._lookup_cache.get(platform_code.upper())
|
|
|
|
def is_streaming_platform(self, name: str) -> bool:
|
|
"""
|
|
判断给定的字符串是否为已知的流媒体平台代码或名称。
|
|
"""
|
|
if name is None:
|
|
return False
|
|
return name.upper() in self._lookup_cache
|