Python youtube_dl 模块,DownloadError() 实例源码

我们从Python开源项目中,提取了以下9个代码示例,用于说明如何使用youtube_dl.DownloadError()

项目:ddmbot    作者:Budovi    | 项目源码 | 文件源码
def _get_stream_info(self):
        func = functools.partial(self._ytdl.extract_info, self._stream_url, download=False)
        try:
            info = await self._bot.loop.run_in_executor(None, func)
        except youtube_dl.DownloadError as e:
            await self._bot.message('Failed to obtain stream information: {}'.format(str(e)))
            return False
        if not self._stream_title:
            if 'twitch' in self._stream_url:  # TODO: regex should be much better
                self._stream_title = info.get('description')
            else:
                self._stream_title = info.get('title')
            if not self._stream_title:
                self._stream_title = '<untitled stream>'
        if 'url' not in info:
            await self._bot.message('Failed to extract stream URL, is the link valid?')
            return False
        self._stream_url = info['url']
        return True
项目:vlt-Music    作者:Mondanzo    | 项目源码 | 文件源码
def add(self, song_url: str, voice_client: discord.VoiceClient, user=None):
        try:
            song_player = await voice_client.create_ytdl_player(song_url, ytdl_options=ytdl_format_options)
        except youtube_dl.DownloadError:
            return youtube_dl.DownloadError
        except youtube_dl.SameFileError:
            return youtube_dl.SameFileError
        except youtube_dl.utils.ExtractorError:
            return youtube_dl.utils.ExtractorError
        except youtube_dl.utils.UnavailableVideoError:
            return youtube_dl.utils.UnavailableVideoError
        user_name = "********"
        if user is not None:
            user_name = user.display_name
        song = {"player": None, "url": song_player.url, "title": song_player.title,
                "uploader": song_player.uploader, "user": user_name}
        await self.__queue.put(song)
        return song

    # Get next song and delete it
项目:pyjam    作者:10se1ucgo    | 项目源码 | 文件源码
def run(self):
        song_urls = iter(self.song_urls)
        errors = []
        with youtube_dl.YoutubeDL(self.opts) as yt:
            while not self.is_aborted():
                try:
                    song_url = next(song_urls)
                    logger.info("Downloading audio/video from {url}".format(url=song_url))
                    try:
                        yt.download([song_url])
                    except youtube_dl.DownloadError:
                        errors.append(song_url)
                    self.downloaded += 100
                    wx.CallAfter(self.parent.download_update, message=self.downloaded)
                except StopIteration:
                    wx.CallAfter(self.parent.download_complete, errors=errors)
                    break
项目:pyjam    作者:10se1ucgo    | 项目源码 | 文件源码
def yt_extract(links):
    """Extract individual URLs from a playlist.

    Args:
        links (list[str]): A list of the URLs.

    Returns:
        list[str]: The list of extracted URLs.
    """
    songs = []
    with youtube_dl.YoutubeDL() as yt_dl:
        for url in links:
            try:
                result = yt_dl.extract_info(url, download=False, process=False)
            except youtube_dl.DownloadError:
                return songs

            if 'entries' in result:
                songs.extend(vid['url'] for vid in list(result['entries']))
            else:
                songs.append(url)
        return songs
项目:eitbapi    作者:erral    | 项目源码 | 文件源码
def episode(request):
    """ Get all the information and the video links from a given episode.
        How: use youtube-dl to get the information
    """
    episode_url = request.matchdict['episode_url']

    url = EITB_VIDEO_BASE_URL + episode_url
    try:
        playlist_title, playlist_id, video_title, video_id = episode_url.split('/')
    except ValueError:
        return {}

    result = {
        '@context': 'http://www.w3.org/ns/hydra/context.jsonld',
        '@id': request.route_url('episode', episode_url=episode_url),
        '@type': 'Episode',
        'parent': request.route_url('playlist', playlist_id=playlist_id),
    }

    try:
        ydl = youtube_dl.YoutubeDL({'outtmpl': '%(id)s%(ext)s'})
        video_data = ydl.extract_info(url, download=False)
    except youtube_dl.DownloadError:
        return result

    result.update(video_data)
    return result
项目:dogbot    作者:slice    | 项目源码 | 文件源码
def _play(self, ctx: DogbotContext, url, *, search=False):
        msg = await ctx.send(f'\N{INBOX TRAY} {random.choice(SEARCHING_TEXT)}')

        # grab the source
        url = 'ytsearch:' + url if search else url
        try:
            source = await YouTubeDLSource.create(url, ctx.bot)
        except youtube_dl.DownloadError:
            return await msg.edit(content='\U0001f4ed YouTube gave me nothing.')
        except YouTubeError as yterr:
            return await msg.edit(content='\N{CROSS MARK} ' + str(yterr))

        disp = '**{}**'.format(source.title)

        state = self.state_for(ctx.guild)

        if state.is_playing():
            # add it to the queue
            log.debug('Adding to queue.')
            state.queue.append(source)
            await msg.edit(content=f'\N{LINKED PAPERCLIPS} Added {disp} to queue.')
        else:
            # play immediately since we're not playing anything
            log.debug('Playing immediately.')
            state.play(source)
            await msg.edit(content=f'\N{MULTIPLE MUSICAL NOTES} Playing {disp}.')
项目:docker-compose-tor-demo    作者:rwestergren    | 项目源码 | 文件源码
def get_video_info(url):
    """
    Retrieve the YouTube videos' information without downloading it.

    Source: http://stackoverflow.com/questions/18054500/how-to-use-youtube-dl-\
            from-a-python-programm/18947879#18947879
    """
    ydl = youtube_dl.YoutubeDL()
    ydl.add_default_info_extractors()

    try:
        return ydl.extract_info(url, download=False)
    except youtube_dl.DownloadError:
        return None
项目:film-spider    作者:huzecong    | 项目源码 | 文件源码
def start_download(self, dic):
        writeln('[' + color('DOWN', 'cyan') + '] Starting download of %s from %s, saving as ID %d'
                % (dic['name'], dic['url'], dic['id']))
        # cur_option = self.options
        # cur_option['progress_hooks'] = [partial(self.download_progress, dic['id'])]
        # cur_option['outtmpl'] = 'video/' + str(dic['id']) + '/' + str(dic['id']) + r'.%(title)s-%(id)s.%(ext)s'
        # downloader = youtube_dl.YoutubeDL(cur_option)
        # try:
        #     downloader.download([dic['url']])
        #     self.download_progress(dic['id'], {'status': 'complete'})
        # except youtube_dl.DownloadError as e:
        #     writeln('[' + color('ERROR', 'red') + '] youtube_dl error for %s: ' % dic['name'] + e.message)
        #     self.download_progress(dic['id'], {'status': 'error'})
        self.download_progress(dic['id'], {'status': 'downloading'})
        outpath = 'video/' + str(dic['id']) + '/'
        try:
            os.makedirs(outpath)
        except:
            pass
        log = open(outpath + 'log.txt', 'w')
        process = subprocess.Popen(["you-get", dic['url']], stdout=log, stderr=subprocess.STDOUT, cwd=outpath)
        retcode = process.wait()
        log.close()
        log = open(outpath + 'log.txt', 'r')
        if retcode != 0 or ' '.join(log.readlines()).find('error') != -1:
            self.download_progress(dic['id'], {'status': 'error'})
        else:
            self.download_progress(dic['id'], {'status': 'complete'})
项目:plumeria    作者:sk89q    | 项目源码 | 文件源码
def play(message, url):
    """
    Play a URL.

    Example::

        /play https://www.youtube.com/watch?v=U9DZkj8Rq6g

    """

    m = LINK_PATTERN.search(url)
    if not m:
        raise CommandError("You need to provide a URL to play.")
    url = m.group(1)

    # check to see if we can play this URL
    opts = {
        'format': 'webm[abr>0]/bestaudio/best',
        'prefer_ffmpeg': True,
        'source_address': source_address(),
        'noplaylist': True,
    }
    ydl = youtube_dl.YoutubeDL(opts)
    func = functools.partial(ydl.extract_info, url, download=False)
    try:
        info = await asyncio.get_event_loop().run_in_executor(None, func)

        # get metadata
        is_twitch = 'twitch' in url
        if is_twitch:
            # twitch has 'title' and 'description' sort of mixed up
            title = info.get('description')
            description = None
        else:
            title = info.get('title')
            description = info.get('description')
    except DownloadError as e:
        raise CommandError("Can't play <{}>. It might not be a supported site.".format(url))

    # get the voice channel
    voice_client = await get_voice_client(message.author)
    queue = queue_map.get(voice_client.channel)

    # queue that stuff up
    async def factory(entry: QueueEntry):
        return await voice_client.create_ytdl_player(url, ytdl_options=opts, after=entry.on_end,
                                                     options=['-af', 'loudnorm=I=-16:TP=-1.5:LRA=11'])

    meta = EntryMeta(title=title, description=description, url=url)
    entry = await queue.add(factory, channel=voice_client.channel, meta=meta)

    # tell the user
    entries = queue.entries()
    index = entries.index(entry)
    if index == 0:
        return "Now playing **{}**...".format(meta)
    else:
        return "Queued **{}** at position #{} for play.".format(meta, index)