Search
******

YTMusic.search(query: str, filter: str | None = None, scope: str | None = None, limit: int = 20, ignore_spelling: bool = False) -> list[dict]

   Search YouTube music Returns results within the provided category.

   Parameters:
      * **query** -- Query string, i.e. 'Oasis Wonderwall'

      * **filter** -- Filter for item types. Allowed values: "songs",
        "videos", "albums", "artists", "playlists",
        "community_playlists", "featured_playlists", "uploads".
        Default: Default search, including all types of items.

      * **scope** -- Search scope. Allowed values: "library",
        "uploads". Default: Search the public YouTube Music catalogue.
        Changing scope from the default will reduce the number of
        settable filters. Setting a filter that is not permitted will
        throw an exception. For uploads, no filter can be set. For
        library, community_playlists and featured_playlists filter
        cannot be set.

      * **limit** -- Number of search results to return Default: 20

      * **ignore_spelling** -- Whether to ignore YTM spelling
        suggestions. If True, the exact search term will be searched
        for, and will not be corrected. This does not have any effect
        when the filter is set to "uploads". Default: False, will use
        YTM's default behavior of autocorrecting the search.

   Returns:
      List of results depending on filter. resultType specifies the
      type of item (important for default search). albums, artists and
      playlists additionally contain a browseId, corresponding to
      albumId, channelId and playlistId (browseId=`VL`+playlistId)

      Example list for default search with one result per resultType
      for brevity. Normally there are 3 results per resultType and an
      additional "thumbnails" key:

         [
           {
             "category": "Top result",
             "resultType": "video",
             "videoId": "vU05Eksc_iM",
             "title": "Wonderwall",
             "artists": [
               {
                 "name": "Oasis",
                 "id": "UCmMUZbaYdNH0bEd1PAlAqsA"
               }
             ],
             "views": "1.4M",
             "videoType": "MUSIC_VIDEO_TYPE_OMV",
             "duration": "4:38",
             "duration_seconds": 278
           },
           {
             "category": "Songs",
             "resultType": "song",
             "videoId": "ZrOKjDZOtkA",
             "title": "Wonderwall",
             "artists": [
               {
                 "name": "Oasis",
                 "id": "UCmMUZbaYdNH0bEd1PAlAqsA"
               }
             ],
             "album": {
               "name": "(What's The Story) Morning Glory? (Remastered)",
               "id": "MPREb_9nqEki4ZDpp"
             },
             "duration": "4:19",
             "duration_seconds": 259
             "isExplicit": false,
             "feedbackTokens": {
               "add": null,
               "remove": null
             }
           },
           {
             "category": "Albums",
             "resultType": "album",
             "browseId": "MPREb_IInSY5QXXrW",
             "playlistId": "OLAK5uy_kunInnOpcKECWIBQGB0Qj6ZjquxDvfckg",
             "title": "(What's The Story) Morning Glory?",
             "type": "Album",
             "artist": "Oasis",
             "year": "1995",
             "isExplicit": false
           },
           {
             "category": "Community playlists",
             "resultType": "playlist",
             "browseId": "VLPLK1PkWQlWtnNfovRdGWpKffO1Wdi2kvDx",
             "title": "Wonderwall - Oasis",
             "author": "Tate Henderson",
             "itemCount": "174"
           },
           {
             "category": "Videos",
             "resultType": "video",
             "videoId": "bx1Bh8ZvH84",
             "title": "Wonderwall",
             "artists": [
               {
                 "name": "Oasis",
                 "id": "UCmMUZbaYdNH0bEd1PAlAqsA"
               }
             ],
             "views": "386M",
             "duration": "4:38",
             "duration_seconds": 278
           },
           {
             "category": "Artists",
             "resultType": "artist",
             "browseId": "UCmMUZbaYdNH0bEd1PAlAqsA",
             "artist": "Oasis",
             "shuffleId": "RDAOkjHYJjL1a3xspEyVkhHAsg",
             "radioId": "RDEMkjHYJjL1a3xspEyVkhHAsg"
           },
           {
             "category": "Profiles",
             "resultType": "profile",
             "title": "Taylor Swift Time",
             "name": "@TaylorSwiftTime",
             "browseId": "UCSCRK7XlVQ6fBdEl00kX6pQ",
             "thumbnails": ...
           }
         ]

YTMusic.get_search_suggestions(query: str, detailed_runs=False) -> list[str] | list[dict]

   Get Search Suggestions

   Parameters:
      * **query** -- Query string, i.e. 'faded'

      * **detailed_runs** -- Whether to return detailed runs of each
        suggestion. If True, it returns the query that the user typed
        and the remaining suggestion along with the complete text
        (like many search services usually bold the text typed by the
        user). Default: False, returns the list of search suggestions
        in plain text.

   Returns:
      A list of search suggestions. If "detailed_runs" is False, it
      returns plain text suggestions.
         If "detailed_runs" is True, it returns a list of dictionaries
         with detailed information.

      Example response when "query" is 'fade' and "detailed_runs" is
      set to "False":

         [
           "faded",
           "faded alan walker lyrics",
           "faded alan walker",
           "faded remix",
           "faded song",
           "faded lyrics",
           "faded instrumental"
         ]

      Example response when "detailed_runs" is set to "True":

         [
           {
             "text": "faded",
             "runs": [
               {
                 "text": "fade",
                 "bold": true
               },
               {
                 "text": "d"
               }
             ],
             "fromHistory": true,
             "feedbackToken": "AEEJK..."
           },
           {
             "text": "faded alan walker lyrics",
             "runs": [
               {
                 "text": "fade",
                 "bold": true
               },
               {
                 "text": "d alan walker lyrics"
               }
             ],
             "fromHistory": false,
             "feedbackToken": None
           },
           {
             "text": "faded alan walker",
             "runs": [
               {
                 "text": "fade",
                 "bold": true
               },
               {
                 "text": "d alan walker"
               }
             ],
             "fromHistory": false,
             "feedbackToken": None
           },
           ...
         ]

YTMusic.remove_search_suggestions(suggestions: list[dict[str, Any]], indices: list[int] | None = None) -> bool

   Remove search suggestion from the user search history.

   Parameters:
      * **suggestions** -- The dictionary obtained from the
        "get_search_suggestions()" (with detailed_runs=True)`

      * **indices** -- Optional. The indices of the suggestions to be
        removed. Default: remove all suggestions.

   Returns:
      True if the operation was successful, False otherwise.

      Example usage:

         # Removing suggestion number 0
         suggestions = ytmusic.get_search_suggestions(query="fade", detailed_runs=True)
         success = ytmusic.remove_search_suggestions(suggestions=suggestions, indices=[0])
         if success:
             print("Suggestion removed successfully")
         else:
             print("Failed to remove suggestion")
