Git Product home page Git Product logo

youtube-search-python's Introduction

Search for YouTube videos, channels & playlists. Get video & playlist information using link. Get search suggestions. WITHOUT YouTube Data API v3.

There are no active project maintainers since 23rd June 2022. Details: Here

PyPI - Version PyPI - Downloads

Installing

pip3 install youtube-search-python

Sync

Search for only videos

from youtubesearchpython import VideosSearch

videosSearch = VideosSearch('NoCopyrightSounds', limit = 2)

print(videosSearch.result())
Example Result
{
    "result": [
        {
            "type": "video",
            "id": "K4DyBUG242c",
            "title": "Cartoon - On & On (feat. Daniel Levi) [NCS Release]",
            "publishedTime": "5 years ago",
            "duration": "3:28",
            "viewCount": {
                "text": "389,673,774 views",
                "short": "389M views"
            },
            "thumbnails": [
                {
                    "url": "https://i.ytimg.com/vi/K4DyBUG242c/hqdefault.jpg?sqp=-oaymwEjCOADEI4CSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBkTusCwcZQlmVAaRQ5rH-mvBuA1g",
                    "width": 480,
                    "height": 270
                }
            ],
            "richThumbnail": {
                "url": "https://i.ytimg.com/an_webp/K4DyBUG242c/mqdefault_6s.webp?du=3000&sqp=COCn64IG&rs=AOn4CLBeYxeJ_5lME4jXbFQlv7kIN37kmw",
                "width": 320,
                "height": 180
            },
            "descriptionSnippet": [
                {
                    "text": "NCS: Music Without Limitations NCS Spotify: http://spoti.fi/NCS Free Download / Stream: http://ncs.io/onandon \u25bd Connect with\u00a0..."
                }
            ],
            "channel": {
                "name": "NoCopyrightSounds",
                "id": "UC_aEa8K-EOJ3D6gOs7HcyNg",
                "thumbnails": [
                    {
                        "url": "https://yt3.ggpht.com/a-/AOh14GhS0G5FwV8rMhVCUWSDp36vWEvnNs5Vl97Zww=s68-c-k-c0x00ffffff-no-rj-mo",
                        "width": 68,
                        "height": 68
                    }
                ],
                "link": "https://www.youtube.com/channel/UC_aEa8K-EOJ3D6gOs7HcyNg"
            },
            "accessibility": {
                "title": "Cartoon - On & On (feat. Daniel Levi) [NCS Release] by NoCopyrightSounds 5 years ago 3 minutes, 28 seconds 389,673,774 views",
                "duration": "3 minutes, 28 seconds"
            },
            "link": "https://www.youtube.com/watch?v=K4DyBUG242c",
            "shelfTitle": null
        },
        {
            "type": "video",
            "id": "yJg-Y5byMMw",
            "title": "Warriyo - Mortals (feat. Laura Brehm) [NCS Release]",
            "publishedTime": "3 years ago",
            "duration": "3:50",
            "viewCount": {
                "text": "153,353,801 views",
                "short": "153M views"
            },
            "thumbnails": [
                {
                    "url": "https://i.ytimg.com/vi/yJg-Y5byMMw/hqdefault.jpg?sqp=-oaymwEjCOADEI4CSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDY-mve79IweErMo-71AsKEIB1m0A",
                    "width": 480,
                    "height": 270
                }
            ],
            "richThumbnail": {
                "url": "https://i.ytimg.com/an_webp/K4DyBUG242c/mqdefault_6s.webp?du=3000&sqp=COCn64IG&rs=AOn4CLBeYxeJ_5lME4jXbFQlv7kIN37kmw",
                "width": 320,
                "height": 180
            },
            "descriptionSnippet": [
                {
                    "text": "NCS: Music Without Limitations NCS Spotify: http://spoti.fi/NCS Free Download / Stream: http://ncs.io/mortals Connect with NCS:\u00a0..."
                }
            ],
            "channel": {
                "name": "NoCopyrightSounds",
                "id": "UC_aEa8K-EOJ3D6gOs7HcyNg",
                "thumbnails": [
                    {
                        "url": "https://yt3.ggpht.com/a-/AOh14GhS0G5FwV8rMhVCUWSDp36vWEvnNs5Vl97Zww=s68-c-k-c0x00ffffff-no-rj-mo",
                        "width": 68,
                        "height": 68
                    }
                ],
                "link": "https://www.youtube.com/channel/UC_aEa8K-EOJ3D6gOs7HcyNg"
            },
            "accessibility": {
                "title": "Warriyo - Mortals (feat. Laura Brehm) [NCS Release] by NoCopyrightSounds 3 years ago 3 minutes, 50 seconds 153,353,801 views",
                "duration": "3 minutes, 50 seconds"
            },
            "link": "https://www.youtube.com/watch?v=yJg-Y5byMMw",
            "shelfTitle": null
        }
    ]
}

Async

Search for only videos

from youtubesearchpython.__future__ import VideosSearch

videosSearch = VideosSearch('NoCopyrightSounds', limit = 2)
videosResult = await videosSearch.next()
print(videosResult)

Read more about usage & examples of newer asynchronous version of this library HERE.

More Examples

Search for only channels

from youtubesearchpython import ChannelsSearch

channelsSearch = ChannelsSearch('NoCopyrightSounds', limit = 10, region = 'US')

print(channelsSearch.result())
Example Result
{
    "result": [
        {
            "type": "channel",
            "id": "UC_aEa8K-EOJ3D6gOs7HcyNg",
            "title": "NoCopyrightSounds",
            "thumbnails": [
                {
                    "url": "//yt3.ggpht.com/ytc/AAUvwngbenDpBxHNZlecDGyccHeVyQB22dPZnPuhbW8LHw=s88-c-k-c0x00ffffff-no-rj-mo",
                    "width": 88,
                    "height": 88
                },
                {
                    "url": "//yt3.ggpht.com/ytc/AAUvwngbenDpBxHNZlecDGyccHeVyQB22dPZnPuhbW8LHw=s176-c-k-c0x00ffffff-no-rj-mo",
                    "width": 176,
                    "height": 176
                }
            ],
            "videoCount": "850",
            "descriptionSnippet": [
                {
                    "text": "NoCopyrightSounds",
                    "bold": true
                },
                {
                    "text": " is a copyright free / stream safe record label, providing free to use music to the content creator community."
                }
            ],
            "subscribers": "28.7M subscribers",
            "link": "https://www.youtube.com/channel/UC_aEa8K-EOJ3D6gOs7HcyNg"
        },
        {
            "type": "channel",
            "id": "UCg-vlcyvOyNVPV6Neogmubg",
            "title": "NoCopyrightSounds Hindi",
            "thumbnails": [
                {
                    "url": "//yt3.ggpht.com/ytc/AAUvwnjDHXULXSvX7u71Rmb2f-Cqly0ron2F1N3szu8Y=s88-c-k-c0x00ffffff-no-rj-mo",
                    "width": 88,
                    "height": 88
                },
                {
                    "url": "//yt3.ggpht.com/ytc/AAUvwnjDHXULXSvX7u71Rmb2f-Cqly0ron2F1N3szu8Y=s176-c-k-c0x00ffffff-no-rj-mo",
                    "width": 176,
                    "height": 176
                }
            ],
            "videoCount": "56",
            "descriptionSnippet": [
                {
                    "text": "The Official NCS HINDI Songs Channel for Nocopyright hindi audios."
                }
            ],
            "subscribers": "13.7K subscribers",
            "link": "https://www.youtube.com/channel/UCg-vlcyvOyNVPV6Neogmubg"
        },
        {
            "type": "channel",
            "id": "UCrL9x8LllOU2LOVgTo951kA",
            "title": "NoCopyrightSounds",
            "thumbnails": [
                {
                    "url": "//yt3.ggpht.com/ytc/AAUvwnhXShCsmo9VwL4KC8j3GNHgHyBBJ0RCmbAUKrwg=s88-c-k-c0x00ffffff-no-rj-mo",
                    "width": 88,
                    "height": 88
                },
                {
                    "url": "//yt3.ggpht.com/ytc/AAUvwnhXShCsmo9VwL4KC8j3GNHgHyBBJ0RCmbAUKrwg=s176-c-k-c0x00ffffff-no-rj-mo",
                    "width": 176,
                    "height": 176
                }
            ],
            "videoCount": "2",
            "descriptionSnippet": [
                {
                    "text": "NCS [NopCopyrightSounds] is a channel dedicated to promoting the best FREE DOWNLOAD music on the net. Every track\u00a0..."
                }
            ],
            "subscribers": "1.71K subscribers",
            "link": "https://www.youtube.com/channel/UCrL9x8LllOU2LOVgTo951kA"
        },
        {
            "type": "channel",
            "id": "UCYZvaL6G3m4-UbvWGlyFeLg",
            "title": "NoCopyrightSounds",
            "thumbnails": [
                {
                    "url": "//yt3.ggpht.com/ytc/AAUvwnisxA4V_U0Ffh0K-cdnqwGZjs62hKv2-IAfzIqc=s88-c-k-c0x00ffffff-no-rj-mo",
                    "width": 88,
                    "height": 88
                },
                {
                    "url": "//yt3.ggpht.com/ytc/AAUvwnisxA4V_U0Ffh0K-cdnqwGZjs62hKv2-IAfzIqc=s176-c-k-c0x00ffffff-no-rj-mo",
                    "width": 176,
                    "height": 176
                }
            ],
            "videoCount": "33",
            "descriptionSnippet": null,
            "subscribers": null,
            "link": "https://www.youtube.com/channel/UCYZvaL6G3m4-UbvWGlyFeLg"
        },
        {
            "type": "channel",
            "id": "UCi7xVhyWWf2eTc0GO0Ty9HQ",
            "title": "NoCopyrightSounds",
            "thumbnails": [
                {
                    "url": "//yt3.ggpht.com/ytc/AAUvwngOJ2zbLEkNs96PNp0g9h27l64mwRFhR1vZ9W7u=s88-c-k-c0x00ffffff-no-rj-mo",
                    "width": 88,
                    "height": 88
                },
                {
                    "url": "//yt3.ggpht.com/ytc/AAUvwngOJ2zbLEkNs96PNp0g9h27l64mwRFhR1vZ9W7u=s176-c-k-c0x00ffffff-no-rj-mo",
                    "width": 176,
                    "height": 176
                }
            ],
            "videoCount": "1 video",
            "descriptionSnippet": null,
            "subscribers": "2 subscribers",
            "link": "https://www.youtube.com/channel/UCi7xVhyWWf2eTc0GO0Ty9HQ"
        },
        {
            "type": "channel",
            "id": "UCOSiFTIAReRzkPBXaQAuXCQ",
            "title": "NoCopyrightSounds",
            "thumbnails": [
                {
                    "url": "//yt3.ggpht.com/ytc/AAUvwng1UBDlLdYyqTofL6x_5hqPMTFnMXxAN9C9_t8Y=s88-c-k-c0x00ffffff-no-rj-mo",
                    "width": 88,
                    "height": 88
                },
                {
                    "url": "//yt3.ggpht.com/ytc/AAUvwng1UBDlLdYyqTofL6x_5hqPMTFnMXxAN9C9_t8Y=s176-c-k-c0x00ffffff-no-rj-mo",
                    "width": 176,
                    "height": 176
                }
            ],
            "videoCount": "8",
            "descriptionSnippet": [
                {
                    "text": "YGW MEDIA GROUP 04."
                }
            ],
            "subscribers": "11 subscribers",
            "link": "https://www.youtube.com/channel/UCOSiFTIAReRzkPBXaQAuXCQ"
        },
        {
            "type": "channel",
            "id": "UCSFpIv5SZlg4ub_IWgGKkIA",
            "title": "NoCopyrightSounds Lyrics",
            "thumbnails": [
                {
                    "url": "//yt3.ggpht.com/ytc/AAUvwng_J1igSuKFWowZ8OFpT1dPCPgzqEvVkGImwM3Dpg=s88-c-k-c0x00ffffff-no-rj-mo",
                    "width": 88,
                    "height": 88
                },
                {
                    "url": "//yt3.ggpht.com/ytc/AAUvwng_J1igSuKFWowZ8OFpT1dPCPgzqEvVkGImwM3Dpg=s176-c-k-c0x00ffffff-no-rj-mo",
                    "width": 176,
                    "height": 176
                }
            ],
            "videoCount": "82",
            "descriptionSnippet": [
                {
                    "text": "Welcome To "
                },
                {
                    "text": "NoCopyrightSounds",
                    "bold": true
                },
                {
                    "text": " Lyrics "
                },
                {
                    "text": "NoCopyrightSounds",
                    "bold": true
                },
                {
                    "text": " lyrics provides music from a variety of licenses that are certainly\u00a0..."
                }
            ],
            "subscribers": null,
            "link": "https://www.youtube.com/channel/UCSFpIv5SZlg4ub_IWgGKkIA"
        },
        {
            "type": "channel",
            "id": "UCcE-Gvu5j55MdREM1a4_EqA",
            "title": "NoCopyrightSounds",
            "thumbnails": [
                {
                    "url": "//yt3.ggpht.com/ytc/AAUvwnhbzZwQIVabdGA1SteO2BCtmrG3uT_cpzmJvtBY=s88-c-k-c0x00ffffff-no-rj-mo",
                    "width": 88,
                    "height": 88
                },
                {
                    "url": "//yt3.ggpht.com/ytc/AAUvwnhbzZwQIVabdGA1SteO2BCtmrG3uT_cpzmJvtBY=s176-c-k-c0x00ffffff-no-rj-mo",
                    "width": 176,
                    "height": 176
                }
            ],
            "videoCount": "6",
            "descriptionSnippet": null,
            "subscribers": "166 subscribers",
            "link": "https://www.youtube.com/channel/UCcE-Gvu5j55MdREM1a4_EqA"
        },
        {
            "type": "channel",
            "id": "UCCOWDgeFmwW--woYtCYws8Q",
            "title": "NoCopyrightSounds 1 HOUR",
            "thumbnails": [
                {
                    "url": "//yt3.ggpht.com/ytc/AAUvwnipj6lV7p6i8Mq7uAlDj5qHsQkiwgwdtPs_vCKy=s88-c-k-c0x00ffffff-no-rj-mo",
                    "width": 88,
                    "height": 88
                },
                {
                    "url": "//yt3.ggpht.com/ytc/AAUvwnipj6lV7p6i8Mq7uAlDj5qHsQkiwgwdtPs_vCKy=s176-c-k-c0x00ffffff-no-rj-mo",
                    "width": 176,
                    "height": 176
                }
            ],
            "videoCount": "689",
            "descriptionSnippet": [
                {
                    "text": "NoCopyrightSounds",
                    "bold": true
                },
                {
                    "text": " is a record label dedicated to releasing FREE music for the sole purpose of providing creators with the finest\u00a0..."
                }
            ],
            "subscribers": null,
            "link": "https://www.youtube.com/channel/UCCOWDgeFmwW--woYtCYws8Q"
        },
        {
            "type": "channel",
            "id": "UCSI5zGuirscirQc6UOy_yww",
            "title": "NoCopyrightSounds",
            "thumbnails": [
                {
                    "url": "//yt3.ggpht.com/ytc/AAUvwni92w-CAOUnlNfyIVxdCmvMoQmENZbw1wjFOQKjug=s88-c-k-c0x00ffffff-no-rj-mo",
                    "width": 88,
                    "height": 88
                },
                {
                    "url": "//yt3.ggpht.com/ytc/AAUvwni92w-CAOUnlNfyIVxdCmvMoQmENZbw1wjFOQKjug=s176-c-k-c0x00ffffff-no-rj-mo",
                    "width": 176,
                    "height": 176
                }
            ],
            "videoCount": "29",
            "descriptionSnippet": [
                {
                    "text": "NoCopyrightSounds",
                    "bold": true
                },
                {
                    "text": " is a Record Label dedicated to giving a platform to the next generation of Artists in Electronic Music,\u00a0..."
                }
            ],
            "subscribers": null,
            "link": "https://www.youtube.com/channel/UCSI5zGuirscirQc6UOy_yww"
        }
    ]
}

Search for only playlists

from youtubesearchpython import PlaylistsSearch

playlistsSearch = PlaylistsSearch('NoCopyrightSounds', limit = 1)

print(playlistsSearch.result())
Example Result
{
    "result": [
        {
            "type": "playlist",
            "id": "PLGde6kPURikrUszpUgafLZiOgr5o7pBF0",
            "title": "NoCopyrightSounds",
            "videoCount": "6",
            "channel": {
                "name": "Bruno Neves",
                "id": "UCtqpCV2HkMCSi5InFNBNv0g",
                "link": "https://www.youtube.com/channel/UCtqpCV2HkMCSi5InFNBNv0g"
            },
            "thumbnails": [
                {
                    "url": "https://i.ytimg.com/vi/K4DyBUG242c/hqdefault.jpg?sqp=-oaymwEWCKgBEF5IWvKriqkDCQgBFQAAiEIYAQ==&rs=AOn4CLBw6Bf7J9COwl1LxqhmGbSQgdFj3w",
                    "width": 168,
                    "height": 94
                },
                {
                    "url": "https://i.ytimg.com/vi/K4DyBUG242c/hqdefault.jpg?sqp=-oaymwEWCMQBEG5IWvKriqkDCQgBFQAAiEIYAQ==&rs=AOn4CLBjJCIZlrSGSPjc-7yKc0QQuWRdhg",
                    "width": 196,
                    "height": 110
                },
                {
                    "url": "https://i.ytimg.com/vi/K4DyBUG242c/hqdefault.jpg?sqp=-oaymwEXCPYBEIoBSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLCRIQ0IochteE0KM2tlK2PVVAQKhA",
                    "width": 246,
                    "height": 138
                },
                {
                    "url": "https://i.ytimg.com/vi/K4DyBUG242c/hqdefault.jpg?sqp=-oaymwEXCNACELwBSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLAQYBDz8gWKw_q4Zyb_H6J_DdZCaA",
                    "width": 336,
                    "height": 188
                }
            ],
            "link": "https://www.youtube.com/playlist?list=PLGde6kPURikrUszpUgafLZiOgr5o7pBF0"
        }
    ]
}

Search with a filter or sort

from youtubesearchpython import *

customSearch = CustomSearch('NoCopyrightSounds', VideoSortOrder.uploadDate, limit = 1)

print(customSearch.result())
Example Result
{
    "result": [
        {
            "type": "video",
            "id": "k8-drvf4Ruo",
            "title": "Ambient Music 2020 \ud83c\udfb5 voices \ud83c\udfb5 NoCopyrightSounds",
            "publishedTime": "30 minutes ago",
            "duration": "2:29",
            "viewCount": {
                "text": "4 views",
                "short": "4 views"
            },
            "thumbnails": [
                {
                    "url": "https://i.ytimg.com/vi/k8-drvf4Ruo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDomB-9ivVHpwci6STdNAqQBMBzJA",
                    "width": 360,
                    "height": 202
                },
                {
                    "url": "https://i.ytimg.com/vi/k8-drvf4Ruo/hq720.jpg?sqp=-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLCPrVwYygJ3627h8F-oU3khKehm4g",
                    "width": 720,
                    "height": 404
                }
            ],
            "richThumbnail": {
                "url": "https://i.ytimg.com/an_webp/K4DyBUG242c/mqdefault_6s.webp?du=3000&sqp=COCn64IG&rs=AOn4CLBeYxeJ_5lME4jXbFQlv7kIN37kmw",
                "width": 320,
                "height": 180
            },
            "descriptionSnippet": [
                {
                    "text": "Don't forget to like & share if you enjoy it."
                }
            ],
            "channel": {
                "name": "Sky Sound",
                "id": "UCQT8W5qZn7TCZBW39dVoaBw",
                "thumbnails": [
                    {
                        "url": "https://yt3.ggpht.com/a-/AOh14GhxrkkF27iL3sLTKzWLu3rrO-qtQ7uMPg4SqA=s68-c-k-c0x00ffffff-no-rj-mo",
                        "width": 68,
                        "height": 68
                    }
                ],
                "link": "https://www.youtube.com/channel/UCQT8W5qZn7TCZBW39dVoaBw"
            },
            "accessibility": {
                "title": "Ambient Music 2020 \ud83c\udfb5 voices \ud83c\udfb5 NoCopyrightSounds by Sky Sound 30 minutes ago 2 minutes, 29 seconds 4 views",
                "duration": "2 minutes, 29 seconds"
            },
            "link": "https://www.youtube.com/watch?v=k8-drvf4Ruo",
            "shelfTitle": null
        }
    ]
}

Search for everything

from youtubesearchpython import Search

allSearch = Search('NoCopyrightSounds', limit = 1)

print(allSearch.result())
Example Result
{
    "result": [
        {
            "type": "channel",
            "id": "UC_aEa8K-EOJ3D6gOs7HcyNg",
            "title": "NoCopyrightSounds",
            "thumbnails": [
                {
                    "url": "//yt3.ggpht.com/ytc/AAUvwngbenDpBxHNZlecDGyccHeVyQB22dPZnPuhbW8LHw=s88-c-k-c0x00ffffff-no-rj-mo",
                    "width": 88,
                    "height": 88
                },
                {
                    "url": "//yt3.ggpht.com/ytc/AAUvwngbenDpBxHNZlecDGyccHeVyQB22dPZnPuhbW8LHw=s176-c-k-c0x00ffffff-no-rj-mo",
                    "width": 176,
                    "height": 176
                }
            ],
            "videoCount": "850",
            "descriptionSnippet": [
                {
                    "text": "NoCopyrightSounds",
                    "bold": true
                },
                {
                    "text": " is a copyright free / stream safe record label, providing free to use music to the content creator community."
                }
            ],
            "subscribers": "28.7M subscribers",
            "link": "https://www.youtube.com/channel/UC_aEa8K-EOJ3D6gOs7HcyNg"
        },
    ]
}

You may see the example for more information.

Advanced

Getting next page search results

You may call next method as follows, to get the results on the next pages.

Calling result method after calling next will give you result on that the next page.

from youtubesearchpython import VideosSearch

search = VideosSearch('NoCopyrightSounds')

print(search.result()['result'])

''' Getting result from 2nd page. '''
search.next()
print(search.result()['result'])

''' Getting result from 3rd page. '''
search.next()
print(search.result()['result'])

''' Getting result from 4th page. '''
search.next()
print(search.result()['result'])

Getting video information using video link or video ID

'''
Getting information about video or its formats using video link or video ID.

`Video.get` method will give both information & formats of the video
`Video.getInfo` method will give only information about the video.
`Video.getFormats` method will give only formats of the video.

You may either pass link or ID, method will take care itself.

YouTube doesn't provide uploadDate and publishDate in its InnerTube API, thus we have to use HTML requests to get it.
This is disabled by default as it is very inefficient, but if you really need it, you can explicitly set parameter to Video.get() function: get_upload_date=True
By default, we use InnerTube API for Video.get() and Video.getFormats(), meanwhile we use HTML parsing on Video.getInfo()
You can set get_upload_date ONLY TO Video.get(), as you don't get info with Video.getFormats()
'''
video = Video.get('https://www.youtube.com/watch?v=z0GKGpObgPY', mode = ResultMode.json, get_upload_date=True)
print(video)
videoInfo = Video.getInfo('https://youtu.be/z0GKGpObgPY', mode = ResultMode.json)
print(videoInfo)
videoFormats = Video.getFormats('z0GKGpObgPY')
print(videoFormats)
Example Result
{
    "id": "E07s5ZYygMg",
    "title": "Harry Styles - Watermelon Sugar (Official Video)",
    "viewCount": {
        "text": "170389228"
    },
    "thumbnails": [
        {
            "url": "https://i.ytimg.com/vi/E07s5ZYygMg/hqdefault.jpg?sqp=-oaymwEiCKgBEF5IWvKriqkDFQgBFQAAAAAYASUAAMhCPQCAokN4AQ==&rs=AOn4CLCT6nkbmYf-zbqAFgzF0D9PUhtsOQ",
            "width": 168,
            "height": 94
        },
        {
            "url": "https://i.ytimg.com/vi/E07s5ZYygMg/hqdefault.jpg?sqp=-oaymwEiCMQBEG5IWvKriqkDFQgBFQAAAAAYASUAAMhCPQCAokN4AQ==&rs=AOn4CLA-JdoctyNp4aaj9dVtR0c6l5RDVw",
            "width": 196,
            "height": 110
        },
        {
            "url": "https://i.ytimg.com/vi/E07s5ZYygMg/hqdefault.jpg?sqp=-oaymwEjCPYBEIoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBquHs9OWY5Dy1nE_syglwKP6-pMw",
            "width": 246,
            "height": 138
        },
        {
            "url": "https://i.ytimg.com/vi/E07s5ZYygMg/hqdefault.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDSjHwdHxt9aU8NTojucGLp4PurTA",
            "width": 336,
            "height": 188
        },
        {
            "url": "https://i.ytimg.com/vi/E07s5ZYygMg/maxresdefault.jpg?v=5ebedc0c",
            "width": 1920,
            "height": 1080
        }
    ],
    "description": "This video is dedicated to touching.\nListen to Harry Styles\u2019 new album \u2018Fine Line\u2019 now: https://HStyles.lnk.to/FineLineAY \n\nFollow Harry Styles:\nFacebook: https://HarryStyles.lnk.to/followFI\nInstagram: https://HarryStyles.lnk.to/followII\nTwitter: https://HarryStyles.lnk.to/followTI\nWebsite: https://HarryStyles.lnk.to/followWI\nSpotify: https://HarryStyles.lnk.to/followSI\nYouTube: https://HarryStyles.lnk.to/subscribeYD\n\nLyrics: \n\nTastes like strawberries\nOn a summer evening\nAnd it sounds just like a song\nI want more berries\nAnd that summer feeling\nIt\u2019s so wonderful and warm\nBreathe me in\nBreathe me out\nI don\u2019t know if I could ever go without\nI\u2019m just thinking out loud\nI don\u2019t know if I could ever go without\n \nWatermelon sugar high\nWatermelon sugar high\nWatermelon sugar high\nWatermelon sugar high\nWatermelon sugar\n \nStrawberries\nOn a summer evening\nBaby, you\u2019re the end of June\nI want your belly\nAnd that summer feeling\nGetting washed away in you\nBreathe me in\nBreathe me out\nI don\u2019t know if I could ever go without\n \nWatermelon sugar high\n \nI just wanna taste it\nI just wanna taste it\nWatermelon sugar high\n \nTastes like strawberries\nOn a summer evening\nAnd it sounds just like a song\nI want your belly\nAnd that summer feeling\nI don\u2019t know if I could ever go without\n \nWatermelon sugar high\n \nI just wanna taste it\nI just wanna taste it\nWatermelon sugar high\nI just wanna taste it\nI just wanna taste it\nWatermelon sugar high\n \nWatermelon Sugar\n\n#HarryStyles #WatermelonSugar #FineLine",
    "channel": {
        "name": "HarryStylesVEVO",
        "id": "UCbOCbp5gXL8jigIBZLqMPrw",
        "link": "https://www.youtube.com/channel/UCbOCbp5gXL8jigIBZLqMPrw"
    },
    "averageRating": 4.9043722,
    "keywords": [
        "Fine Line",
        "Harry Styles Fine Line",
        "New Harry Styles",
        "Harry Styles Album",
        "HS2",
        "One Direction",
        "Eroda",
        "HStyles",
        "HarryStyles",
        "New HS",
        "Watermelon",
        "Sugar",
        "Watermlon Sugar",
        "Harry Styles Watermelon Sugar",
        "Fine Line Watermelon Sugar",
        "Watermelon Sugar Fine Line",
        "Harry Styles Watermelon Sguar Official Audio",
        "Harry Styles Watermelon Sugar Song",
        "HS Watermelon Sugar",
        "Harry Styles Watermelon Sugar Video",
        "Harry Styles Watermelon Sugar Official Video",
        "Harry"
    ],
    "link": "https://www.youtube.com/watch?v=E07s5ZYygMg",
    "streamingData": [
        {
            "adaptiveFormats": [
                {
                    "itag": 137,
                    "mimeType": "video/mp4; codecs=\"avc1.640028\"",
                    "bitrate": 4517689,
                    "width": 1920,
                    "height": 1080,
                    "initRange": {
                        "start": "0",
                        "end": "740"
                    },
                    "indexRange": {
                        "start": "741",
                        "end": "1228"
                    },
                    "lastModified": "1601811652909447",
                    "contentLength": "75694686",
                    "quality": "hd1080",
                    "fps": 24,
                    "qualityLabel": "1080p",
                    "projectionType": "RECTANGULAR",
                    "averageBitrate": 3207181,
                    "approxDurationMs": "188813",
                    "signatureCipher": "s=F%3DX%3DgIkn_MWCUvQZ__3tR_7gPNDBeOz8n9M0WGxNtIZ6zwxAiA-VALQ9F5bz%3DW8I_Z8WfXPLHjEGEn_JRVVu7BcNJJfjKAhIARw8JQ0qOAAOAQ&sp=sig&url=https://r7---sn-gwpa-5bge.googlevideo.com/videoplayback%3Fexpire%3D1609521167%26ei%3DrwPvX6ayN7GImgel4b2YDg%26ip%3D132.154.228.240%26id%3Do-AB56znPv_llgJ0v0XuIn4mf-4F2feyfn78hi9AowVgJP%26itag%3D137%26aitags%3D133%252C134%252C135%252C136%252C137%252C160%252C242%252C243%252C244%252C247%252C248%252C278%252C394%252C395%252C396%252C397%252C398%252C399%26source%3Dyoutube%26requiressl%3Dyes%26mh%3DCl%26mm%3D31%252C29%26mn%3Dsn-gwpa-5bge%252Csn-gwpa-qxay%26ms%3Dau%252Crdu%26mv%3Dm%26mvi%3D7%26pcm2cms%3Dyes%26pl%3D19%26gcr%3Din%26initcwndbps%3D156250%26vprv%3D1%26mime%3Dvideo%252Fmp4%26ns%3DAmm7Bly72tYhQYuUBTu4ougF%26gir%3Dyes%26clen%3D75694686%26dur%3D188.813%26lmt%3D1601811652909447%26mt%3D1609499069%26fvip%3D7%26keepalive%3Dyes%26c%3DWEB%26txp%3D5535432%26n%3DRBQO4tIQGFK2ymlT%26sparams%3Dexpire%252Cei%252Cip%252Cid%252Caitags%252Csource%252Crequiressl%252Cgcr%252Cvprv%252Cmime%252Cns%252Cgir%252Cclen%252Cdur%252Clmt%26lsparams%3Dmh%252Cmm%252Cmn%252Cms%252Cmv%252Cmvi%252Cpcm2cms%252Cpl%252Cinitcwndbps%26lsig%3DAG3C_xAwRQIgTGJdeFFnVZy97rzAeBnJCSdcY7KWBCa21RQ9ZvkH0KsCIQD1-Vzcj53p39l_DWtK1b69VjQmtBi_SIZOZD0hzXHJNA%253D%253D"
                },
                {
                    "itag": 248,
                    "mimeType": "video/webm; codecs=\"vp9\"",
                    "bitrate": 2677426,
                    "width": 1920,
                    "height": 1080,
                    "initRange": {
                        "start": "0",
                        "end": "219"
                    },
                    "indexRange": {
                        "start": "220",
                        "end": "861"
                    },
                    "lastModified": "1594499920972798",
                    "contentLength": "54314997",
                    "quality": "hd1080",
                    "fps": 24,
                    "qualityLabel": "1080p",
                    "projectionType": "RECTANGULAR",
                    "averageBitrate": 2301324,
                    "colorInfo": {
                        "primaries": "COLOR_PRIMARIES_BT709",
                        "transferCharacteristics": "COLOR_TRANSFER_CHARACTERISTICS_BT709",
                        "matrixCoefficients": "COLOR_MATRIX_COEFFICIENTS_BT709"
                    },
                    "approxDurationMs": "188813",
                    "signatureCipher": "s=4WSWyDZ4VUW0FxNi5blaiF4ilQNYR-3uChA822Y034mMGICMPJy_OPOcgmaH7OjHiz7P3SA11EXoi7xWDBddADzQhXgIARw8JQ0qOAAOAA&sp=sig&url=https://r7---sn-gwpa-5bge.googlevideo.com/videoplayback%3Fexpire%3D1609521167%26ei%3DrwPvX6ayN7GImgel4b2YDg%26ip%3D132.154.228.240%26id%3Do-AB56znPv_llgJ0v0XuIn4mf-4F2feyfn78hi9AowVgJP%26itag%3D248%26aitags%3D133%252C134%252C135%252C136%252C137%252C160%252C242%252C243%252C244%252C247%252C248%252C278%252C394%252C395%252C396%252C397%252C398%252C399%26source%3Dyoutube%26requiressl%3Dyes%26mh%3DCl%26mm%3D31%252C29%26mn%3Dsn-gwpa-5bge%252Csn-gwpa-qxay%26ms%3Dau%252Crdu%26mv%3Dm%26mvi%3D7%26pcm2cms%3Dyes%26pl%3D19%26gcr%3Din%26initcwndbps%3D156250%26vprv%3D1%26mime%3Dvideo%252Fwebm%26ns%3DAmm7Bly72tYhQYuUBTu4ougF%26gir%3Dyes%26clen%3D54314997%26dur%3D188.813%26lmt%3D1594499920972798%26mt%3D1609499069%26fvip%3D7%26keepalive%3Dyes%26c%3DWEB%26txp%3D5535432%26n%3DRBQO4tIQGFK2ymlT%26sparams%3Dexpire%252Cei%252Cip%252Cid%252Caitags%252Csource%252Crequiressl%252Cgcr%252Cvprv%252Cmime%252Cns%252Cgir%252Cclen%252Cdur%252Clmt%26lsparams%3Dmh%252Cmm%252Cmn%252Cms%252Cmv%252Cmvi%252Cpcm2cms%252Cpl%252Cinitcwndbps%26lsig%3DAG3C_xAwRgIhAJHI4m9CrBPc-vEl_qXPYvACMjDAgC7dGWk5cZ5yc4DTAiEA36ijZkSFmCngvJZ5ULpRFJLGB3wWohsxABHZJL_q4_c%253D"
                },
                {
                    "itag": 399,
                    "mimeType": "video/mp4; codecs=\"av01.0.08M.08\"",
                    "bitrate": 2252425,
                    "width": 1920,
                    "height": 1080,
                    "initRange": {
                        "start": "0",
                        "end": "699"
                    },
                    "indexRange": {
                        "start": "700",
                        "end": "1187"
                    },
                    "lastModified": "1602396935824004",
                    "contentLength": "40536309",
                    "quality": "hd1080",
                    "fps": 24,
                    "qualityLabel": "1080p",
                    "projectionType": "RECTANGULAR",
                    "averageBitrate": 1717521,
                    "colorInfo": {
                        "primaries": "COLOR_PRIMARIES_BT709",
                        "transferCharacteristics": "COLOR_TRANSFER_CHARACTERISTICS_BT709",
                        "matrixCoefficients": "COLOR_MATRIX_COEFFICIENTS_BT709"
                    },
                    "approxDurationMs": "188813",
                    "signatureCipher": "s=ZJwJxM3AbUoW4wiucKj-hgbD-KpvS21BYBD1lsDZa7SPCICMZo9flYaa2ePw-6CdA1a_DwNtjbk4KXaTb0U1btiIfDgIARw8JQ0qOAAOAA&sp=sig&url=https://r7---sn-gwpa-5bge.googlevideo.com/videoplayback%3Fexpire%3D1609521167%26ei%3DrwPvX6ayN7GImgel4b2YDg%26ip%3D132.154.228.240%26id%3Do-AB56znPv_llgJ0v0XuIn4mf-4F2feyfn78hi9AowVgJP%26itag%3D399%26aitags%3D133%252C134%252C135%252C136%252C137%252C160%252C242%252C243%252C244%252C247%252C248%252C278%252C394%252C395%252C396%252C397%252C398%252C399%26source%3Dyoutube%26requiressl%3Dyes%26mh%3DCl%26mm%3D31%252C29%26mn%3Dsn-gwpa-5bge%252Csn-gwpa-qxay%26ms%3Dau%252Crdu%26mv%3Dm%26mvi%3D7%26pcm2cms%3Dyes%26pl%3D19%26gcr%3Din%26initcwndbps%3D156250%26vprv%3D1%26mime%3Dvideo%252Fmp4%26ns%3DAmm7Bly72tYhQYuUBTu4ougF%26gir%3Dyes%26clen%3D40536309%26dur%3D188.813%26lmt%3D1602396935824004%26mt%3D1609499069%26fvip%3D7%26keepalive%3Dyes%26c%3DWEB%26txp%3D5531432%26n%3DRBQO4tIQGFK2ymlT%26sparams%3Dexpire%252Cei%252Cip%252Cid%252Caitags%252Csource%252Crequiressl%252Cgcr%252Cvprv%252Cmime%252Cns%252Cgir%252Cclen%252Cdur%252Clmt%26lsparams%3Dmh%252Cmm%252Cmn%252Cms%252Cmv%252Cmvi%252Cpcm2cms%252Cpl%252Cinitcwndbps%26lsig%3DAG3C_xAwRAIgB9Jm-n4o3HkYm1cr2pVG9NLb_7Tmp22lXGwKkWSiwZ0CIBKSMK5PqbPHniDqOFCPoqa4eT_Y8hQDSWM7k_V8A99p"
                },
                {
                    "itag": 136,
                    "mimeType": "video/mp4; codecs=\"avc1.4d401f\"",
                    "bitrate": 1247138,
                    "width": 1280,
                    "height": 720,
                    "initRange": {
                        "start": "0",
                        "end": "738"
                    },
                    "indexRange": {
                        "start": "739",
                        "end": "1226"
                    },
                    "lastModified": "1601811623765749",
                    "contentLength": "18074560",
                    "quality": "hd720",
                    "fps": 24,
                    "qualityLabel": "720p",
                    "projectionType": "RECTANGULAR",
                    "averageBitrate": 765818,
                    "approxDurationMs": "188813",
                    "signatureCipher": "s=y%3Dp%3DgBSUCkvVl7q-hefXAmtE95tx4YYx2uLiqm0fDKUL2hBCQICspkvlYjtn%3DvRH0iGB5p9zloazr8oDbuPc5yFs81PaJfgIARw8JQ0qOAAOAQ&sp=sig&url=https://r7---sn-gwpa-5bge.googlevideo.com/videoplayback%3Fexpire%3D1609521167%26ei%3DrwPvX6ayN7GImgel4b2YDg%26ip%3D132.154.228.240%26id%3Do-AB56znPv_llgJ0v0XuIn4mf-4F2feyfn78hi9AowVgJP%26itag%3D136%26aitags%3D133%252C134%252C135%252C136%252C137%252C160%252C242%252C243%252C244%252C247%252C248%252C278%252C394%252C395%252C396%252C397%252C398%252C399%26source%3Dyoutube%26requiressl%3Dyes%26mh%3DCl%26mm%3D31%252C29%26mn%3Dsn-gwpa-5bge%252Csn-gwpa-qxay%26ms%3Dau%252Crdu%26mv%3Dm%26mvi%3D7%26pcm2cms%3Dyes%26pl%3D19%26gcr%3Din%26initcwndbps%3D156250%26vprv%3D1%26mime%3Dvideo%252Fmp4%26ns%3DAmm7Bly72tYhQYuUBTu4ougF%26gir%3Dyes%26clen%3D18074560%26dur%3D188.813%26lmt%3D1601811623765749%26mt%3D1609499069%26fvip%3D7%26keepalive%3Dyes%26c%3DWEB%26txp%3D5535432%26n%3DRBQO4tIQGFK2ymlT%26sparams%3Dexpire%252Cei%252Cip%252Cid%252Caitags%252Csource%252Crequiressl%252Cgcr%252Cvprv%252Cmime%252Cns%252Cgir%252Cclen%252Cdur%252Clmt%26lsparams%3Dmh%252Cmm%252Cmn%252Cms%252Cmv%252Cmvi%252Cpcm2cms%252Cpl%252Cinitcwndbps%26lsig%3DAG3C_xAwRAIgKiY0iSKg4drfMpUtmsfY4DqN0dzkVo9z0NvbppT-vAUCIDajIym2RvvvqEqxK9XltraU3992scXuP8aZD_cXNK_0"
                },
            ],
            "formats": [
                {
                    "itag": 18,
                    "mimeType": "video/mp4; codecs=\"avc1.42001E, mp4a.40.2\"",
                    "bitrate": 635291,
                    "width": 640,
                    "height": 360,
                    "lastModified": "1594495537943093",
                    "contentLength": "14993923",
                    "quality": "medium",
                    "fps": 24,
                    "qualityLabel": "360p",
                    "projectionType": "RECTANGULAR",
                    "averageBitrate": 635096,
                    "audioQuality": "AUDIO_QUALITY_LOW",
                    "approxDurationMs": "188871",
                    "audioSampleRate": "44100",
                    "audioChannels": 2,
                    "signatureCipher": "s=AsPsztt4ZltrQC0ijKLX83bx8smNjCLHwb5D-pJLJvDGAmAEiAhvbstJR8js%3D7g7hscPbPtwrjUDtzwb1GgpkTG53d9kMAhIARw8JQ0qOAAOAg&sp=sig&url=https://r7---sn-gwpa-5bge.googlevideo.com/videoplayback%3Fexpire%3D1609521167%26ei%3DrwPvX6ayN7GImgel4b2YDg%26ip%3D132.154.228.240%26id%3Do-AB56znPv_llgJ0v0XuIn4mf-4F2feyfn78hi9AowVgJP%26itag%3D18%26source%3Dyoutube%26requiressl%3Dyes%26mh%3DCl%26mm%3D31%252C29%26mn%3Dsn-gwpa-5bge%252Csn-gwpa-qxay%26ms%3Dau%252Crdu%26mv%3Dm%26mvi%3D7%26pcm2cms%3Dyes%26pl%3D19%26gcr%3Din%26initcwndbps%3D156250%26vprv%3D1%26mime%3Dvideo%252Fmp4%26ns%3Dw-Sn-YFRtfT0kLnFKpo3EA4F%26gir%3Dyes%26clen%3D14993923%26ratebypass%3Dyes%26dur%3D188.871%26lmt%3D1594495537943093%26mt%3D1609499069%26fvip%3D7%26c%3DWEB%26txp%3D5531432%26n%3DV2sNxp4tEzNJkZtb%26sparams%3Dexpire%252Cei%252Cip%252Cid%252Citag%252Csource%252Crequiressl%252Cgcr%252Cvprv%252Cmime%252Cns%252Cgir%252Cclen%252Cratebypass%252Cdur%252Clmt%26lsparams%3Dmh%252Cmm%252Cmn%252Cms%252Cmv%252Cmvi%252Cpcm2cms%252Cpl%252Cinitcwndbps%26lsig%3DAG3C_xAwRQIgbrfk-x_xucwjZedmoR8sR3UQHP4OUd1jDUL_91palCICIQC0w6urClsmCBTpK27I5DIKKED9T_ci6blRj-c8rSD86A%253D%253D"
                }
            ],
        }
    ],
    "expiresInSeconds": "21540"
}

Getting playlist information using link

'''
Getting information about playlist or videos in it using its link.

`Playlist.get` method will give both information & formats of the playlist
`Playlist.getInfo` method will give only information about the playlist.
`Playlist.getVideos` method will give only videos in the playlist.

'''
playlist = Playlist.get('https://www.youtube.com/playlist?list=PLRBp0Fe2GpgmsW46rJyudVFlY6IYjFBIK', mode = ResultMode.json)
print(playlist)
playlistInfo = Playlist.getInfo('https://www.youtube.com/playlist?list=PLRBp0Fe2GpgmsW46rJyudVFlY6IYjFBIK', mode = ResultMode.json)
print(playlistInfo)
playlistVideos = Playlist.getVideos('https://www.youtube.com/playlist?list=PLRBp0Fe2GpgmsW46rJyudVFlY6IYjFBIK')
print(playlistVideos)
Example Result
{
    "id": "PLRBp0Fe2GpgmsW46rJyudVFlY6IYjFBIK",
    "title": "NCS: House",
    "videoCount": "209",
    "viewCount": "155,772,054 views",
    "thumbnails": {
        "thumbnails": [
            {
                "url": "https://i.ytimg.com/vi/LIvSF0fQPJc/hqdefault.jpg?sqp=-oaymwEWCKgBEF5IWvKriqkDCQgBFQAAiEIYAQ==&rs=AOn4CLDHZYoB-WNHmvT3CZy6SpdqygsO4A",
                "width": 168,
                "height": 94
            },
            {
                "url": "https://i.ytimg.com/vi/LIvSF0fQPJc/hqdefault.jpg?sqp=-oaymwEWCMQBEG5IWvKriqkDCQgBFQAAiEIYAQ==&rs=AOn4CLACCxCIRvCn65_OS1z_4tLAq5Jb8Q",
                "width": 196,
                "height": 110
            },
            {
                "url": "https://i.ytimg.com/vi/LIvSF0fQPJc/hqdefault.jpg?sqp=-oaymwEXCPYBEIoBSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLBt00cYTIVBdrnHsSNLinhq7meCpQ",
                "width": 246,
                "height": 138
            },
            {
                "url": "https://i.ytimg.com/vi/LIvSF0fQPJc/hqdefault.jpg?sqp=-oaymwEXCNACELwBSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLBFaqqO6kCAuqya1SIJo5Cf45Ndxg",
                "width": 336,
                "height": 188
            }
        ]
    },
    "link": "https://www.youtube.com/playlist?list=PLRBp0Fe2GpgmsW46rJyudVFlY6IYjFBIK",
    "channel": {
        "name": "NoCopyrightSounds",
        "id": "UC_aEa8K-EOJ3D6gOs7HcyNg",
        "thumbnails": [
            {
                "url": "https://yt3.ggpht.com/ytc/AAUvwnhwQpPaPL_w-2bQM3TXQN0bdsQQSeEW74TDNXDfHQ=s48-c-k-c0x00ffffff-no-rj",
                "width": 48,
                "height": 48
            },
            {
                "url": "https://yt3.ggpht.com/ytc/AAUvwnhwQpPaPL_w-2bQM3TXQN0bdsQQSeEW74TDNXDfHQ=s88-c-k-c0x00ffffff-no-rj",
                "width": 88,
                "height": 88
            },
            {
                "url": "https://yt3.ggpht.com/ytc/AAUvwnhwQpPaPL_w-2bQM3TXQN0bdsQQSeEW74TDNXDfHQ=s176-c-k-c0x00ffffff-no-rj",
                "width": 176,
                "height": 176
            }
        ],
        "link": "https://www.youtube.com/channel/UC_aEa8K-EOJ3D6gOs7HcyNg"
    },
    "videos": [
        {
            "id": "gQjAEbWZEgU",
            "title": "Mangoo - Happi (ft. bby ivy) [NCS Release]",
            "thumbnails": [
                {
                    "url": "https://i.ytimg.com/vi/gQjAEbWZEgU/hqdefault.jpg?sqp=-oaymwEiCKgBEF5IWvKriqkDFQgBFQAAAAAYASUAAMhCPQCAokN4AQ==&rs=AOn4CLB8IrOoqB1vSj2SMptjc5pG8fyKOQ",
                    "width": 168,
                    "height": 94
                },
                {
                    "url": "https://i.ytimg.com/vi/gQjAEbWZEgU/hqdefault.jpg?sqp=-oaymwEiCMQBEG5IWvKriqkDFQgBFQAAAAAYASUAAMhCPQCAokN4AQ==&rs=AOn4CLDjI1SuDEFCqskIfGEqr8HZi3v54Q",
                    "width": 196,
                    "height": 110
                },
                {
                    "url": "https://i.ytimg.com/vi/gQjAEbWZEgU/hqdefault.jpg?sqp=-oaymwEjCPYBEIoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCAFP_0cHcbUnt_eJwozqM0mOPkHg",
                    "width": 246,
                    "height": 138
                },
                {
                    "url": "https://i.ytimg.com/vi/gQjAEbWZEgU/hqdefault.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLD4WajUJ8zGjQDuwT6uHBbvZzaCPA",
                    "width": 336,
                    "height": 188
                }
            ],
            "channel": {
                "name": "NoCopyrightSounds",
                "id": "UC_aEa8K-EOJ3D6gOs7HcyNg",
                "link": "https://www.youtube.com/channel/UC_aEa8K-EOJ3D6gOs7HcyNg"
            },
            "duration": "2:41",
            "accessibility": {
                "title": "Mangoo - Happi (ft. bby ivy) [NCS Release] by NoCopyrightSounds 7 months ago 2 minutes, 41 seconds",
                "duration": "2 minutes, 41 seconds"
            },
            "link": "https://www.youtube.com/watch?v=gQjAEbWZEgU"
        },
        {
            "id": "2Kh4y7pJjfQ",
            "title": "MAGNUS x Unread - Cool (feat. Alessia Labate) [NCS Release]",
            "thumbnails": [
                {
                    "url": "https://i.ytimg.com/vi/2Kh4y7pJjfQ/hqdefault.jpg?sqp=-oaymwEiCKgBEF5IWvKriqkDFQgBFQAAAAAYASUAAMhCPQCAokN4AQ==&rs=AOn4CLDBtmR1aLs9b5ULxWBpTitm2qfZgQ",
                    "width": 168,
                    "height": 94
                },
                {
                    "url": "https://i.ytimg.com/vi/2Kh4y7pJjfQ/hqdefault.jpg?sqp=-oaymwEiCMQBEG5IWvKriqkDFQgBFQAAAAAYASUAAMhCPQCAokN4AQ==&rs=AOn4CLA1_KVxp3eun3REQPZM3qgdhGGKhw",
                    "width": 196,
                    "height": 110
                },
                {
                    "url": "https://i.ytimg.com/vi/2Kh4y7pJjfQ/hqdefault.jpg?sqp=-oaymwEjCPYBEIoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDXxtiCKSoQ7qWsmbyK60HytHlKNg",
                    "width": 246,
                    "height": 138
                },
                {
                    "url": "https://i.ytimg.com/vi/2Kh4y7pJjfQ/hqdefault.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAO6xgKiU0ObnMbcsaLgd5Sp-HA_Q",
                    "width": 336,
                    "height": 188
                }
            ],
            "channel": {
                "name": "NoCopyrightSounds",
                "id": "UC_aEa8K-EOJ3D6gOs7HcyNg",
                "link": "https://www.youtube.com/channel/UC_aEa8K-EOJ3D6gOs7HcyNg"
            },
            "duration": "2:22",
            "accessibility": {
                "title": "MAGNUS x Unread - Cool (feat. Alessia Labate) [NCS Release] by NoCopyrightSounds 8 months ago 2 minutes, 22 seconds",
                "duration": "2 minutes, 22 seconds"
            },
            "link": "https://www.youtube.com/watch?v=2Kh4y7pJjfQ"
        },
        {
            "id": "7dw8wphQ118",
            "title": "Jim Yosef - Let You Go [NCS Release]",
            "thumbnails": [
                {
                    "url": "https://i.ytimg.com/vi/7dw8wphQ118/hqdefault.jpg?sqp=-oaymwEiCKgBEF5IWvKriqkDFQgBFQAAAAAYASUAAMhCPQCAokN4AQ==&rs=AOn4CLAI2xKhoLZTQSKy_E2qLI8vmmLwzQ",
                    "width": 168,
                    "height": 94
                },
                {
                    "url": "https://i.ytimg.com/vi/7dw8wphQ118/hqdefault.jpg?sqp=-oaymwEiCMQBEG5IWvKriqkDFQgBFQAAAAAYASUAAMhCPQCAokN4AQ==&rs=AOn4CLBm88JTaXMyMXgPpH0ANOP-5M7cdg",
                    "width": 196,
                    "height": 110
                },
                {
                    "url": "https://i.ytimg.com/vi/7dw8wphQ118/hqdefault.jpg?sqp=-oaymwEjCPYBEIoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDKDPLNxX6SpNNSCmp4oPA7gXZh2w",
                    "width": 246,
                    "height": 138
                },
                {
                    "url": "https://i.ytimg.com/vi/7dw8wphQ118/hqdefault.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCoilNTqi_D4Xu-EQFbiqcjyuewUw",
                    "width": 336,
                    "height": 188
                }
            ],
            "channel": {
                "name": "NoCopyrightSounds",
                "id": "UC_aEa8K-EOJ3D6gOs7HcyNg",
                "link": "https://www.youtube.com/channel/UC_aEa8K-EOJ3D6gOs7HcyNg"
            },
            "duration": "3:40",
            "accessibility": {
                "title": "Jim Yosef - Let You Go [NCS Release] by NoCopyrightSounds 9 months ago 3 minutes, 40 seconds",
                "duration": "3 minutes, 40 seconds"
            },
            "link": "https://www.youtube.com/watch?v=7dw8wphQ118"
        }
    ]
}

Get all videos of a channel

You can use a Playlist class for that, alongside some helpful functions.

from youtubesearchpython import *

channel_id = "UC_aEa8K-EOJ3D6gOs7HcyNg"
playlist = Playlist(playlist_from_channel_id(channel_id))

print(f'Videos Retrieved: {len(playlist.videos)}')

while playlist.hasMoreVideos:
    print('Getting more videos...')
    playlist.getNextVideos()
    print(f'Videos Retrieved: {len(playlist.videos)}')

print('Found all the videos.')
Example Result
Videos Retrieved: 100
Getting more videos...
Videos Retrieved: 200
Getting more videos...
Videos Retrieved: 300
Getting more videos...
Videos Retrieved: 400
Getting more videos...
Videos Retrieved: 500
Getting more videos...
Videos Retrieved: 600
Getting more videos...
Videos Retrieved: 700
Getting more videos...
Videos Retrieved: 800
Getting more videos...
Videos Retrieved: 900
Getting more videos...
Videos Retrieved: 1000
Getting more videos...
Videos Retrieved: 1002
Found all the videos.

More to the playlists

You can directly instanciate the Playlist class as follows to access its information & videos in the info and videos fields respectively.

YouTube offers only 100 videos in a single request, for getting more videos present in the playlist, you can check hasMoreVideos bool to see if playlist contains more videos. If playlist has more videos, then you can call getNextVideos to fetch more videos.

Example below demonstrates a simple way to retrive all videos of a playlist.

from youtubesearchpython import *

playlist = Playlist('https://www.youtube.com/playlist?list=PLRBp0Fe2GpgmsW46rJyudVFlY6IYjFBIK')

print(f'Videos Retrieved: {len(playlist.videos)}')

while playlist.hasMoreVideos:
    print('Getting more videos...')
    playlist.getNextVideos()
    print(f'Videos Retrieved: {len(playlist.videos)}')

print('Found all the videos.')
Example Result
Videos Retrieved: 100
Getting more videos...
Videos Retrieved: 200
Getting more videos...
Videos Retrieved: 209
Found all the videos.

Getting search suggestions

from youtubesearchpython import Suggestions

suggestions = Suggestions(language = 'en', region = 'US')

print(suggestions.get('NoCopyrightSounds', mode = ResultMode.json))
Example Result
{
    "result": [
        "nocopyrightsounds",
        "nocopyrightsounds best songs",
        "nocopyrightsounds gaming music",
        "nocopyrightsounds alan walker",
        "nocopyrightsounds fearless",
        "nocopyrightsounds invincible",
        "nocopyrightsounds background music",
        "nocopyrightsounds instrumental",
        "nocopyrightsounds fade",
        "nocopyrightsounds playlist",
        "nocopyrightsounds on and on",
        "nocopyrightsounds elektronomia",
        "nocopyrightsounds stronger",
        "nocopyrightsounds christmas"
    ]
}

Getting videos by hashtag

from youtubesearchpython import Hashtag

hashtag = Hashtag('ncs', limit = 1)

print(hashtag.result())
Example Result
{
    "result": [
        {
            "type": "video",
            "id": "c9FF4Tfj2w8",
            "title": "Ascence - About You [NCS 1 HOUR]",
            "publishedTime": "1 year ago",
            "duration": "1:00:00",
            "viewCount": {
                "text": "226,354 views",
                "short": "226K views"
            },
            "thumbnails": [
                {
                    "url": "https://i.ytimg.com/vi/c9FF4Tfj2w8/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLA8V3x_PigkymVQxQcptr8Wfz20-A",
                    "width": 168,
                    "height": 94
                },
                {
                    "url": "https://i.ytimg.com/vi/c9FF4Tfj2w8/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLABh5Ylb5wbuulOAWLcSYtfYQKiAQ",
                    "width": 196,
                    "height": 110
                },
                {
                    "url": "https://i.ytimg.com/vi/c9FF4Tfj2w8/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAykmTivOgjlW6a4tKWnLJpL9yqKw",
                    "width": 246,
                    "height": 138
                },
                {
                    "url": "https://i.ytimg.com/vi/c9FF4Tfj2w8/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLC8qRkotPyH9kGGHe29QuyOh-F9KA",
                    "width": 336,
                    "height": 188
                }
            ],
            "richThumbnail": {
                "url": "https://i.ytimg.com/an_webp/c9FF4Tfj2w8/mqdefault_6s.webp?du=3000&sqp=CPGE-YgG&rs=AOn4CLAJAC5zmDOtySflLFMQpAoaPUqHjA",
                "width": 320,
                "height": 180
            },
            "descriptionSnippet": null,
            "channel": {
                "name": "Good Vibes Music",
                "id": "UChCPI0uvKwrkYhTEx8UVrnQ",
                "thumbnails": [
                    {
                        "url": "https://yt3.ggpht.com/ytc/AKedOLSFYY0mvwL0DbRzddMAQdbgFshM42R5byhI9FiEBQ=s68-c-k-c0x00ffffff-no-rj",
                        "width": 68,
                        "height": 68
                    }
                ],
                "link": "https://www.youtube.com/channel/UChCPI0uvKwrkYhTEx8UVrnQ"
            },
            "accessibility": {
                "title": "Ascence - About You [NCS 1 HOUR] by Good Vibes Music 1 year ago 1 hour 226,354 views",
                "duration": "1 hour"
            },
            "link": "https://www.youtube.com/watch?v=c9FF4Tfj2w8",
            "shelfTitle": null
        }
    ]
}

Getting videos and playlists in specific channel

from youtubesearchpython import ChannelSearch,ResultMode

search = ChannelSearch('Watermelon Sugar', "UCZFWPqqPkFlNwIxcpsLOwew")
print(search.result(mode = ResultMode.json))
Example Result
{
    "result": [
        {
            "id": "WMcIfZuRuU8",
            "thumbnails": {
                "normal": [
                    {
                        "url": "https://i.ytimg.com/vi/WMcIfZuRuU8/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLClFg6C1r5NfTQy7TYUq6X5qHUmPA",
                        "width": 168,
                        "height": 94
                    },
                    {
                        "url": "https://i.ytimg.com/vi/WMcIfZuRuU8/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAoOyftwY0jLV4geWb5hejULYp3Zw",
                        "width": 196,
                        "height": 110
                    },
                    {
                        "url": "https://i.ytimg.com/vi/WMcIfZuRuU8/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCdqkhn7JDwLvRtTNx3jq-olz7k-Q",
                        "width": 246,
                        "height": 138
                    },
                    {
                        "url": "https://i.ytimg.com/vi/WMcIfZuRuU8/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAhYedsqBFKI0Ra2qzIv9cVoZhfKQ",
                        "width": 336,
                        "height": 188
                    }
                ],
                "rich": null
            },
            "title": "Harry Styles \u2013 Watermelon Sugar (Lost Tour Visual)",
            "descriptionSnippet": "This video is dedicated to touching.\nListen to Harry Styles\u2019 new album \u2018Fine Line\u2019 now: https://HStyles.lnk.to/FineLineAY \n\nFollow Harry Styles:\nFacebook: https://HarryStyles.lnk.to/followFI...",
            "uri": "/watch?v=WMcIfZuRuU8",
            "views": {
                "precise": "3,888,287 views",
                "simple": "3.8M views",
                "approximate": "3.8 million views"
            },
            "duration": {
                "simpleText": "2:55",
                "text": "2 minutes, 55 seconds"
            },
            "published": "10 months ago",
            "channel": {
                "name": "Harry Styles",
                "thumbnails": [
                    {
                        "url": "https://yt3.ggpht.com/ytc/AAUvwnhR81ocC_KalYEk5ItnJcfMBqaiIpuM1B0lJyg4Rw=s88-c-k-c0x00ffffff-no-rj",
                        "width": 68,
                        "height": 68
                    }
                ]
            },
            "type": "video"
        },
    ]
}

Getting direct stream URL of a video

This class is able to fetch video URLs without any additional web requests (that's fast), as one might already have same response at the time of showing it to the user.

For making use of this functionality, you must install yt-dlp as a dependency. StreamURLFetcher makes slight improvements & changes to YouTube class from yt-dlp.

from youtubesearchpython import *
fetcher = StreamURLFetcher()
video = Video.get("https://www.youtube.com/watch?v=aqz-KE-bpKQ")
url = fetcher.get(video, 251)
print(url)

'''
`getAll` method returns all stream URLs unlike `get` method which needs itag in its second parameter.
'''
Example Result
"https://r6---sn-gwpa-5bgk.googlevideo.com/videoplayback?expire=1610798125&ei=zX8CYITXEIGKz7sP9MWL0AE&ip=2409%3A4053%3A803%3A2b22%3Adc68%3Adfb9%3Aa676%3A26a3&id=o-APBakKSE2_eMDMegtCmeWXfuhhUfAzJTmOCWj4lkEjAM&itag=251&source=youtube&requiressl=yes&mh=aP&mm=31%2C29&mn=sn-gwpa-5bgk%2Csn-gwpa-qxad&ms=au%2Crdu&mv=m&mvi=6&pl=36&initcwndbps=146250&vprv=1&mime=audio%2Fwebm&ns=ULL4mkMO31KDtEhOjkOrmpkF&gir=yes&clen=10210834&dur=634.601&lmt=1544629945422176&mt=1610776131&fvip=6&keepalive=yes&c=WEB&txp=5511222&n=uEjSqtzBZaJyVn&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&sig=AOq0QJ8wRAIgKKIEiwQTgXsdKPEyOckgVPs_LMH6KJoeaYmZic_lelECIHXHs1ZnSP5mgtpffNlIMJM3DhxcvDbA-4udFFE6AmVP&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AG3C_xAwRQIhAPmhL745RYeL_ffgUJk_xJLC-8riXKMylLTLA_pITYWWAiB2qUIXur8ThW7cLfQ73mIVK61mMZc2ncK6FZWjUHGcUw%3D%3D"

Get comments of a video

You can use a Comments class for that.

from youtubesearchpython import *

# You can either pass an ID or a URL
video_id = "_ZdsmLgCVdU"
comments = Comments(video_id)

print(f'Comments Retrieved: {len(comments.comments["result"])}')

while comments.hasMoreComments:
    print('Getting more comments...')
    comments.getNextComments()
    print(f'Comments Retrieved: {len(comments.comments["result"])}')

print('Found all the comments.')
Example Result
20
Getting more comments...
40
Getting more comments...
60
Getting more comments...
80
Getting more comments...
100
Getting more comments...
...

Get first 20 comments of a video

You can use a Comments.get method for that.

from youtubesearchpython import *

# You can either pass an ID or a URL
video_id = "_ZdsmLgCVdU"
comments = Comments.get(video_id)

print(comments)
Example Result
{
   "result":[
      {
         "id":"Ugh2UTT69BnjaHgCoAEC",
         "author":{
            "id":"UCBykgwvHh2SX5HH7dVWLkqQ",
            "name":"Daikaiju Danielle",
            "thumbnails":[
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLSC8WrgmUHF5l6DYEb8jabim9nE0Ko1vQ_KFOly0w=s48-c-k-c0x00ffffff-no-rj",
                  "width":48,
                  "height":48
               },
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLSC8WrgmUHF5l6DYEb8jabim9nE0Ko1vQ_KFOly0w=s88-c-k-c0x00ffffff-no-rj",
                  "width":88,
                  "height":88
               },
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLSC8WrgmUHF5l6DYEb8jabim9nE0Ko1vQ_KFOly0w=s176-c-k-c0x00ffffff-no-rj",
                  "width":176,
                  "height":176
               }
            ]
         },
         "content":"The boy probably represents youth and the pure, free spirit of being young. When you grow up, it's hard to find that spirit again. You have to search for it.",
         "published":"5 years ago",
         "isLiked":false,
         "authorIsChannelOwner":false,
         "voteStatus":"INDIFFERENT",
         "votes":{
            "simpleText":"5.9K",
            "label":"5.9K likes"
         },
         "replyCount":81
      },
      {
         "id":"UgzyjWeS_wVmoVrcyVZ4AaABAg",
         "author":{
            "id":"UCMMJk2iiIanIFtTwnLK8XBA",
            "name":"naomi",
            "thumbnails":[
               {
                  "url":"https://yt3.ggpht.com/wzrS0agEf0NBFXvcpQJFF-6BwdciRFqzVf_dmgv4Unk7e9AFA7Sb7K7hsLeXdZsOX26J0J4Y=s48-c-k-c0x00ffffff-no-rj",
                  "width":48,
                  "height":48
               },
               {
                  "url":"https://yt3.ggpht.com/wzrS0agEf0NBFXvcpQJFF-6BwdciRFqzVf_dmgv4Unk7e9AFA7Sb7K7hsLeXdZsOX26J0J4Y=s88-c-k-c0x00ffffff-no-rj",
                  "width":88,
                  "height":88
               },
               {
                  "url":"https://yt3.ggpht.com/wzrS0agEf0NBFXvcpQJFF-6BwdciRFqzVf_dmgv4Unk7e9AFA7Sb7K7hsLeXdZsOX26J0J4Y=s176-c-k-c0x00ffffff-no-rj",
                  "width":176,
                  "height":176
               }
            ]
         },
         "content":"Strange that I showed this to my brother three days before his death not knowing I would soon relate to it.",
         "published":"1 year ago",
         "isLiked":false,
         "authorIsChannelOwner":false,
         "voteStatus":"INDIFFERENT",
         "votes":{
            "simpleText":"5.2K",
            "label":"5.2K likes"
         },
         "replyCount":147
      },
      {
         "id":"UgyP3NpP-qA9T80YRVh4AaABAg",
         "author":{
            "id":"UCCekImfpPQw94ZHeQy98S_A",
            "name":"Noura",
            "thumbnails":[
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLSA9_Di2v12v_MycDkKjvhD8D3dRSt9pyZIcCekeg=s48-c-k-c0x00ffffff-no-rj",
                  "width":48,
                  "height":48
               },
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLSA9_Di2v12v_MycDkKjvhD8D3dRSt9pyZIcCekeg=s88-c-k-c0x00ffffff-no-rj",
                  "width":88,
                  "height":88
               },
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLSA9_Di2v12v_MycDkKjvhD8D3dRSt9pyZIcCekeg=s176-c-k-c0x00ffffff-no-rj",
                  "width":176,
                  "height":176
               }
            ]
         },
         "content":"In Arabic when we want to express how much we love and cherish someone we say \"you are my eyes\".. And for some reason that line \"don\\'t you know you got my eyes\" makes me really nostalgic and sad.",
         "published":"1 year ago (edited)",
         "isLiked":false,
         "authorIsChannelOwner":false,
         "voteStatus":"INDIFFERENT",
         "votes":{
            "simpleText":"3.8K",
            "label":"3.8K likes"
         },
         "replyCount":65
      },
      {
         "id":"Ugy-JqQw3w3MXwxGZHZ4AaABAg",
         "author":{
            "id":"UC6irqN4Fk_z-CdK47pkLTgQ",
            "name":"Leo Trombetta",
            "thumbnails":[
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLTogXyBXEX1LAzehhiYyx9amCWGkcMRCaa3e-pEgg=s48-c-k-c0x00ffffff-no-rj",
                  "width":48,
                  "height":48
               },
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLTogXyBXEX1LAzehhiYyx9amCWGkcMRCaa3e-pEgg=s88-c-k-c0x00ffffff-no-rj",
                  "width":88,
                  "height":88
               },
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLTogXyBXEX1LAzehhiYyx9amCWGkcMRCaa3e-pEgg=s176-c-k-c0x00ffffff-no-rj",
                  "width":176,
                  "height":176
               }
            ]
         },
         "content":"As a mother whose had to let her son go for his life to be better, this song is about exactly that. The pain and sacrifice and love and the warm memories you pray they will have of the sweetest moments you've shared when you held them so long ago.. I miss you.",
         "published":"2 years ago",
         "isLiked":false,
         "authorIsChannelOwner":false,
         "voteStatus":"INDIFFERENT",
         "votes":{
            "simpleText":"2K",
            "label":"2K likes"
         },
         "replyCount":23
      },
      {
         "id":"Ugwv8lwT4LS906Y9P1p4AaABAg",
         "author":{
            "id":"UClMs_LKpgCPC9acJQpGRcbQ",
            "name":"Arundhati",
            "thumbnails":[
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLTHadgrB-BvJ2zqtN9_f2ttscQEH0Sc3awtvg73ug=s48-c-k-c0x00ffffff-no-rj",
                  "width":48,
                  "height":48
               },
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLTHadgrB-BvJ2zqtN9_f2ttscQEH0Sc3awtvg73ug=s88-c-k-c0x00ffffff-no-rj",
                  "width":88,
                  "height":88
               },
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLTHadgrB-BvJ2zqtN9_f2ttscQEH0Sc3awtvg73ug=s176-c-k-c0x00ffffff-no-rj",
                  "width":176,
                  "height":176
               }
            ]
         },
         "content":"Itโ€™s been 3 years and I still canโ€™t sing that chorus without tearing up",
         "published":"2 years ago",
         "isLiked":false,
         "authorIsChannelOwner":false,
         "voteStatus":"INDIFFERENT",
         "votes":{
            "simpleText":"1K",
            "label":"1K likes"
         },
         "replyCount":16
      },
      {
         "id":"Ugx5NiWjHQI1aGWI8ex4AaABAg",
         "author":{
            "id":"UCeuMECoMfhC9Fyn5veduj1w",
            "name":"dona nova",
            "thumbnails":[
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLQC9P35p4nKLBaoDkWwsGjQCVrrBs_lPVCNsTQ5oPg=s48-c-k-c0x00ffffff-no-rj",
                  "width":48,
                  "height":48
               },
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLQC9P35p4nKLBaoDkWwsGjQCVrrBs_lPVCNsTQ5oPg=s88-c-k-c0x00ffffff-no-rj",
                  "width":88,
                  "height":88
               },
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLQC9P35p4nKLBaoDkWwsGjQCVrrBs_lPVCNsTQ5oPg=s176-c-k-c0x00ffffff-no-rj",
                  "width":176,
                  "height":176
               }
            ]
         },
         "content":"My dad passed away in 2012 and now he communicates to me sometimes through songs. If I ask him a question the next song I hear will have the answer. This year I had to start my life over completely and I have moved across the country away from a toxic person, and then I moved again from the next place I lived from another toxic person, all during the pandemic. I am also legally blind and otherwise disabled so I worried about how I would make it on my own  after my  losses and divorce. I don't know anybody here and I'm completely alone. This comes after 10 years of loss and change that started with his death. Anyway, When I asked him how could I ever have a life again he sent me this song. He always does. I have been told he is my spirit guide and I can tell when he's here. I love glass animals",
         "published":"1 year ago",
         "isLiked":false,
         "authorIsChannelOwner":false,
         "voteStatus":"INDIFFERENT",
         "votes":{
            "simpleText":"1.6K",
            "label":"1.6K likes"
         },
         "replyCount":72
      },
      {
         "id":"UgyHLTfBhMAh39IcPAp4AaABAg",
         "author":{
            "id":"UCK8evpEndlyLgjcXTYfOVtQ",
            "name":"UnforgettableAlice",
            "thumbnails":[
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLSlrVENCyh_Wk6p8UrZAPEIS3pmUnGOiTb2zwIx1g=s48-c-k-c0x00ffffff-no-rj",
                  "width":48,
                  "height":48
               },
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLSlrVENCyh_Wk6p8UrZAPEIS3pmUnGOiTb2zwIx1g=s88-c-k-c0x00ffffff-no-rj",
                  "width":88,
                  "height":88
               },
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLSlrVENCyh_Wk6p8UrZAPEIS3pmUnGOiTb2zwIx1g=s176-c-k-c0x00ffffff-no-rj",
                  "width":176,
                  "height":176
               }
            ]
         },
         "content":"Vocalist/guitarist Dave Bayley explained the story behind this song to Paste magazine: \"The idea for this one came from a story someone told me once. They were telling me about their child, and something awful had happened to them. She was crying - but at the same time the memories that they had from that previous life made her so happy - so she was also smiling. That combination of emotions kind of made me feel like my heart was being ripped apart but also optimistic in a weird way. She had found a way to see happiness in this awful thing that had happened to her. That combination of emotions is what this song is getting at.\"",
         "published":"3 years ago",
         "isLiked":false,
         "authorIsChannelOwner":false,
         "voteStatus":"INDIFFERENT",
         "votes":{
            "simpleText":"5.6K",
            "label":"5.6K likes"
         },
         "replyCount":31
      },
      {
         "id":"Ugwq4Hc5dcjphfdabi14AaABAg",
         "author":{
            "id":"UChtQ0Lhb3UvlSjPJ_1gcRdQ",
            "name":"Later",
            "thumbnails":[
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLTmkn0CgPeiW8hmoP3VEokLg-AN2Y7xkTz7HeOa1w=s48-c-k-c0x00ffffff-no-rj",
                  "width":48,
                  "height":48
               },
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLTmkn0CgPeiW8hmoP3VEokLg-AN2Y7xkTz7HeOa1w=s88-c-k-c0x00ffffff-no-rj",
                  "width":88,
                  "height":88
               },
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLTmkn0CgPeiW8hmoP3VEokLg-AN2Y7xkTz7HeOa1w=s176-c-k-c0x00ffffff-no-rj",
                  "width":176,
                  "height":176
               }
            ]
         },
         "content":"\"Don\\'t you know you got my eyes\"",
         "published":"2 years ago",
         "isLiked":false,
         "authorIsChannelOwner":false,
         "voteStatus":"INDIFFERENT",
         "votes":{
            "simpleText":"3.3K",
            "label":"3.3K likes"
         },
         "replyCount":19
      },
      {
         "id":"UgxC1mFXH9ddTB6qa5h4AaABAg",
         "author":{
            "id":"UC8iw4k1Ojbd5QsK35IeT5mg",
            "name":"Anna Dunne",
            "thumbnails":[
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLSzwmG3DSiHB8XuKUqe6CjdlbSPuln1e1kOKS7i6w=s48-c-k-c0x00ffffff-no-rj",
                  "width":48,
                  "height":48
               },
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLSzwmG3DSiHB8XuKUqe6CjdlbSPuln1e1kOKS7i6w=s88-c-k-c0x00ffffff-no-rj",
                  "width":88,
                  "height":88
               },
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLSzwmG3DSiHB8XuKUqe6CjdlbSPuln1e1kOKS7i6w=s176-c-k-c0x00ffffff-no-rj",
                  "width":176,
                  "height":176
               }
            ]
         },
         "content":"I lost my little sons to the care system because i had depression and experienced domestic abuse. I see them now sometimes. It doesn't get any easier and I miss them a lot. <3 This song means a lot. ",
         "published":"2 years ago",
         "isLiked":false,
         "authorIsChannelOwner":false,
         "voteStatus":"INDIFFERENT",
         "votes":{
            "simpleText":"1.9K",
            "label":"1.9K likes"
         },
         "replyCount":25
      },
      {
         "id":"Ugw4ux8km05TQ3kGHmV4AaABAg",
         "author":{
            "id":"UCfqMzgWyCUuUWBBaD4WgynA",
            "name":"Jemma Scott",
            "thumbnails":[
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLT44n2_05S_bMU2ME_Z1WSk6xTIJ3cs82vSF920pg=s48-c-k-c0x00ffffff-no-rj",
                  "width":48,
                  "height":48
               },
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLT44n2_05S_bMU2ME_Z1WSk6xTIJ3cs82vSF920pg=s88-c-k-c0x00ffffff-no-rj",
                  "width":88,
                  "height":88
               },
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLT44n2_05S_bMU2ME_Z1WSk6xTIJ3cs82vSF920pg=s176-c-k-c0x00ffffff-no-rj",
                  "width":176,
                  "height":176
               }
            ]
         },
         "content":"Warning โš ๏ธ: ",
         "published":"2 years ago",
         "isLiked":false,
         "authorIsChannelOwner":false,
         "voteStatus":"INDIFFERENT",
         "votes":{
            "simpleText":"2.1K",
            "label":"2.1K likes"
         },
         "replyCount":5
      },
      {
         "id":"Ugy5hJrVHhrZ25VZoDd4AaABAg",
         "author":{
            "id":"UCCooCkWoIN-QmHrVo0t5d9Q",
            "name":"Samy Lind",
            "thumbnails":[
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLSHCXYVj0EyiLYxeBvhP6E4gnS1gRzDSYleBQ=s48-c-k-c0x00ffffff-no-rj",
                  "width":48,
                  "height":48
               },
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLSHCXYVj0EyiLYxeBvhP6E4gnS1gRzDSYleBQ=s88-c-k-c0x00ffffff-no-rj",
                  "width":88,
                  "height":88
               },
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLSHCXYVj0EyiLYxeBvhP6E4gnS1gRzDSYleBQ=s176-c-k-c0x00ffffff-no-rj",
                  "width":176,
                  "height":176
               }
            ]
         },
         "content":"I know no one cares about stuff like this but I just wanted to speak on the power of art because itโ€™s beautiful. This video and this entire album has been a huge catalyst and help in me saving myself and my family. I was forcing my husband and 3 kids to live with my abusive parents so that I could try to make them love us before they died. All they did was hurt us more and instead of dealing with it I kept staying there and started doing pain pills. This video helped hit home how much I donโ€™t need my parents and it made me never want to escape from my reality again. I hadnโ€™t quite gotten to a stage of disgust, but I sure have done a lot of regrettable things. This album helps me have the strength to keep doing my best to learn to be better and to learn to be the best I can be for my kids. I donโ€™t want to be held back by anything anymore and I donโ€™t want to hold back my family. Thank you glass animal and crew:) your saving lives with this music",
         "published":"2 years ago",
         "isLiked":false,
         "authorIsChannelOwner":false,
         "voteStatus":"INDIFFERENT",
         "votes":{
            "simpleText":"493",
            "label":"493 likes"
         },
         "replyCount":7
      },
      {
         "id":"UgyfG6DRZQZe5NtvY9t4AaABAg",
         "author":{
            "id":"UCFlsa-V7ZjC3SJG1MgHeTxA",
            "name":"Adi โ˜†",
            "thumbnails":[
               {
                  "url":"https://yt3.ggpht.com/2r2ZQYcZaViZp8n37bmAnJx-irYy7mOUkpkC7nprEaoeSY2jEJ9wQ-kQnpxN6Z4WMWFMT9JzUw=s48-c-k-c0x00ffffff-no-rj",
                  "width":48,
                  "height":48
               },
               {
                  "url":"https://yt3.ggpht.com/2r2ZQYcZaViZp8n37bmAnJx-irYy7mOUkpkC7nprEaoeSY2jEJ9wQ-kQnpxN6Z4WMWFMT9JzUw=s88-c-k-c0x00ffffff-no-rj",
                  "width":88,
                  "height":88
               },
               {
                  "url":"https://yt3.ggpht.com/2r2ZQYcZaViZp8n37bmAnJx-irYy7mOUkpkC7nprEaoeSY2jEJ9wQ-kQnpxN6Z4WMWFMT9JzUw=s176-c-k-c0x00ffffff-no-rj",
                  "width":176,
                  "height":176
               }
            ]
         },
         "content":"Lyrics:[Verse 1]",
         "published":"2 years ago",
         "isLiked":false,
         "authorIsChannelOwner":false,
         "voteStatus":"INDIFFERENT",
         "votes":{
            "simpleText":"955",
            "label":"955 likes"
         },
         "replyCount":9
      },
      {
         "id":"Ugi30kIt00U573gCoAEC",
         "author":{
            "id":"UCZbJ_Q3ClurxYlthgTecgow",
            "name":"love, doggo",
            "thumbnails":[
               {
                  "url":"https://yt3.ggpht.com/IJF61exnEIJZDlnphGN9yXnV_fQSJhdAyPqgF_e3pJ42iwvTQprgQaty-uVyvjiMJpnaekxeBg=s48-c-k-c0x00ffffff-no-rj",
                  "width":48,
                  "height":48
               },
               {
                  "url":"https://yt3.ggpht.com/IJF61exnEIJZDlnphGN9yXnV_fQSJhdAyPqgF_e3pJ42iwvTQprgQaty-uVyvjiMJpnaekxeBg=s88-c-k-c0x00ffffff-no-rj",
                  "width":88,
                  "height":88
               },
               {
                  "url":"https://yt3.ggpht.com/IJF61exnEIJZDlnphGN9yXnV_fQSJhdAyPqgF_e3pJ42iwvTQprgQaty-uVyvjiMJpnaekxeBg=s176-c-k-c0x00ffffff-no-rj",
                  "width":176,
                  "height":176
               }
            ]
         },
         "content":"This is a rare thing... I like every song a band makes",
         "published":"5 years ago",
         "isLiked":false,
         "authorIsChannelOwner":false,
         "voteStatus":"INDIFFERENT",
         "votes":{
            "simpleText":"3.9K",
            "label":"3.9K likes"
         },
         "replyCount":67
      },
      {
         "id":"UgzDNmCLzmkNIGV_iB14AaABAg",
         "author":{
            "id":"UCrdOXfYndK2UEjAKRg-hUcw",
            "name":"Cherry",
            "thumbnails":[
               {
                  "url":"https://yt3.ggpht.com/oRPZKN6SL1SoMc5J7FQIHiA1C1wQZe1YfRHbkxaLnNp9Vi7Vl2PCY11oTK5mDms-NHXSGqFsKQ=s48-c-k-c0x00ffffff-no-rj",
                  "width":48,
                  "height":48
               },
               {
                  "url":"https://yt3.ggpht.com/oRPZKN6SL1SoMc5J7FQIHiA1C1wQZe1YfRHbkxaLnNp9Vi7Vl2PCY11oTK5mDms-NHXSGqFsKQ=s88-c-k-c0x00ffffff-no-rj",
                  "width":88,
                  "height":88
               },
               {
                  "url":"https://yt3.ggpht.com/oRPZKN6SL1SoMc5J7FQIHiA1C1wQZe1YfRHbkxaLnNp9Vi7Vl2PCY11oTK5mDms-NHXSGqFsKQ=s176-c-k-c0x00ffffff-no-rj",
                  "width":176,
                  "height":176
               }
            ]
         },
         "content":"I hope the mother who inspired this can hear it and feel her child close to her again.",
         "published":"2 years ago",
         "isLiked":false,
         "authorIsChannelOwner":false,
         "voteStatus":"INDIFFERENT",
         "votes":{
            "simpleText":"410",
            "label":"410 likes"
         },
         "replyCount":1
      },
      {
         "id":"UgyQEih224ElUkT2AXl4AaABAg",
         "author":{
            "id":"UC7M3_B55yIvo4DZS3BvgA1g",
            "name":"Sirce Guevara",
            "thumbnails":[
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLRJhxg_aeXmbGuH8wbuCcGWVtRs6tFKPqkxw4-lcJ8=s48-c-k-c0x00ffffff-no-rj",
                  "width":48,
                  "height":48
               },
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLRJhxg_aeXmbGuH8wbuCcGWVtRs6tFKPqkxw4-lcJ8=s88-c-k-c0x00ffffff-no-rj",
                  "width":88,
                  "height":88
               },
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLRJhxg_aeXmbGuH8wbuCcGWVtRs6tFKPqkxw4-lcJ8=s176-c-k-c0x00ffffff-no-rj",
                  "width":176,
                  "height":176
               }
            ]
         },
         "content":"I cried watching this video, this is my first time seeing it.. It just reminded me of my mother,  how she raised me alone.  Seeing me happy and dancing all her life . How she works hard day by day just so I have a roof on my head and food on the table. She's amazing...",
         "published":"2 years ago",
         "isLiked":false,
         "authorIsChannelOwner":false,
         "voteStatus":"INDIFFERENT",
         "votes":{
            "simpleText":"271",
            "label":"271 likes"
         },
         "replyCount":1
      },
      {
         "id":"UgxSKtnwJ1fL1cGECFN4AaABAg",
         "author":{
            "id":"UCaWu5P4tl4leNsq0d6K5JfA",
            "name":"Brylee D",
            "thumbnails":[
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLSnWU59WluXZehM5VxmcbX6Unk_rgJc699gUp7lxw=s48-c-k-c0x00ffffff-no-rj",
                  "width":48,
                  "height":48
               },
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLSnWU59WluXZehM5VxmcbX6Unk_rgJc699gUp7lxw=s88-c-k-c0x00ffffff-no-rj",
                  "width":88,
                  "height":88
               },
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLSnWU59WluXZehM5VxmcbX6Unk_rgJc699gUp7lxw=s176-c-k-c0x00ffffff-no-rj",
                  "width":176,
                  "height":176
               }
            ]
         },
         "content":"I have a crush on that background wind instrument",
         "published":"2 years ago",
         "isLiked":false,
         "authorIsChannelOwner":false,
         "voteStatus":"INDIFFERENT",
         "votes":{
            "simpleText":"4.5K",
            "label":"4.5K likes"
         },
         "replyCount":36
      },
      {
         "id":"Ugx885faaugZ-KS2ht14AaABAg",
         "author":{
            "id":"UCAv-kFdFs9zZX4IR9y77sTg",
            "name":"berry tart subs โœฟ",
            "thumbnails":[
               {
                  "url":"https://yt3.ggpht.com/RIEhlWERKQrY6oscMFEVW9pyDVKwndKkfFfnMTGxJIFHV2np4asu1syE-C016cZlcgZYtkdvrCA=s48-c-k-c0x00ffffff-no-rj",
                  "width":48,
                  "height":48
               },
               {
                  "url":"https://yt3.ggpht.com/RIEhlWERKQrY6oscMFEVW9pyDVKwndKkfFfnMTGxJIFHV2np4asu1syE-C016cZlcgZYtkdvrCA=s88-c-k-c0x00ffffff-no-rj",
                  "width":88,
                  "height":88
               },
               {
                  "url":"https://yt3.ggpht.com/RIEhlWERKQrY6oscMFEVW9pyDVKwndKkfFfnMTGxJIFHV2np4asu1syE-C016cZlcgZYtkdvrCA=s176-c-k-c0x00ffffff-no-rj",
                  "width":176,
                  "height":176
               }
            ]
         },
         "content":"This song literally makes me cry every time I hear it it's just so sweet",
         "published":"1 year ago",
         "isLiked":false,
         "authorIsChannelOwner":false,
         "voteStatus":"INDIFFERENT",
         "votes":{
            "simpleText":"73",
            "label":"73 likes"
         },
         "replyCount":1
      },
      {
         "id":"UgxfMf3PW8muQIKHeX54AaABAg",
         "author":{
            "id":"UCs5_3PBRo9VoCCbDWDMpa-g",
            "name":"Victor Rodriguez",
            "thumbnails":[
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLRe_mumWc8G4a9DvzNQ7FBA_hctTvwTJskAdw=s48-c-k-c0x00ffffff-no-rj",
                  "width":48,
                  "height":48
               },
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLRe_mumWc8G4a9DvzNQ7FBA_hctTvwTJskAdw=s88-c-k-c0x00ffffff-no-rj",
                  "width":88,
                  "height":88
               },
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLRe_mumWc8G4a9DvzNQ7FBA_hctTvwTJskAdw=s176-c-k-c0x00ffffff-no-rj",
                  "width":176,
                  "height":176
               }
            ]
         },
         "content":"I hope my son can find some type of solace or message in this song one day. We lost his mother my wife when she passed suddenly three months ago at 23 years young. He was only 2 years old and 7 months when it happened. It was a short time for him but so many happy memories. They spent every single hour of every single day together. Weโ€™re so lost and devasted without you, We love you Deja C Rodriguez",
         "published":"8 months ago",
         "isLiked":false,
         "authorIsChannelOwner":false,
         "voteStatus":"INDIFFERENT",
         "votes":{
            "simpleText":"126",
            "label":"126 likes"
         },
         "replyCount":2
      },
      {
         "id":"UgiuS-ehhcqhHXgCoAEC",
         "author":{
            "id":"UCd6gX2dxkokyH70cbUocq7Q",
            "name":"bunnyluveable",
            "thumbnails":[
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLSt6NFUcOAfGB1C0BL0f18q8sPUX0UQBhYV_A=s48-c-k-c0x00ffffff-no-rj",
                  "width":48,
                  "height":48
               },
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLSt6NFUcOAfGB1C0BL0f18q8sPUX0UQBhYV_A=s88-c-k-c0x00ffffff-no-rj",
                  "width":88,
                  "height":88
               },
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLSt6NFUcOAfGB1C0BL0f18q8sPUX0UQBhYV_A=s176-c-k-c0x00ffffff-no-rj",
                  "width":176,
                  "height":176
               }
            ]
         },
         "content":"their music is like being wrapped in a warm blanket on a chilly day.",
         "published":"5 years ago",
         "isLiked":false,
         "authorIsChannelOwner":false,
         "voteStatus":"INDIFFERENT",
         "votes":{
            "simpleText":"563",
            "label":"563 likes"
         },
         "replyCount":6
      },
      {
         "id":"UgwEdhuY0RUuiyBqpVN4AaABAg",
         "author":{
            "id":"UC8GIfeF1UytnIdBUx7eODBg",
            "name":"TheBnjmnMiles",
            "thumbnails":[
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLQjQG6jvrGnj9ejtjfO-pbXWwekST4e_qxK=s48-c-k-c0x00ffffff-no-rj",
                  "width":48,
                  "height":48
               },
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLQjQG6jvrGnj9ejtjfO-pbXWwekST4e_qxK=s88-c-k-c0x00ffffff-no-rj",
                  "width":88,
                  "height":88
               },
               {
                  "url":"https://yt3.ggpht.com/ytc/AKedOLQjQG6jvrGnj9ejtjfO-pbXWwekST4e_qxK=s176-c-k-c0x00ffffff-no-rj",
                  "width":176,
                  "height":176
               }
            ]
         },
         "content":"Why is nobody talking about this kidโ€™s freakinโ€™ sweet dance moves?",
         "published":"7 months ago",
         "isLiked":false,
         "authorIsChannelOwner":false,
         "voteStatus":"INDIFFERENT",
         "votes":{
            "simpleText":"210",
            "label":"210 likes"
         },
         "replyCount":4
      }
   ]
}

Retrieve video transcript

YouTube auto-generates transcripts (subtitles) for videos. You can retrieve those transcripts using Transcript class:

from youtubesearchpython import Transcript

print(Transcript.get("https://www.youtube.com/watch?v=-1xu0IP35FI"))

In response, you'll get available languages with params parameter. If you want to retrieve a different language, you have to pass the function that parameter. Example:

from youtubesearchpython import Transcript

url = "https://www.youtube.com/watch?v=-1xu0IP35FI"

transcript_en = Transcript.get(url)
# you actually don't have to pass a valid URL in following Transcript call. You can input an empty string, but I do recommend still inputing a valid URL.
transcript_2 = Transcript.get(url, transcript_en["languages"][-1]["params"]) # in my case, it'd output Spanish.
print(transcript_2)
Example Result
{
   "segments":[
      {
         "startMs":"210",
         "endMs":"2129",
         "text":"- When Steve Jobs unveiled the original",
         "startTime":"0:00"
      },
      {
         "startMs":"2130",
         "endMs":"3670",
         "text":"iPhone back in 2007,",
         "startTime":"0:02"
      },
      {
         "startMs":"3670",
         "endMs":"4940",
         "text":"the year I graduated high school,",
         "startTime":"0:03"
      },
      {
         "startMs":"4940",
         "endMs":"7610",
         "text":"he pitched it as a music player, a phone,",
         "startTime":"0:04"
      },
      {
         "startMs":"7610",
         "endMs":"10760",
         "text":"and an internet communicator\nall rolled into one.",
         "startTime":"0:07"
      },
      {
         "startMs":"10760",
         "endMs":"11593",
         "text":"- Are you getting it?",
         "startTime":"0:10"
      },
      ...
   ],
   "languages":[
      {
         "params":"CgstMXh1MElQMzVGSRIOQ2dBU0FtVnVHZ0ElM0QYASozZW5nYWdlbWVudC1wYW5lbC1zZWFyY2hhYmxlLXRyYW5zY3JpcHQtc2VhcmNoLXBhbmVsMAE%3D",
         "selected":true,
         "title":"English"
      },
      {
         "params":"CgstMXh1MElQMzVGSRISQ2dOaGMzSVNBbVZ1R2dBJTNEGAEqM2VuZ2FnZW1lbnQtcGFuZWwtc2VhcmNoYWJsZS10cmFuc2NyaXB0LXNlYXJjaC1wYW5lbDAB",
         "selected":false,
         "title":"English (auto-generated)"
      },
      {
         "params":"CgstMXh1MElQMzVGSRISQ2dBU0JYQjBMVUpTR2dBJTNEGAEqM2VuZ2FnZW1lbnQtcGFuZWwtc2VhcmNoYWJsZS10cmFuc2NyaXB0LXNlYXJjaC1wYW5lbDAB",
         "selected":false,
         "title":"Portuguese (Brazil)"
      },
      {
         "params":"CgstMXh1MElQMzVGSRIQQ2dBU0JtVnpMVFF4T1JvQRgBKjNlbmdhZ2VtZW50LXBhbmVsLXNlYXJjaGFibGUtdHJhbnNjcmlwdC1zZWFyY2gtcGFuZWwwAQ%3D%3D",
         "selected":false,
         "title":"Spanish (Latin America)"
      }
   ]
}

Retrieve channel info

from youtubesearchpython import Channel

print(Channel.get("UC_aEa8K-EOJ3D6gOs7HcyNg"))
Example Result
{
    "id": "UC_aEa8K-EOJ3D6gOs7HcyNg",
    "url": "https://www.youtube.com/channel/UC_aEa8K-EOJ3D6gOs7HcyNg",
    "description": "NoCopyrightSounds is a copyright free / stream safe record label, providing free to use music to the content creator community. \n\nWe work with artists from around the world in electronic music, representing genres from House to Dubstep via Trap, Drum & Bass, Electro Pop and more. \n\nNCS Music is free to use for independent Creators and their UGC (User Generated Content) on YouTube & Twitch - always remember to credit the Artist, track and NCS and link back to our original NCS upload.\n\nView our usage policy and some frequently asked questions here: http://ncs.io/UsagePolicy\n\nGrab our new apparel range here: http://ncs.io/Store",
    "title": "NoCopyrightSounds",
    "banners": [
        {
            "url": "https://yt3.ggpht.com/ZdXDhvCVn73Shu-QkqWFoUS_TlZ9MSkAXb8VJBeI6ZKSN6oH4QBvTG2BCfuFRegjXwdp6qH3=w1060-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj",
            "width": 1060,
            "height": 175
        },
        {
            "url": "https://yt3.ggpht.com/ZdXDhvCVn73Shu-QkqWFoUS_TlZ9MSkAXb8VJBeI6ZKSN6oH4QBvTG2BCfuFRegjXwdp6qH3=w1138-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj",
            "width": 1138,
            "height": 188
        },
        {
            "url": "https://yt3.ggpht.com/ZdXDhvCVn73Shu-QkqWFoUS_TlZ9MSkAXb8VJBeI6ZKSN6oH4QBvTG2BCfuFRegjXwdp6qH3=w1707-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj",
            "width": 1707,
            "height": 283
        },
        {
            "url": "https://yt3.ggpht.com/ZdXDhvCVn73Shu-QkqWFoUS_TlZ9MSkAXb8VJBeI6ZKSN6oH4QBvTG2BCfuFRegjXwdp6qH3=w2120-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj",
            "width": 2120,
            "height": 351
        },
        {
            "url": "https://yt3.ggpht.com/ZdXDhvCVn73Shu-QkqWFoUS_TlZ9MSkAXb8VJBeI6ZKSN6oH4QBvTG2BCfuFRegjXwdp6qH3=w2276-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj",
            "width": 2276,
            "height": 377
        },
        {
            "url": "https://yt3.ggpht.com/ZdXDhvCVn73Shu-QkqWFoUS_TlZ9MSkAXb8VJBeI6ZKSN6oH4QBvTG2BCfuFRegjXwdp6qH3=w2560-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj",
            "width": 2560,
            "height": 424
        }
    ],
    "subscribers": {
        "simpleText": "32.2M subscribers",
        "label": "32.2 million subscribers"
    },
    "thumbnails": [
        {
            "url": "https://yt3.ggpht.com/YIBi8NVC87fMfJHfQ2O0dyzjis7tUlO7VqWLhk1lq1fkIOQTrpX_Ip7G6S_u0IJosXYSe_Z9=s48-c-k-c0x00ffffff-no-rj",
            "width": 48,
            "height": 48
        },
        {
            "url": "https://yt3.ggpht.com/YIBi8NVC87fMfJHfQ2O0dyzjis7tUlO7VqWLhk1lq1fkIOQTrpX_Ip7G6S_u0IJosXYSe_Z9=s88-c-k-c0x00ffffff-no-rj",
            "width": 88,
            "height": 88
        },
        {
            "url": "https://yt3.ggpht.com/YIBi8NVC87fMfJHfQ2O0dyzjis7tUlO7VqWLhk1lq1fkIOQTrpX_Ip7G6S_u0IJosXYSe_Z9=s176-c-k-c0x00ffffff-no-rj",
            "width": 176,
            "height": 176
        },
        {
            "url": "https://yt3.ggpht.com/YIBi8NVC87fMfJHfQ2O0dyzjis7tUlO7VqWLhk1lq1fkIOQTrpX_Ip7G6S_u0IJosXYSe_Z9=s900-c-k-c0x00ffffff-no-rj",
            "width": 900,
            "height": 900
        },
        {
            "url": "https://yt3.ggpht.com/YIBi8NVC87fMfJHfQ2O0dyzjis7tUlO7VqWLhk1lq1fkIOQTrpX_Ip7G6S_u0IJosXYSe_Z9=s200-c-k-c0x00ffffff-no-rj?days_since_epoch=19098",
            "width": 200,
            "height": 200
        }
    ],
    "isFamilySafe": true,
    "keywords": "NoCopyrightSounds ncs no copyright sounds copyrighted music free royalty royaltyfree uncopyrighted copyrightfree",
    "tags": [
        "NoCopyrightSounds",
        "ncs",
        "no",
        "copyright",
        "sounds",
        "copyrighted",
        "music",
        "free",
        "royalty",
        "royaltyfree",
        "uncopyrighted",
        "copyrightfree"
    ],
    "views": "10,094,707,992 views",
    "joinedDate": "Aug 14, 2011",
    "country": "United Kingdom"
}

Retrieve channel playlists

from youtubesearchpython import Channel

channel = Channel("UC_aEa8K-EOJ3D6gOs7HcyNg")
print(len(channel.result["playlists"]))
while channel.has_more_playlists():
    channel.next()
    print(len(channel.result["playlists"]))
Example Result
30
49

Contributors

Thanks to everyone contributing to this library, including those not mentioned here.

I included only contributors and people, who we can thank for their extensive reports to make the library better.

Contributors are added irrespective of order.

  • ย ย Hitesh Kumar Saini
    • Creator of this library, contributed most classes to this library.
  • ย ย mytja
    • Current maintainer of this library. Author of Core classes, Comments and Transcript classes, ytdlp migration
  • ย ย Denis
    • Maintainer and reviewer of PRs. Author of Hashtag class.
  • ย ย Fabian Wunsch
    • Fixes to ChannelSearch & retrieving Playlists from Channel class
  • ย ย Felix Stupp
    • Video and Playlist class contributor. Extensive issues.
  • ย ย dscrofts
    • Extensive issues, mostly about Playlist and Video class.
  • ย ย AlexandreOuellet
    • Added publishDate and uploadDate to Video class.
  • ย ย None
    • Bumped httpx version to 0.14.2.
  • ย ย Elter
    • Fixes to Playlist class.

License

MIT License

Copyright (c) 2021 Hitesh Kumar Saini

Information

  • All the research, for making this library possible, is entirely done by myself.
  • You can use this library & segments of code from it in your projects in any way you want. Just respect the MIT license & credit the original author of the project.
  • Current version of this project (main branch) simulates the requests made by YouTube's web client during client side rendering. In simple words, it does not fetch any specific webpage's HTML, but the JSONs internally fetched by YouTube when you navigate the website, after loading the webpage completely.
  • I do not resist you from using this library in any possible manner, but YouTube T&C stop you from using this library commercially. Respect the law.
  • As you might tell by the name of the project, this library initially only used to support searching of videos. Later on, as the project grew, I added a lot of additional features after requests from people. Now, its really powerful.

youtube-search-python's People

Contributors

alexandreouellet avatar alexmercerind avatar anshuman852 avatar chirag127 avatar fabi321 avatar huenique avatar jwadow avatar maple-elter avatar mytja avatar raitonoberu avatar rking32 avatar zocker1999net avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

youtube-search-python's Issues

Safesearch

Hello, is there a way that I can use safesearch with this?

Support for finding Playlists

Hey, first of all, thanks your module works great and it does the job.

Would it be possible to add support for finding for playlists (links) on Youtube?

And maybe add an option so you can define what kind of search results should be included (normal video, livestream, playlist).

Right now I just search for the video and then see if duration = "LIVE" or not, to determine this, but it would be cool if you have a built in function.

Best regards.

Support for Python 2

Hello!
I'm working on a project that would need your library since YouTube is making a lot of changes this month, which caused non working of my code. Saw same issue with your code a couple of days ago (#16 ) but you resolved it.
However this library is designed for Python 3. Is it somehow possible to integrate Python 2 into your library. If not, i will move my project to Python 3, since I want to do it for quite of while and this would be a big plus for movement.
Project site: https://github.com/mytja/MyAssistantOS-Raspbian
Thank you so much
mytja

How to get playlist information using link?

Hello! I'm excited with your project, because it really simple, quickly and powerful, but i found a small bug. I think when playlist's ID includes underscore or dash then PlaylistsSearch doesn't work properly.
For example: when i try to find this playlist:
'https://www.youtube.com/playlist?list=PLrxcNWZXdQ2nRZvJcLoQpJhUBrPVOBbll' - it works perfectly, but when i try find this one:
'https://youtube.com/playlist?list=OLAK5uy_nHcJWdK2mi8vKVRco3MfQuH12938KF-hQ' or
'https://www.youtube.com/playlist?list=OLAK5uy_mRdEfaPOzXui_tyud3VE_vAHDqCiPOyDw' - i have no results =(

Can you fix it PLEASE ?)

Quota Limit Reached?

Hi, I'm new at Github and Python. I'm using this module to stream music and deploy it on my LINE Bot. So, I found out that when I input the keyword quickly, the bot would show me "Could not make request". However, when I try it on my IDLE console, the code would run well eventhough I input it quickly. Is there a bug or is it just the error in my code? Any help will be appriciated.

Screenshot the log from my server (replit.com)
635150

Screenshot error log from my bot
image
image
image

My code:
image

My IDLE:
image

Making the requests async?

Wonder if the RequestHandler could be made async by using something like aiohttp instead of urllib.requests? I'm using this package in some app and I would like to do stuff like make more requests while I'm waiting for the response of the first request.

Location and Region Ignored

search = SearchVideos("Test", offset = 1, mode = "json", max_results = 20, language="en-US", region="US")

Example video title on search results:
"title": "\u041a\u0430\u043a \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0422\u0412 IPTV \u0411\u0415\u0421\u041f\u041b\u0410\u0422\u041d\u041e : \u0422\u0412 \u043a\u0430\u043d\u0430\u043b\u044b \u043d\u0430 \u0410\u043d\u0434\u0440\u043e\u0438\u0434",

I'm getting results based on my location not on language and region arguments, which are being ignored.
Is there a way to force results in the specified language and region without having to rely on a vpn/proxy?
Thank you.

YouTube removed the page parameter

Hello,

i have noticed that the page parameter isn't working as intended. Minimal example to reproduce:

from youtubesearchpython import CustomSearch

first = CustomSearch('test', searchPreferences="CAM%253D", page=1)
second = CustomSearch('test', searchPreferences="CAM%253D", page=2)

print(first.result() == second.result()) # returns true

The searchPreferences are set to order the results by their respective view count.

I have manually tested the page parameter and it seems like that YouTube has disabled this functionality in order to make you use the official API. I really do not want to use their API as this requires an account. Are you aware of a method to obtain more than 20 search results without using their API?

The only method I found involves Selenium which basically just scrolls down the page to load more results.

StreamURLFetcher failing for age restricted videos

(Sync version)

When i use this :

fetcher = StreamURLFetcher()
video = Video.get(link)
self.streamUrl = fetcher.get(video, 251)

If the link is this : https://www.youtube.com/watch?v=SbRNyT8my_Y

Fatal Python error: Cannot recover from stack overflow.

Thread 0xacf0d460 (most recent call first):
  File "/usr/lib/python3.7/concurrent/futures/thread.py", line 78 in _worker
  File "/usr/lib/python3.7/threading.py", line 865 in run
  File "/usr/lib/python3.7/threading.py", line 917 in _bootstrap_inner
  File "/usr/lib/python3.7/threading.py", line 885 in _bootstrap

Thread 0xad70e460 (most recent call first):
  File "/home/pi/.local/lib/python3.7/site-packages/discord/opus.py", line 339 in encode
  File "/home/pi/.local/lib/python3.7/site-packages/discord/voice_client.py", line 633 in send_audio_packet
  File "/home/pi/.local/lib/python3.7/site-packages/discord/player.py", line 596 in _do_run
  File "/home/pi/.local/lib/python3.7/site-packages/discord/player.py", line 603 in run
  File "/usr/lib/python3.7/threading.py", line 917 in _bootstrap_inner
  File "/usr/lib/python3.7/threading.py", line 885 in _bootstrap

Thread 0xae6ff460 (most recent call first):
  File "/usr/lib/python3.7/threading.py", line 300 in wait
  File "/usr/lib/python3.7/threading.py", line 552 in wait
  File "/home/pi/.local/lib/python3.7/site-packages/discord/gateway.py", line 133 in run
  File "/usr/lib/python3.7/threading.py", line 917 in _bootstrap_inner
  File "/usr/lib/python3.7/threading.py", line 885 in _bootstrap

Thread 0xaf0ff460 (most recent call first):
  File "/usr/lib/python3.7/concurrent/futures/thread.py", line 78 in _worker
  File "/usr/lib/python3.7/threading.py", line 865 in run
  File "/usr/lib/python3.7/threading.py", line 917 in _bootstrap_inner
  File "/usr/lib/python3.7/threading.py", line 885 in _bootstrap

Thread 0xafaff460 (most recent call first):
  File "/usr/lib/python3.7/concurrent/futures/thread.py", line 78 in _worker
  File "/usr/lib/python3.7/threading.py", line 865 in run
  File "/usr/lib/python3.7/threading.py", line 917 in _bootstrap_inner
  File "/usr/lib/python3.7/threading.py", line 885 in _bootstrap

Thread 0xb04ff460 (most recent call first):
  File "/usr/lib/python3.7/concurrent/futures/thread.py", line 78 in _worker
  File "/usr/lib/python3.7/threading.py", line 865 in run
  File "/usr/lib/python3.7/threading.py", line 917 in _bootstrap_inner
  File "/usr/lib/python3.7/threading.py", line 885 in _bootstrap

Thread 0xb0eff460 (most recent call first):
  File "/usr/lib/python3.7/threading.py", line 300 in wait
  File "/usr/lib/python3.7/threading.py", line 552 in wait
  File "/home/pi/.local/lib/python3.7/site-packages/discord/gateway.py", line 133 in run
  File "/usr/lib/python3.7/threading.py", line 917 in _bootstrap_inner
  File "/usr/lib/python3.7/threading.py", line 885 in _bootstrap

Thread 0xb18ff460 (most recent call first):
  File "/usr/lib/python3.7/concurrent/futures/thread.py", line 78 in _worker
  File "/usr/lib/python3.7/threading.py", line 865 in run
  File "/usr/lib/python3.7/threading.py", line 917 in _bootstrap_inner
  File "/usr/lib/python3.7/threading.py", line 885 in _bootstrap

Thread 0xb22fb460 (most recent call first):
  File "/usr/lib/python3.7/concurrent/futures/thread.py", line 78 in _worker
  File "/usr/lib/python3.7/threading.py", line 865 in run
  File "/usr/lib/python3.7/threading.py", line 917 in _bootstrap_inner
  File "/usr/lib/python3.7/threading.py", line 885 in _bootstrap

Current thread 0xb6fbbad0 (most recent call first):
  File "/home/pi/.local/lib/python3.7/site-packages/pytube/extract.py", line 425 in apply_descrambler
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 73 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  File "/home/pi/.local/lib/python3.7/site-packages/youtubesearchpython/internal/streamurlfetcher.py", line 81 in _decipher
  ...
av_interleaved_write_frame(): Broken pipe
Error writing trailer of pipe:1: Broken pipe

Max_results and page

Nice solution, but Iโ€˜ve got two issues (with v1.2.4)

  1. Tried to change max_results to >20 , but always getting only 20 results.
  2. I can only use page=1. With 2 or something else, I donโ€˜t get a result - but there is more than one page availble when using the url in my browser

Only link output

Hey, the module is working but i wanna ask how can i get only link to the video in output, and its possible to get it to string for use in other code?

Download playlist

how to download or get video url from youtube url playlist with this module ?

Default Language

Question: Do you think it might be useful to set a default language for the search url?
At the moment I am traveling abroad and the information like uploaded x months ago is in cyrillic letters what unfortunately I am barely able to read.

So in my specific case it would be useful if the script would use english as a default language.
At the same time I can see that probably others like the fact that the script is using their local language.

To be honest I am not clear what could be a easy and nice solution in this case...

More options ? order by time ? limit time?in one month?

search = SearchVideos(kw, offset = 1, mode = "json", max_results = 10)
self.searchPreferences = "EgIQAQ%3D%3D"

searchPreferences cann't be fixed
should add to parameters
then I don't need to change source code

Thank you

Getting more then 100 video results with Playlist.get()

It appears that their isn't yet a Playlist.get().next() or equivalent implemented. Is their a way to get more then 100 video results yet? If not is this a feature that is planned to be implemented in the future?

Also, thank you for creating/maintaining this wonderful library! I appreciate all your hard work. Have a great day!

Quotes are probably not handled correctly

On a search like this "The Honeydrips The Strangest Dream" I get these results:

{'channel': 'TheTearissiraeTehT',
 'duration': '2:37',
 'id': 'IB0paTtj6Vw',
 'index': 0,
 'link': 'https://www.youtube.com/watch?v=IB0paTtj6Vw',
 'thumbnails': ['https://img.youtube.com/vi/IB0paTtj6Vw/default.jpg',
                'https://img.youtube.com/vi/IB0paTtj6Vw/hqdefault.jpg',
                'https://img.youtube.com/vi/IB0paTtj6Vw/mqdefault.jpg',
                'https://img.youtube.com/vi/IB0paTtj6Vw/sddefault.jpg',
                'https://img.youtube.com/vi/IB0paTtj6Vw/maxresdefault.jpg'],
 'title': 'The Honeydrips - \\',
 'views': 634}

The title ("The Honeydrips - \") seems to have some problems with the quotes in the actual title: 'The Honeydrips - "The Strangest Dream"'

Add channel id in the results

It would be great if the channel id was included in the search results. I don't know how this works on youtube, but an example is this:

https://www.youtube.com/watch?v=EDwb9jOVRtU

From the source:
<a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="/channel/UC81VD6eeuLLSfyY_D-N8sVw" dir="auto">Madonna</a>

Channel: UC81VD6eeuLLSfyY_D-N8sVw

How to run asyns downloads?

I'm trying run this code for download other search pages:

import asyncio
from youtubesearchpython.__future__ import VideosSearch
search = VideosSearch('NoCopyrightSounds')

result = await search.next()
print(result['result'])

result = await search.next()
print(result['result'])

result = await search.next()
print(result['result'])

result = await search.next()
print(result['result'])

But getting this error:

  File "/usr/lib/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/home/pc/.vscode/extensions/ms-python.python-2021.2.636928669/pythonFiles/lib/python/debugpy/__main__.py", line 45, in <module>
    cli.main()
  File "/home/pc/.vscode/extensions/ms-python.python-2021.2.636928669/pythonFiles/lib/python/debugpy/../debugpy/server/cli.py", line 444, in main
    run()
  File "/home/pc/.vscode/extensions/ms-python.python-2021.2.636928669/pythonFiles/lib/python/debugpy/../debugpy/server/cli.py", line 285, in run_file
    runpy.run_path(target_as_str, run_name=compat.force_str("__main__"))
  File "/usr/lib/python3.6/runpy.py", line 261, in run_path
    code, fname = _get_code_from_file(run_name, path_name)
  File "/usr/lib/python3.6/runpy.py", line 236, in _get_code_from_file
    code = compile(f.read(), fname, 'exec')
  File "/home/pc/Projects/DatasetFetch/new_scripts.py", line 116
    videosResult = await videosSearch.next()
                                    ^
SyntaxError: invalid syntax

What I'm doing not right?

Terms of service abuse (This library does not do it)

Citing the terms of service available here: https://www.youtube.com/static?gl=GB&template=terms

Permissions and Restrictions

You may access and use the Service as made available to you, as long as you comply with this Agreement and the law. You may view or listen to Content for your personal, non-commercial use. You may also show YouTube videos through the embeddable YouTube player.

The following restrictions apply to your use of the Service. You are not allowed to:

[...]

access the Service using any automated means (such as robots, botnets or scrapers) except: (a) in the case of public search engines, in accordance with YouTubeโ€™s robots.txt file; (b) with YouTubeโ€™s prior written permission; or (c) as permitted by applicable law;

The project advertise itself as a library to "search videos in YouTube WITHOUT using YouTube Data API v3." and is indeed a scrapper of the youtube web interface. This is a clear abuse of the terms cited above and prevent your library from working in various controlled environment.

The problematic code is as follow:

request = "https://www.youtube.com/results?search_query=%s&page=%d" %(self.keyword, self.offset)
#########Making Network Request#########
self.page = urllib.request.urlopen(request).read().decode('utf_8')

Number of views is not correct

Thanks for the great library. Nevertheless when I do a search on: "Madonna Hung Up" I get these results:

{'channel': 'Madonna',
 'duration': '5:27',
 'id': 'EDwb9jOVRtU',
 'index': 0,
 'link': 'https://www.youtube.com/watch?v=EDwb9jOVRtU',
 'thumbnails': ['https://img.youtube.com/vi/EDwb9jOVRtU/default.jpg',
                'https://img.youtube.com/vi/EDwb9jOVRtU/hqdefault.jpg',
                'https://img.youtube.com/vi/EDwb9jOVRtU/mqdefault.jpg',
                'https://img.youtube.com/vi/EDwb9jOVRtU/sddefault.jpg',
                'https://img.youtube.com/vi/EDwb9jOVRtU/maxresdefault.jpg'],
 'title': 'Madonna - Hung Up (Official Music Video)',
 'views': 268}

It seems like the number of views (269 036 248) isn't parsed correctly. Seems like this line could be the culprit:
https://github.com/alexmercerind/youtube-search-python/blob/cdfd4ff16ef45a00c448983586b4fcc7cd8ef123/youtubesearchpython/videos__scripthandler.py
for character in self.pageSource[index+2].split()[0]:

Do you can set title with Unicode

Hello
With title is Vietnamese, Chinese, Japanese --> title output is not support utf8 unicode right now.
so you can add this in next version please. Thank you so much

How can i go directly to a specific search page?

Please tell me how you can go directly to a specific search page? For example, if I have already downloaded 200 videos, how can I immediately start downloading with 201 videos for a specific search term?

Playlist search: index out of range

Thanks for the new Playlist Search feature, it is awesome!

When I search for Playlits called "drum and bass" I run into an error:

>>> search = SearchPlaylists("drum and bass", offset = 1, mode = "dict", max_results = 20).result()

~/.local/lib/python3.8/site-packages/youtubesearchpython/playlist__search.py in result(self)
     63                         "id": self.ids[index],
     64                         "link": self.links[index],
---> 65                         "title": self.titles[index],
     66                     }
     67                     result+=[result_index]

IndexError: list index out of range

Apparently search.ids and search.links have 21 entries, while search.titles only has 20.

Bad title

There are the date of the video, the channel name and the number of views in the title of each video.

{
    "search_result": [
        {
            "index": 0,
            "id": "RQ5IkSeMQbc",
            "link": "https://www.youtube.com/watch?v=RQ5IkSeMQbc",
            "title": "Teyeq - Demons [NCS Release] de NoCopyrightSounds il y a 22 heures 2 minutes et 35 secondes 238 806 vues\"",
            "channel": "",
            "duration": "",
            "views": 806,
            "thumbnails": [
                "https://img.youtube.com/vi/RQ5IkSeMQbc/default.jpg",
                "https://img.youtube.com/vi/RQ5IkSeMQbc/hqdefault.jpg",
                "https://img.youtube.com/vi/RQ5IkSeMQbc/mqdefault.jpg",
                "https://img.youtube.com/vi/RQ5IkSeMQbc/sddefault.jpg",
                "https://img.youtube.com/vi/RQ5IkSeMQbc/maxresdefault.jpg"
            ]
        },...

The title is : Teyeq - Demons [NCS Release] de NoCopyrightSounds il y a 22 heures 2 minutes et 35 secondes 238 806 vues
(Teyeq - Demons [NCS Release] de NoCopyrightSounds il y a 22 heures 2 minutes et 35 secondes 238 806 vues means Teyeq - Demons [NCS Release] from NoCopyrightSounds 22 hours, 2 minutes and 35 seconds ago 238806 vues in french.)
I don't understand why there are the date of the video, the channel name and the number of views in the title of each video.

Also there is nothing in the field channel

I checked in youtude source code and the title is correct but the label isn't.

{"url":"https://i.ytimg.com/vi/rLe5S1UKPko/hqdefault.jpg?sqp=-oaymwEZCNACELwBSFXyq4qpAwsIARUAAIhCGAFwAQ==\u0026rs=AOn4CLDCBddTGwin1yccKbIbyasMJC4qkg","width":336,"height":188}]},
"title":{"runs":[{"text":"Meryl - Coucou"}],"accessibility":{"accessibilityData":{"label":"**Meryl - Coucou de Meryl270 il y a 4 mois 2 minutes et 39 secondes 4โ€ฏ019โ€ฏ653 vues**"}}}

Advice

Hello sir try to add search via id. So that we can get the data from YouTube link too. Thank you sir

Something wrong in class RequestHandler(ComponentHandler):

class RequestHandler(ComponentHandler):
    def __makeRequest(self, requestBody = requestPayload) -> None:
        requestBody['query'] = self.query
        requestBody['client'] = {
            'hl': self.language,
            'gl': self.region,
        }

This method is had problem that requestPayload is change if requestBody is change so if you call VideosSearch("something") twice it causes error because requsestPayload is change (requestBody['continuation'] is already exist even not start searching!)
i think should rewrite code

import copy

class RequestHandler(ComponentHandler):
    def __makeRequest(self, requestBody = None) -> None:
        if requestBody == None:
            requestBody = copy.deepcopy(requestPayload)
        requestBody['query'] = self.query
        requestBody['client'] = {
            'hl': self.language,
            'gl': self.region,
        }
from youtubesearchpython.search import VideosSearch

videos = VideosSearch("something")
videos2 = VideosSearch("something2") <---- Error

Trying to import Request from ullib breaks lib for Python 2

Using python 2, I get this for version 1.3.2. Version 1.3.1 works just fine.

pi@basiliscus:~ $ python /opt/tboplayer/tboplayer.py
Traceback (most recent call last):
File "/opt/tboplayer/tboplayer.py", line 75, in
from youtubesearchpython import SearchVideos
File "/home/pi/.local/lib/python2.7/site-packages/youtubesearchpython/init.py", line 1, in
from youtubesearchpython.videos__search import SearchVideos
File "/home/pi/.local/lib/python2.7/site-packages/youtubesearchpython/videos__search.py", line 3, in
from youtubesearchpython.__requesthandler import RequestHandler
File "/home/pi/.local/lib/python2.7/site-packages/youtubesearchpython/__requesthandler.py", line 4, in
from urllib import urlencode, urlopen, Request
ImportError: cannot import name Request

Include upload date in search results? (enhancement)

Hi,
I love your search script and have an enhancement request:
Could you include the upload date from the search results into the query?
Where it says 1 year ago, 3 months ago etc.?
I hope this would not be too much difficulties and it would be a great enhancement for me :-)

Return None

Hi,

When I tried to run example project I am getting the None error.
Please can you check it?

Thanks

Could not parse YouTube response

Something broke between 1.3.3 and 1.3.6, at least in CustomSearch(), nearly every results returns 0 results or throws a "Could not parse YouTube response." in 1.3.6. What makes no sense is why some keywords work, but most fail. Forgive the language but I was pulling my hair out and just started throwing words at it, with a bit of trial and error I found two words that either always worked or always failed. On 1.3.6 searching with CustomSearch() with the search param "CAASBAgBEAE", "music" currently returns 48 results but "fuck" returns 0 results, on 1.3.3 with the exact same code "fuck" returns 48 results.

The code is a bit to granular for me to trace it back quickly. but I would guess something from commit 4c731bb is to blame as _youtubesearchpython/handlers/requesthandler.py -> _parseSource() is throwing the exception.

Pyinstaller making youtube-search-python unusable

So i have this line of code in one of my cogs in my discord.py bot that works perfectly fine normally but when i make it an exe it gives me this error:

Traceback (most recent call last): File "discord\ext\commands\core.py", line 85, in wrapped File "C:\Users\FIREPL~1\AppData\Local\Temp\_MEI99962\cogs\music.py", line 446, in _play search = VideosSearch(search, limit=1).result()['result'][0]['link'] File "youtubesearchpython\search.py", line 142, in __init__ File "youtubesearchpython\internal\search.py", line 20, in __init__ File "youtubesearchpython\handlers\requesthandler.py", line 12, in __makeRequest FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\FIREPL~1\\AppData\\Local\\Temp\\_MEI99962\\youtubesearchpython\\requestPayload.json'

Is there any way to fix this error?

None Results

test.py

from youtubesearchpython import SearchVideos

search = SearchVideos("NoCopyrightSounds", offset=1, mode="json", max_results=20)

print(search.result())

terminal

python .\test.py
None

StreamURLFetcher not working

OS: Windows 10
kivy: 2.0 stable
youtube-search-python: 1.4.1
pyTube: 10.5.1

I'm trying to get Youtube stream urls using StreamURLFetcher.

    def stream_test(self):
        link = 'https://www.youtube.com/watch?v=YQHsXMglC9A'
        fetcher = StreamURLFetcher()
        stream = Video.get(link)
        url = fetcher.getAll(stream)
        print('URLS:', url)

This is the result:

URLS: <coroutine object StreamURLFetcher.getAll at 0x0E1C4930>
 <string>:112: RuntimeWarning: coroutine 'StreamURLFetcher.getAll' was never awaited
 RuntimeWarning: Enable tracemalloc to get the object allocation traceback
 <string>:112: RuntimeWarning: coroutine 'Video.get' was never awaited
 RuntimeWarning: Enable tracemalloc to get the object allocation traceback

The same happens using the example in the README (using get instead of getAll)

def stream_test(self):
    fetcher = StreamURLFetcher()
    video = Video.get("https://www.youtube.com/watch?v=aqz-KE-bpKQ")
    url = fetcher.get(video, 251)
    print(url)

the result is the same:

<coroutine object StreamURLFetcher.get at 0x0E7B38E8>
 <string>:112: RuntimeWarning: coroutine 'StreamURLFetcher.get' was never awaited
 RuntimeWarning: Enable tracemalloc to get the object allocation traceback
 <string>:112: RuntimeWarning: coroutine 'Video.get' was never awaited
 RuntimeWarning: Enable tracemalloc to get the object allocation traceback

Any idea?
Thanks

Python 2 support issue

Hello!
Tried to import your library with
pip install youtube-search-python
but, when I import it from Python 2, I get this error, which I don't get, if I manually add this library into my project folder:

Traceback (most recent call last):
  File "F:\MyAssistantOS\recognition\my.py", line 15, in <module>
    from youtubesearchpython import searchYoutube
  File "C:\Python27\lib\site-packages\youtubesearchpython\__init__.py", line 1, in <module>
    from youtubesearchpython.videos__search import SearchVideos
  File "C:\Python27\lib\site-packages\youtubesearchpython\videos__search.py", line 3, in <module>
    from youtubesearchpython.__requesthandler import requesthandler
  File "C:\Python27\lib\site-packages\youtubesearchpython\__requesthandler.py", line 2, in <module>
    from urllib.request import urlopen
ImportError: No module named request

Can you fix this?
Thank you

SearchVideos & SearchPlaylists's result() method gives None return.

If you are getting None as a return value after calling result() on the object of SearchVideos or SearchPlaylists class, it can mean any of the following things:

  1. Module has encountered a network error.
  2. You are using an older version of module (which might be unable to fetch data from YouTube's updated website).

In your problem doesn't seem to lie in any of the two cases above, feel free to open issue about this.

If you attach log.txt generated by running following script, it will be really helpful for me to deal with your issue.

from youtubesearchpython import SearchVideos
if __name__ == '__main__':
    videos = SearchVideos('NoCopyrightSounds')
    with open('log.txt', 'a', encoding = 'utf_8') as file:
        if (videos.result() == None):
            print('alexmercerind/youtube-search-python failed.')
            fields = vars(videos)
            for key in fields:
                file.write(f'\n==========self.{key}==========\n')
                file.write(str(fields[key]))
            print('Debugging log saved in log.txt.')
        else:
            print('alexmercerind/youtube-search-python worked properly.')

Thankyou ๐Ÿ€

Duration filter

Is there any way to get results with duration filter.

Youtube on its page has a duration filter with short (<4mins) and a long(>20mins) things.

image

It will be really helpful if you can add this in case this is not available.

Usage of "offset" parameter

Hello, @alexmercerind ! Nice work!

I have a question about the "offset" param, which is used for the initialization of SearchVideos and SearchPlaylists objects. I have not found its usage in any of the submodules of the package "youtubesearchpython".

Is this param used somewhere?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.