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

10,113

Solution 1

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)
            )

Solution 2

run the command

youtube-dl --print-json https://www.youtube.com/playlist?list=<playlist_id> > example.json

you can also uses the --get for retriving specific items for example

youtube-dl --get-title https://www.youtube.com/playlist?list=<playlist_id> > example.txt
Share:
10,113
Lara M.
Author by

Lara M.

Updated on June 07, 2022

Comments

  • Lara M.
    Lara M. about 2 years

    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.

  • Lara M.
    Lara M. about 7 years
    Thanks! I don't understand what for video in playlist_dict['entries']: print() does. What does it prints?
  • xjcl
    xjcl about 7 years
    It just prints an empty line to make it easier to tell the individual videos apart. It doesn't look that pretty if the description is long tho.
  • TipVisor
    TipVisor over 4 years
    how to save it to text file?
  • xjcl
    xjcl over 4 years
    @TipVisor There's many ways to save it in a text file, just google for "Redirect stdout Python" =)