예제 #1
0
def _extract(
    query: str,
    ie_key: str = None,
    address: Union[ipaddress.IPv4Address, ipaddress.IPv6Address] = None,
    video: bool = False,
) -> dict:
    option = copy.copy(YTDLOption)

    if video:
        option["format"] = "(best)[protocol!=http_dash_segments]"

    if address:
        option["source_address"] = str(address)

    YoutubeDL = YoutubeDLClient(option)
    Data = YoutubeDL.extract_info(query, download=False, ie_key=ie_key)

    if not Data:
        raise NoSearchResults

    if "entries" in Data:
        if len(Data["entries"]) == 1:
            return Data["entries"][0]

        return Data["entries"]

    if not Data:
        raise NoSearchResults

    return Data
예제 #2
0
def _extract(query):
    option = {
        'format':
        '(bestaudio[ext=opus]/bestaudio/best)[protocol!=http_dash_segments]',
        'nocheckcertificate': True,
        'ignoreerrors': True,
        'no_warnings': True,
        'default_search': 'auto',
        'source_address': '0.0.0.0',
        'logger': log,
        'skip_download': True,
        'writesubtitles': True
    }

    YoutubePlaylistMatch = YOUTUBE_PLAYLIST_ID_REGEX.match(query)
    if YoutubePlaylistMatch:
        if YoutubePlaylistMatch.group(1).startswith(('RD', 'UL', 'PU')):
            option['playlist_items'] = '1-25'  # handle Youtube Mix Playlist

        option['playliststart'] = int(YoutubePlaylistMatch.group(
            2)) if YoutubePlaylistMatch.group(2).isdigit() else 1
        option['dump_single_json'] = True
        option['extract_flat'] = True
    else:
        option['noplaylist'] = True

    YoutubeDL = YoutubeDLClient(option)
    Data = YoutubeDL.extract_info(query, download=False)

    if 'entries' in Data:
        return Data['entries']

    return Data
예제 #3
0
def _extract(query: str, video: bool = False) -> dict:
    option = copy.copy(YTDLOption)

    if video:
        option["format"] = "(best)[protocol!=http_dash_segments]"

    YoutubePlaylistMatch = YOUTUBE_PLAYLIST_ID_REGEX.match(query)
    if YoutubePlaylistMatch and not YoutubePlaylistMatch.group(1).startswith(
        ("RD", "UL", "PU")):
        option["playliststart"] = (int(YoutubePlaylistMatch.group(2))
                                   if YoutubePlaylistMatch.group(2).isdigit()
                                   else 1)
        option["dump_single_json"] = True
        option["extract_flat"] = True
        query = "https://www.youtube.com/playlist?list=" + YoutubePlaylistMatch.group(
            1)
    else:
        option["noplaylist"] = True

    YoutubeDL = YoutubeDLClient(option)
    Data = YoutubeDL.extract_info(query, download=False)

    if not Data:
        raise NoSearchResults

    if "entries" in Data:
        if len(Data["entries"]) == 1:
            return Data["entries"][0]

        return Data["entries"]

    if not Data:
        raise NoSearchResults

    return Data
예제 #4
0
def _clear_cache() -> None:
    option = {
        "ignoreerrors": True,
        "no_warnings": True,
    }

    YoutubeDL = YoutubeDLClient(option)
    YoutubeDL.cache.remove()
예제 #5
0
def _extract(query: str) -> Optional[dict]:
    option = {
        "format": "(bestaudio[ext=opus]/bestaudio/best)[protocol!=http_dash_segments]",
        "nocheckcertificate": True,
        "ignoreerrors": True,
        "no_warnings": True,
        "default_search": "auto",
        "source_address": "0.0.0.0",
        "logger": log,
        "skip_download": True,
        "writesubtitles": True,
    }

    YoutubePlaylistMatch = YOUTUBE_PLAYLIST_ID_REGEX.match(query)
    if YoutubePlaylistMatch and not YoutubePlaylistMatch.group(1).startswith(
        ("RD", "UL", "PU")
    ):
        option["playliststart"] = (
            int(YoutubePlaylistMatch.group(2))
            if YoutubePlaylistMatch.group(2).isdigit()
            else 1
        )
        option["dump_single_json"] = True
        option["extract_flat"] = True
        query = "https://www.youtube.com/playlist?list=" + YoutubePlaylistMatch.group(1)
    else:
        option["noplaylist"] = True

    YoutubeDL = YoutubeDLClient(option)
    Data = YoutubeDL.extract_info(query, download=False)

    if not Data:
        raise NoSearchResults

    if "entries" in Data:
        if len(Data["entries"]) == 1:
            return Data["entries"][0]

        return Data["entries"]

    return Data
예제 #6
0
def _clear_cache():
    option = {"ignoreerrors": True, "no_warnings": True, "logger": log}

    YoutubeDL = YoutubeDLClient(option)
    YoutubeDL.cache.remove()