"""YouTube API utils module.""" from pyyoutube import Api import config def _remove_url_params(url: str) -> str: """Remove url params, e.g. ?si=fy_lY-vBQhGAGeoNuh0iZg&dl.""" url_params = url.find('?') if url_params > 0: url = url[:url_params] return url def _get_youtube_id_from_url(url: str) -> str: """Return YouTube channel or user id.""" url = _remove_url_params(url) return url.strip('/').split('/')[-1] def _check_if_url_contains_channel_id_or_username(url: str) -> str: """Return 'channel' or 'user'.""" url = _remove_url_params(url) return url.strip('/').split('/')[-2] def get_youtube_subscribers(url: str) -> int: """Get channel subscribers. Args: url (str): the URL of the channel. Returns: int: the number of subscribers. """ api = Api(api_key=config.YOUTUBE_API_KEY) youtube_id = _get_youtube_id_from_url(url) if _check_if_url_contains_channel_id_or_username(url) == 'user': channel = api.get_channel_info(channel_name=youtube_id) elif _check_if_url_contains_channel_id_or_username(url) == 'channel': channel = api.get_channel_info(channel_id=youtube_id) try: subscribers = int(channel.items[0].statistics.subscriberCount) or None except Exception: subscribers = None return subscribers