def extract_song_urls(self, text: str) -> List[SongUrl]: """Extract song URLs from text for each registered platform. :param text: message text :return: list of SongURLs """ urls = [] for platform_key, platform in PLATFORMS.items(): for match in platform.url_re.finditer(text): platform_url = SongUrl( platform_key=platform_key, platform_name=platform.name, url=match.group(0), ) urls.append(platform_url) return urls
def extract_song_urls(self, text: str, skip_youtube: bool = False) -> List[SongUrl]: """Extract song URLs from text for each registered platform. :param text: message text :param skip_youtube: skip YouTube platform (used for group messages) :return: list of SongURLs """ urls = [] for platform_key, platform in PLATFORMS.items(): if skip_youtube and platform_key == 'youtube': continue for match in platform.url_re.finditer(text): platform_url = SongUrl( platform_key=platform_key, platform_name=platform.name, url=match.group(0), ) urls.append(platform_url) return urls
def _filter_platform_urls(self, platform_urls: dict) -> dict: """Filter and reorder platform URLs according to `PLATFORMS` registry. :param platform_urls: dictionary of {platform_key: platform_urls} :return: dictionary of filtered and ordered platform URLs """ logger = self.logger_var.get() logger = logger.bind(data=platform_urls) urls = [] for platform_key, platform in PLATFORMS.items(): if platform_key not in platform_urls: logger.info('No URL for platform in data', platform_key=platform_key) continue urls.append( (platform.order, platform.name, platform_urls[platform_key])) # Reorder platform URLs platform_urls = { name: url for order, name, url in sorted(urls, key=lambda x: x[0]) } return platform_urls