Repository: yt-dlp/yt-dlp
File: yt_dlp/extractor/idagio.py (Python)

Code before:
        'info_dict': {
            'id': '31652bec-8c5b-460e-a3f0-cf1f69817f53',
            'display_id': 'beethoven-the-most-beautiful-piano-music',
            'title': 'Beethoven: the most beautiful piano music',
            'description': 'md5:d41bb04b8896bb69377f5c2cd9345ad1',
            'thumbnail': r're:https://.+/playlists/31652bec-8c5b-460e-a3f0-cf1f69817f53/main\.jpg',
            'creators': ['IDAGIO'],
        },
        'playlist_mincount': 16,  # one entry is geo-restricted
    }]
    _API_URL_TMPL = 'https://api.idagio.com/v2.0/playlists/{}'
    _PLAYLIST_ID_KEY = 'display_id'

    def _parse_playlist_metadata(self, playlist_info):
        return traverse_obj(playlist_info, {
            'id': ('id', {str}),
            'title': ('title', {str}),
            'thumbnail': ('imageUrl', {url_or_none}),
            'description': ('description', {str}),
            'creators': ('curator', 'name', {str}, all),
        })


class IdagioPersonalPlaylistIE(IdagioPlaylistBaseIE):
    _VALID_URL = r'https?://(?:www\.)?app\.idagio\.com(?:/[a-z]+)?/playlists/personal/(?P<id>[\da-f-]+)'
    _TESTS = [{
        'url': 'https://app.idagio.com/playlists/personal/99dad72e-7b3a-45a4-b216-867c08046ed8',
        'info_dict': {
            'id': '99dad72e-7b3a-45a4-b216-867c08046ed8',
            'title': 'Test',
            'creators': ['1a6f16a6-4514-4d0c-b481-3a9877835626'],
            'thumbnail': r're:https://.+/artists/86371/main\.jpg',
            'timestamp': 1602859138,
            'modified_timestamp': 1755616667,
            'upload_date': '20201016',
            'modified_date': '20250819',
        },
        'playlist_count': 100,
    }]
    _API_URL_TMPL = 'https://api.idagio.com/v1.0/personal-playlists/{}'

    def _parse_playlist_metadata(self, playlist_info):
        return traverse_obj(playlist_info, {
            'title': ('title', {str}),
            'thumbnail': ('image_url', {url_or_none}),
            'creators': ('user_id', {str}, all),
            'timestamp': ('created_at', {int_or_none(scale=1000)}),
            'modified_timestamp': ('updated_at', {int_or_none(scale=1000)}),
        })


Review comment (suggestion):
```suggestion
    _VALID_URL = r'https?://(?:www\.)?app\.idagio\.com(?:/[a-z]{2})?/playlists/personal/(?P<id>[\da-f-]+)'
    _TESTS = [{
```
again, add `only_matching` test please

Code after:
    _VALID_URL = r'https?://(?:www\.)?app\.idagio\.com(?:/[a-z]{2})?/playlists/(?!personal/)(?P<id>[\w-]+)'
    _TESTS = [{
        'url': 'https://app.idagio.com/playlists/beethoven-the-most-beautiful-piano-music',
        'info_dict': {
            'id': '31652bec-8c5b-460e-a3f0-cf1f69817f53',
            'display_id': 'beethoven-the-most-beautiful-piano-music',
            'title': 'Beethoven: the most beautiful piano music',
            'description': 'md5:d41bb04b8896bb69377f5c2cd9345ad1',
            'thumbnail': r're:https://.+/playlists/31652bec-8c5b-460e-a3f0-cf1f69817f53/main\.jpg',
            'creators': ['IDAGIO'],
        },
        'playlist_mincount': 16,  # one entry is geo-restricted
    }, {
        'url': 'https://app.idagio.com/de/playlists/piano-music-for-an-autumn-day',
        'info_dict': {
            'id': 'd70e9c7f-7080-4308-ae0f-f890dddeda82',
            'display_id': 'piano-music-for-an-autumn-day',
            'title': 'Piano Music for an Autumn Day',
            'description': 'Get ready to snuggle up and enjoy all the musical colours of this cosy, autumnal playlist.',
            'thumbnail': r're:https://.+/playlists/d70e9c7f-7080-4308-ae0f-f890dddeda82/main\.jpg',
            'creators': ['IDAGIO'],
        },
        'playlist_count': 35,
    }]
    _API_URL_TMPL = 'https://api.idagio.com/v2.0/playlists/{}'
    _PLAYLIST_ID_KEY = 'display_id'

    def _parse_playlist_metadata(self, playlist_info):
        return traverse_obj(playlist_info, {
            'id': ('id', {str}),
            'title': ('title', {str}),
            'thumbnail': ('imageUrl', {url_or_none}),
            'description': ('description', {str}),
            'creators': ('curator', 'name', {str}, all),
        })


class IdagioPersonalPlaylistIE(IdagioPlaylistBaseIE):
    _VALID_URL = r'https?://(?:www\.)?app\.idagio\.com(?:/[a-z]{2})?/playlists/personal/(?P<id>[\da-f-]+)'
    _TESTS = [{
        'url': 'https://app.idagio.com/playlists/personal/99dad72e-7b3a-45a4-b216-867c08046ed8',
        'info_dict': {
            'id': '99dad72e-7b3a-45a4-b216-867c08046ed8',
            'title': 'Test',
            'creators': ['1a6f16a6-4514-4d0c-b481-3a9877835626'],
            'thumbnail': r're:https://.+/artists/86371/main\.jpg',
            'timestamp': 1602859138,
            'modified_timestamp': 1755616667,
            'upload_date': '20201016',
            'modified_date': '20250819',
        },