
    =Ґi                         d dl Z d dlZd dlZd dlZddlmZ ddlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZmZ  G d de      Z G d	 d
e      Z G d de      Zy)    N   )InfoExtractor   )ExtractorErrorISO639Utilsdetermine_extfilter_dictfloat_or_noneint_or_nonejoin_nonemptymake_archive_idparse_codecsparse_iso8601parse_qssmuggle_urlunified_timestampunsmuggle_urlurl_or_noneurljoinvariadic)requiretraverse_objc                   j    e Zd ZdgZdZi Zd ZddZd Zd Z	e
d        Zd	 Zdd
ZddZe
d        Zy)	ZDFBaseIEDE)zdfz	api-tokenc                    | j                   s?| j                   j                   | j                  j                  | j                  di i       t        | j                   dt        hfd      t        t        j                               k  r_| j                   j                  | j                  dd dd              | j                  j                  g | j                  | j                     | j                   d    d	| j                   d
    S )Ndefaultexpiresr   r   z0https://zdf-prod-futura.zdf.de/mediathekV2/tokenzDownloading API tokenzFailed to download API tokentype token)_token_cacheupdatecacheload_TOKEN_CACHE_PARAMSr   r   inttime_download_jsonstore)selfs    M/var/www/descvideos/venv/lib/python3.12/site-packages/yt_dlp/extractor/zdf.py_get_api_tokenzZDFBaseIE._get_api_token"   s       $$_TZZ__d6N6N%[XZ%[\))I}+EqQTWX\XaXaXcTdd$$T%8%8BD')G&I J DJJJd66J8I8IJ##F+,Ad.?.?.H-IJJ    Nc           
      P    | j                  ||d| d| t        d|i            S )NDownloading Failed to download Api-Auth)headers)r+   r	   )r-   urlvideo_iditem	api_tokens        r.   	_call_apizZDFBaseIE._call_api1   s?    ""\$04Gv2NY 78 # : 	:r0   c                     |rt        |t              sy t        j                  d|      }|r5t	        |j                  d            t	        |j                  d            z  S d S )Nz(?P<width>\d+):(?P<height>\d+)widthheight)
isinstancestrrematchr)   group)r-   aspect_ratiomobjs      r.   _parse_aspect_ratiozZDFBaseIE._parse_aspect_ratio6   sQ    :lC#@xx9<HGKs4::g&'#djj.B*CCUQUUr0   c                 J    t        |d dt        hfdt        hfdf      xs d S )Nc                     |d   S )NanchorOffset _vs     r.   <lambda>z-ZDFBaseIE._extract_chapters.<locals>.<lambda>=   s    .0A r0   rH   anchorLabel)
start_timetitle)r   r
   r?   )r-   datas     r.   _extract_chapterszZDFBaseIE._extract_chapters<   s=    D#A)M?;#cU+D
 #   	r0   c                     t               }i }| D ]l  }t        |j                  d            }|r||v r$|j                  |       |j                  d      xs d}|j	                  |g       j                  d|i       n |S )Nurilanguagedeur6   )setr   getadd
setdefaultappend)src	seen_urls	subtitlescaptionsubtitle_urllangs         r.   _extract_subtitleszZDFBaseIE._extract_subtitlesB   s    E		 	G&w{{5'9:L<9#<MM,';;z*3eD  r*11|3 	 r0   c                 :    t        ||j                  dd            S )Nz
{playerId}android_native_6)r   replace)r-   api_base_urltemplates      r.   _expand_ptmd_templatezZDFBaseIE._expand_ptmd_templateQ   s    |X%5%5lDV%WXXr0   c                 X   d }d }g g }}t               }	t        |      D ]  }
t        |
i       \  }
}|j                  d      dk(  }| j	                  |
|d|      }|j                  d      xs | j                  d|
dd       }|s|s|}|st        |dd	d
t        d      hf      }|t        |ddt        hf      z  }t        |ddddt        hf      D ]:  }t        |ddt        hf      D ]  }t        |ddd f      D ]  }|d   }||	v r|	j                  |       t        |      }|dk(  r| j                  ||ddd      }n|dv rt        |j                  d            }|r|rt        ||z        nd }d|it        |j                  d            ||t        |j                  d            t        d |j                  d!            t        | j                  d"|d#d             d$g}n| j!                  d%| d&|'       g }|j                  d(      }|D ]  }t#        j$                  |j                  d)      xs |j                  d)      xs d*j'                               }|j                  d+      d,k(  }|j)                  i |t        |d-   |xr d.      t        | xr ||xr d/|j                  d0      d12      |rd3nd4||r|j                  d0      d5k(  s|s|d6k(  rd7n|d8k(  r|d9k(  rd:n|d8k(  rd;n|d9k(  rd<nd4d=         " =  |xs |||| j+                  |      d>S )?Nvod_media_typeDGSz	PTMD databasenamez/vod/ptmd/[^/?#]+/(\w+)z
content IDr    
attributesdurationvaluei  )scalecaptions.priorityListformitaeten	qualitiesaudiotracksc                     t        |d         S )NrT   r   rJ   s     r.   rM   z)ZDFBaseIE._extract_ptmd.<locals>.<lambda>q   s    ZefghmfnZo r0   rT   m3u8mp4hlsF)m3u8_idfatal)rz   webmhighestVerticalResolutionr6   	mimeCodecfilesizehttpr!   z_(\d+)k_tbr)r=   r<   r   	format_idr   z Skipping unsupported extension "")r7   classrU    vcodecnoner   dgszGerman Sign Languageformat_notez, delimAudiodeskriptionadirV   main
      r   )r   r   
preferencerU   language_preference)idrn   formatsr^   )rW   r   r   rX   r:   _search_regexr   r
   dictrY   r   _extract_m3u8_formatsr   roundr   r   report_warningr   
short2longlowerr[   rb   )r-   	ptmd_urlsr7   r9   rC   
content_idrn   r   src_captionsr]   ptmd_urlsmuggled_datais_dgsptmdrl   streamqualityvariant
format_urlextfmtsr=   r<   f_classff_langis_audio_onlys                              r.   _extract_ptmdzZDFBaseIE._extract_ptmdT   s   
 "BE	 + E	H&3Hb&A#Hm"&&'78EAF>>(Hk9MD $ h %%&@(Lbf%g  f%
'|ZS`gkSlRm.noL
C$/HIIL&tnc=RUX\W]-^_ 0+F[#v4NO /G#/'8Mo9p#q .%,U^
%2$!j1+J7&=#'#=#= *HeURW $> $YD O3%0=X1Y%ZFDPU[E,*?$@aeE %z%".w{{;/G"H% +1).,7J8O,P-:66::fCU-V'243E3EkS]_dnr3E3s't% $D !//2RSVRWWX0Ydl/m#%D")++g"6!% A%0%;%;!"z!2!Sgkk*6M!SQS Z Z \&^F,-EE(Ov,EM#NN ,"#,-:1[>6K[V[-\/<(5$5$A'$*$E/E$%EE-$80F 5;b,2-:quu]?SWi?i4AgQUo %(/57fCT.4o.5.?)+, 	5./0+E	P ( 00>	
 	
r0   c                     |s	|sJ d       | j                  d|d| d| ||r#t        j                  |      j                         nd t	        | j                         d|rdnd d            S )	Nz One of query or body is requiredzhttps://api.zdf.de/graphqlr2   r3   Tzapplication/json)r4   zApollo-Require-PreflightzContent-Type)queryrQ   r5   )r+   jsondumpsencoder	   r/   )r-   item_id	data_descr   bodys        r.   _download_graphqlzZDFBaseIE._download_graphql   s    @@@}""('9+&*=i[(I4djj.557T //1,06: 2! 	 #  	r0   c                    t        | t        j                  hd f      D cg c]U  \  }}t        |      ||dk(  rdnddt        t	        j
                  dt        |            dt        hfdt        hfd	      W c}}S c c}}w )
Nc                     t        |d         S )Nr   rx   rJ   s     r.   rM   z/ZDFBaseIE._extract_thumbnails.<locals>.<lambda>   s    Q\]^_`]aQb r0   originalr   r   )r   r6   r   z+(?P<width>\d+|auto)[Xx](?P<height>\d+|auto)r<   r=   )r<   r=   )r   r   itemsr?   r@   searchr   )sourcer   r6   s      r.   _extract_thumbnailszZDFBaseIE._extract_thumbnails   s     !-VtzzlDb5c df i i.(J6!A
 299%SUXYbUcd!K=1#k]3g 	
 f 	f fs   AB N)NN)__name__
__module____qualname___GEO_COUNTRIESr(   r$   r/   r:   rE   rR   staticmethodrb   rh   r   r   r   rI   r0   r.   r   r      sf    VN.LK:
V  YR
h 	f 	fr0   r   c                   @    e Zd Zg dZdZddddddd	dd
dddgddddddddd	dd
dddgdddidddddddd	dd
dddgdddidddddddddddddd d!d"d#d$gd%d&d'ddddddddddd d!d"d#d$gd%ddidd(ddddddddddd d!d"d#d$gd%ddidd)d*i d+d,d-dd.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIgd&dJdKdLddMdNdOdPdQdRd=d?dSdTdUdVdWgd%d&dXdYi d+dZd-dd.d[d0d\d2d]d4d^d6d_d8d9d:d;d<d`d>dad@dbdBdcdDdddFdedHdfgd&dgdhdiddjdkdldmdndodpgdq	d&drdsi d+dtd-dd.dud0dvd2dwd4dxd6dyd8dzd:d{d<d`d>dad@d|dBd}dDd~dFdedHdgd&dddddddddzd{dddgdd&ddddddddddddddddddddddddddddddgZdZ fdZd Zd Z	 xZ
S )ZDFIE)zFhttps?://(?:www\.)?zdf\.de/(?:video|play)/(?:[^/?#]+/)*(?P<id>[^/?#]+)z=https?://(?:www\.)?zdf\.de/(?:[^/?#]+/)*(?P<id>[^/?#]+)\.htmlzKhttps?://(?:www\.)?(?:zdfheute|logo)\.de/(?:[^/?#]+/)*(?P<id>[^/?#]+)\.htmlr   zrhttps://www.zdf.de/video/dokus/sylt---deutschlands-edles-nordlicht-movie-100/sylt-deutschlands-edles-nordlicht-100%sylt-deutschlands-edles-nordlicht-100rz   #Sylt - Deutschlands edles Nordlicht$md5:35407b810c2e1e33efbe15ef6e4c06c3     P@8re:https://www\.zdf\.de/assets/sylt-118~original\?cb=\d+-sylt---deutschlands-edles-nordlicht-movie-1009`20210204zdf 210402_1915_sendung_dokr   r   rP   descriptionrn   	thumbnailseries	series_id	timestampupload_date_old_archive_ids)r6   	info_dictzqhttps://www.zdf.de/play/dokus/sylt---deutschlands-edles-nordlicht-movie-100/sylt-deutschlands-edles-nordlicht-100skip_downloadT)r6   r   paramszbhttps://www.zdf.de/dokumentation/dokumentation-sonstige/sylt-deutschlands-edles-nordlicht-100.htmlzhttps://www.zdf.de/video/dokus/collection-index-page-ard-collection-ard-dxjuomfyzdpzag93ojy2mzhhmmq3mzk2ztq4nda-132/page-video-ard-gelb-vom-hellen-glanz-zu-finsteren-abgruenden-102 84980c1a0148da6cd94de58333d7e1eez@page-video-ard-gelb-vom-hellen-glanz-zu-finsteren-abgruenden-102u.   Gelb: Vom hellen Glanz zu finsteren Abgründenz$md5:9aad4806b4c8ea152ab21e70c9d516beg     @zkre:https://www\.zdf\.de/assets/image-ard-gelb-vom-hellen-glanz-zu-finsteren-abgruenden-102~original\?cb=\d+zDie Magie der FarbenzTcollection-index-page-ard-collection-ard-dxjuomfyzdpzag93ojy2mzhhmmq3mzk2ztq4nda-132zSeason 2023i  z	Episode 5r   ihd20230801z>zdf video_ard_dXJuOmFyZDpwdWJsaWNhdGlvbjo0YTYyOTJjM2Q0ZThlNmY1)r   r   rP   r   rn   r   r   r   seasonseason_numberepisodeepisode_numberr   r   r   )r6   md5r   zhttps://www.zdf.de/play/dokus/collection-index-page-ard-collection-ard-dxjuomfyzdpzag93ojy2mzhhmmq3mzk2ztq4nda-132/page-video-ard-gelb-vom-hellen-glanz-zu-finsteren-abgruenden-102zhttps://www.zdf.de/dokus/collection-index-page-ard-collection-ard-dxjuomfyzdpzag93ojy2mzhhmmq3mzk2ztq4nda-132/page-video-ard-gelb-vom-hellen-glanz-zu-finsteren-abgruenden-102.htmlzThttps://www.zdf.de/video/magazine/heute-journal-104/heute-journal-vom-19-12-2021-100 6ada39465497a84fb98d48ffff69e7b7r   z heute-journal-vom-19-12-2021-100r   rP   zheute journal vom 19.12.2021r   z$md5:02504cf3b03777ff32fcc927d260c5ddrn   g     @r   zjhttps://epg-image.zdf.de/fotobase-webdelivery/images/273e5545-16e7-4ca3-898e-52fe9e06d964?layout=1920x1080chapterszcount:11r   heute journalr   heute-journal-104r   zSeason 2021r   i  r   zEpisode 370r   ir  r   i̙ar   20211219r   zzdf 211219_sendung_hjoz]https://www.zdf.de/video/serien/funk-collection-funk-11790-1596/funk-alles-ist-verzaubert-102 57af4423db0455a3975d2dc4578536bczfunk-alles-ist-verzaubert-102zAlles ist verzaubertz0Die Neue an der Schule verdreht Ismail den Kopf.g     @zTre:https://www\.zdf\.de/assets/teaser-funk-alles-ist-verzaubert-102~original\?cb=\d+DRUCKzfunk-collection-funk-11790-1596z
Episode 502   i0|a20211029zzdf video_funk_1770473zWhttps://www.zdfheute.de/video/heute-journal/heute-journal-vom-19-dezember-2025-100.html 47af8c2cfa30abf74501170f62754c63z&heute-journal-vom-19-dezember-2025-100z#heute journal vom 19. Dezember 2025z$md5:fd0dfbce0783486db839ff9140a8074bg     Л@zjhttps://epg-image.zdf.de/fotobase-webdelivery/images/273e5545-16e7-4ca3-898e-52fe9e06d964?layout=2400x1350zcount:10zSeason 2025i  zEpisode 365m  iмEi20251219zzdf 251219_2200_sendung_hjozhhttps://www.zdf.de/nachrichten/politik/deutschland/koalitionsverhandlungen-spd-cdu-csu-dobrindt-100.html c3a78514dd993a5781aa3afe50db51e2z0koalitionsverhandlungen-spd-cdu-csu-dobrindt-100u(   Dobrindt schließt Steuererhöhungen ausz$md5:9a117646d7b8df6bc902eb543a9c9023iE  zTre:https://www\.zdfheute\.de/assets/dobrindt-csu-berlin-direkt-100~1920x1080\?cb=\d+ig20250330zzdf 250330_clip_2_bdi)	r   r   rP   r   rn   r   r   r   r   z>https://www.logo.de/logo-vom-freitag-19-dezember-2025-102.html cfb1a0988b1249f052a437a55851134bz%logo-vom-freitag-19-dezember-2025-102z$logo! vom Freitag, 19. Dezember 2025z$md5:971428cb563e924c153580f23870c613g     ~@z[re:https://www\.zdf\.de/assets/iran-rote-erde-sendung-19-dezember-2025-100~original\?cb=\d+zcount:7zlogo!zlogo-154zEpisode 382i~  i|Eizzdf 251219_1925_sendung_logzIhttps://www.logo.de/kinderreporter-vivaan-trifft-alina-grijseels-100.html 094cea026babb67aa25fd0108400bc12z0kinderreporter-vivaan-trifft-alina-grijseels-100z*Vivaan trifft Handballerin Alina Grijseelsz$md5:9572e7f4340dda823ea4091a76624da6g     d@zJre:https://www\.zdf\.de/assets/vivaan-alina-grijseels-100~original\?cb=\d+iFi20251220z%zdf 251219_kr_alina_grijseels_neu_logz^https://www.zdf.de/politik/phoenix-sendungen/wohin-fuehrt-der-protest-in-der-pandemie-100.html)r6   only_matchingz@https://www.zdf.de/dokumentation/ab-18/10-wochen-sommer-102.htmlzOhttps://www.zdf.de/politik/phoenix-sendungen/die-gesten-der-maechtigen-100.htmlz>https://www.zdf.de/filme/filme-sonstige/der-hauptmann-112.htmlz8https://www.zdf.de/wissen/nano/nano-21-mai-2019-102.htmlzYhttps://www.zdf.de/service-und-hilfe/die-neue-zdf-mediathek/zdfmediathek-trailer-100.htmlz\https://www.zdf.de/filme/taunuskrimi/die-lebenden-und-die-toten-1---ein-taunuskrimi-100.htmlzqhttps://www.zdf.de/dokumentation/planet-e/planet-e-uebersichtsseite-weitere-dokumentationen-von-planet-e-100.htmlzVhttps://www.zdf.de/arte/todliche-flucht/page-video-artede-toedliche-flucht-16-100.htmlzShttps://www.zdf.de/dokumentation/terra-x/unser-gruener-planet-wuesten-doku-100.htmla$  
query VideoByCanonical($canonical: String!) {
  videoByCanonical(canonical: $canonical) {
    canonical
    title
    leadParagraph
    editorialDate
    teaser {
      description
      image {
        list
      }
    }
    episodeInfo {
      episodeNumber
      seasonNumber
    }
    smartCollection {
      canonical
      title
    }
    currentMedia {
      nodes {
        ptmdTemplate
        ... on VodMedia {
          duration
          aspectRatio
          streamAnchorTags {
            nodes {
              anchorOffset
              anchorLabel
            }
          }
          vodMediaType
          label
        }
        ... on LiveMedia {
          start
          stop
          encryption
          liveMediaType
          label
        }
        id
      }
    }
  }
}
    c                 h    t        |   |i |}|j                  d      }t        | |      g|d<   |S )Nr   r   )superr   popr   )r-   argskwargs	ptmd_dataold_archive_id	__class__s        r.   r   zZDFIE._extract_ptmd  s@    G)4:6:	"t,)8~)N(O	$%r0   c                 R   | j                  d| |dd      }|d   }t        |dt        ht        t	        d      hf      }g }t        |dt
        j                  hd	f      D ]a  \  }}t        |d
t        hf      }|s|j                  ||t        |j                  d            t        |j                  d            d       c d|it        |ddt        hfddt        hfdt        ht        fdd| j                  hfd      | j                  ||| j                               d|iS )Nz4https://zdf-prod-futura.zdf.de/mediathekV2/document/zDownloading fallback metadataz$Failed to download fallback metadata)noteerrnotedocument)streamApiUrlAndroid)streamsr   r  zPTMD URL
teaserBild.r6   r<   r=   )r6   r   r<   r=   
thumbnailstitelbeschreibung))r  date)metaeditorialDaterq   )rP   r   r   r^   r   )r+   r   r   anyr   r   r   r[   r   rX   r?   r   rb   r   r/   )	r-   document_idvideor  r   r  thumbnail_keyr   thumbnail_urls	            r.   _extract_fallbackzZDFIE._extract_fallback  so   ##B;-P=: $ < $JM3!4 5+7 8 
(4Xtzzl\_?`(a 		$M9(U[M4JKM $#$Y]]7%;<%immH&=>	 			 *
5$gu5 *NSEBE&'. )*t7N7N6OP# 
   ;8K8K8MN
 +
 	
r0   c                    | j                  |      }| j                  |dd| j                  d|id      d   d   }|s| j                  |      S d }g }t	        |dd	d
 f      D ]l  }| j                  d|d         }|j                  d      x}rt        |d|i      }|j                  |       |rM| j                  |j                  d            }n i t	        |dt        hfdt        t        hfdt        hfddd| j                  hfddt        hfddt        hfddt        hfddt        hfdd	ddd	| j                  hfd	      | j!                  ||| j#                         |      d|iS )Nzvideo metadataVideoByCanonical	canonical)operationNamer   	variables)r   rQ   videoByCanonicalcurrentMedianodesc                     |d   S )NptmdTemplaterI   rJ   s     r.   rM   z%ZDFIE._real_extract.<locals>.<lambda>K  s    TUVdTe r0   zhttps://api.zdf.der  vodMediaTyperj   aspectRatiorP   leadParagraph)teaserr   r  r   imagelistepisodeInfoepisodeNumberseasonNumbersmartCollectionr   streamAnchorTags)	rP   r   r   r  r   r   r   r   r   r   )	_match_idr   _GRAPHQL_QUERYr  r   rh   rX   r   r[   rE   r?   r  r   r   r   rR   r   r/   )	r-   r6   r7   
video_datarC   r   noder   rj   s	            r.   _real_extractzZDFIE._real_extract>  s   >>#&++H6F/((%x0N
+  	 &	'
 ))(33	 ngGe-fg 	QD112F^H\]H!%.!99~9&x2BN1STX&#778OP	Q
:!C5) LcTWSXY-?'&4;S;S:TU#0/K="Q"/+!O,gu=/seD+Wa9KWW[WmWmVno
( 

   Hd6I6I6K\Z
 (
 	
r0   )r   r   r   
_VALID_URLIE_NAME_TESTSr)  r   r  r,  __classcell__r   s   @r.   r   r      s   J G D9:AT;H#%!> ?
$ C9:AT;H#%!> ?
 #D)!& t9:AT;H#%!> ?
 #D)!( F1TEA H,o#!"#%!a b
0 ETEA H,o#!"#%!a b
" #D)). ETEA H,o#!"#%!a b
" #D))0 f1
4
5
 3
 A	

 
   F
 

 o
 ,
 m
 T
 }
 c
 
 :
" !9 :#
4 o11+Mp:#!# #%!9 :
	. i1
:
5
 :
 A	

 
   F
 

 o
 ,
 m
 T
 }
 c
 
 :
  !> ?!
	0 z1D?Ap#%!8 9

	" P1
9
5
 ;
 A	

 
 w
 	
 g
 
 m
 T
 }
 c
 
 :
  !> ?!
	0 [1DAAf##%!H I
	& p R a P J
 k n C h eWNF`0Nd#
J$
r0   r   c                        e Zd ZdZdZddddddd	d
dddddd	ej                         gddddddddddddgdddidddddddd	dd d!d"dd#d	d$d%d&d"dd'd(d)gZd*Ze	 fd+       Z
d/d,Zd- Zd. Z xZS )0ZDFChannelIEz2https?://www\.zdf\.de/(?:[^/?#]+/)*(?P<id>[^/?#]+)zzdf:channelz1https://www.zdf.de/sport/das-aktuelle-sportstudiozdas-aktuelle-sportstudio-220zdas aktuelle sportstudioz$md5:e46c785324238a03edcf8b301c5fd5dc)r   rP   r      )r6   r   playlist_mincountz5https://www.zdf.de/sport/das-aktuelle-sportstudio-220zFhttps://www.zdf.de/dokus/sylt---deutschlands-edles-nordlicht-movie-100r   rz   r   r   r   r   r   r   r   r   r   r   T)add_ier6   r   r   z9https://www.zdf.de/gesellschaft/aktenzeichen-xy-ungeloestzaktenzeichen-xy-ungeloest-110u   Aktenzeichen XY... Ungelöstz$md5:b79ac0d64b979e53cbe510c0ca9cb7ber   z-https://www.zdf.de/magazine/heute-journal-104r   r   z$md5:6edad39189abf8431795d3d6d7f986b3in  z:https://www.zdf.de/magazine/heute-journal-104?staffel=2025zheute-journal-104-s2025zheute journal - Season 2025r   r   )r6   r   r5  playlist_maxcount   c                 P    t         j                  |      rdS t        |   |      S )NF)r   suitabler   )clsr6   r   s     r.   r:  zZDFChannelIE.suitable  s#    s+uF1A#1FFr0   c                     | j                  |d| d| ddt        j                  t        ||| j                  |d            t        j                  dddd	i      d
      d   d   S )Nzseason z page z JSONseasonByCanonical)seasonIndexr  episodesPageSizeepisodesAfterpersistedQueryr   @9412a0f4ac55dc37d46975d461ec64bfd14380d815df843a1492348f77b5c99aversion
sha256Hashr  r  
extensionsr   rQ   smartCollectionByCanonical)r   r   r   r	   
_PAGE_SIZE)r-   playlist_idcanonical_id
season_idxr   page_numbercursors          r.   _fetch_pagezZDFChannelIE._fetch_page  s    %%7=/}EJ!4!ZZ#-!-(,%+	5 )  #jj$#$&h'* S &   45 	5r0   c              #   2  K   t        |      D ]  \  }}|||k7  rd }t        j                  d      D ]  }| j                  ||||||      }	t	        |	d      }
t	        |
dddd f      D ]b  } | j
                  |d   t        fi t	        |dt        hfd	d
t        hfdt        t        hfdt        hfddt        hfddt        hfd       d t	        |
dddt        hf      xs i }|j                  d      r|j                  d      s |d   }  y w)Nr   )seasonsr  ..episodesr  c                     t        |d         S )N
sharingUrlrx   rJ   s     r.   rM   z'ZDFChannelIE._entries.<locals>.<lambda>  s    ;q;W r0   rU  r  r   rP   r  r  r#  r$  r%  )r   rP   r   r   r   r   r   pageInfohasNextPage	endCursor)	enumerate	itertoolscountrP  r   
url_resultr   r?   r  r   r   r   rX   )r-   rK  rL  season_numbersrequested_season_numberrM  r   rO  rN  pager  r   	page_infos                r.   _entrieszZDFChannelIE._entries  s_    )2>)B 	0%J&27NR_7_F(q1 0''z=+W]_ %T+DE+EW.W4   G *$//-u	&w#."6&.#%?,XZ]`c_d+e*9M?)K/<oP[}.].;^k]-[1 	 	 )ZdV0TU[Y[	 }}]39==;U";//0	0s   DDc                    | j                  |      }| j                  ||      }| j                  | j                  |j                  dd      }t        t        |      ddt        hf      }t        ||xr d|       }| j                  |ddt        j                  |d	d
      t        j                  ddddi      d      d   d   }t        |dt        hf      xs i }t        |ddddt        hf      }| j                  |xr |t        |j                  d            xr |j                  d            s| j!                  |d   t"        |d         S |||vrt%        d| d      | j'                  | j)                  ||||      |t        t        |dt*        hf      |xr d| d      t        |dt*        hf            S )Nz
channel idr   )rB   staffelr   szsmart collection dataGetSmartCollectionByCanonicald   )r  videoPageSizerA  r   @cb49420e133bd668ad895a8cea0e65cba6aa11ac1cacb02341ff5cf32a17cd02rC  rF  rH  rQ   rI  r  rR  .numberrU  r  zSeason z% was not found in the collection datarP   z - r   infoText)r(  _request_webpager   r-  r6   r   r   r   r   r   r   r   r   _yes_playlistr   rX   r\  r   r   playlist_resultra  r?   )	r-   r6   rL  urlhr   rK  collection_datar*  r]  s	            r.   r,  zZDFChannelIE._real_extract  s   ~~c*$$S,7))$//488\Y])^$Xc]Y[M4RS#L-2WaDWX000!@!ZZ!-%()  #jj$#$&h'* 9 1   45 "/GdV3DEK
%o	9cS[^i]j7kl!!*{
|45U*..:U
 ??:l#;UJ{D[\\$n)L 7=/9^!_``##MM+|^]S_w.>?;GM?";5J :u*=>@ 	@r0   r   )r   r   r   r-  r.  r   ie_keyr/  rJ  classmethodr:  rP  ra  r,  r0  r1  s   @r.   r3  r3  e  s"   FJG C0/A

  	 G0/A

  	 <<>"W9:AT;H#%!> ?
 #D)#& K13A

  ?%$A

 !	 L+2A

  
k?FB JG G5$0>'@r0   r3  )rZ  r   r@   r*   commonr   utilsr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   utils.traversalr   r   r   r   r3  rI   r0   r.   <module>ru     sb      	  !    & 4bf bfJ`
I `
Fb@9 b@r0   