pythonpython-3.xyoutubeyoutube-dl

Get video information from a list of playlist with youtube-dl


I'm tryng to get some informations from a list of playlists in youtube with youtube-dl. I've written this code but what it takes is not the video's informations but the playlist informations (e.g. the playlist title instead of the video title in the playlist). I can't understand why.

input_file = open("url")
for video in input_file:
    print(video)
ydl_opts = {
    'ignoreerrors': True
}
    with youtube_dl.YoutubeDL(ydl_opts) as ydl: 
                info_dict = ydl.extract_info(video, download=False)
                for i in info_dict:
                    video_thumbnail = info_dict.get("thumbnail"),
                    video_id = info_dict.get("id"),
                    video_title = info_dict.get("title"),
                    video_description = info_dict.get("description"),
                    video_duration = info_dict.get("duration")

Any help will be appreciated.


Solution

  • The variable you call video actually holds the playlist information, not the video information. You can find a list of the individual video information in the playlist's entries attribute.

    See below for a possible fix. I renamed your video variable to playlist and took the freedom to rewrite it a bit and add output:

    import textwrap
    import youtube_dl
    
    playlists = [
        "https://www.youtube.com/playlist?list=PLRQGRBgN_EnrPrgmMGvrouKn7VlGGCx8m"
    ]
    
    for playlist in playlists:
    
        with youtube_dl.YoutubeDL({"ignoreerrors": True, "quiet": True}) as ydl:
            playlist_dict = ydl.extract_info(playlist, download=False)
    
        # Pretty-printing the video information (optional)
        for video in playlist_dict["entries"]:
            print("\n" + "*" * 60 + "\n")
    
            if not video:
                print("ERROR: Unable to get info. Continuing...")
                continue
    
            for prop in ["thumbnail", "id", "title", "description", "duration"]:
                print(prop + "\n" +
                    textwrap.indent(str(video.get(prop)), "    | ", lambda _: True)
                )