
    V|h#                         S SK r S SKrS SKrS SKrSSKJr  SSKJrJrJ	r	J
r
JrJrJrJrJrJrJrJrJrJrJrJrJr  SSKJrJr   " S S\5      r " S	 S
\5      r " S S\5      rg)    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                   x    \ rS rSrS/rSr0 rS rSS jrS r	S r
\S	 5       rS
 rSS jrSS jr\S 5       rSrg)	ZDFBaseIE   DE)zdfz	api-tokenc                    U R                   (       d?  U R                   R                  U R                  R                  " U R                  S0 065        [        U R                   S[        14SS9[        [        R                  " 5       5      :  a_  U R                   R                  U R                  SS SS5      5        U R                  R                  " / U R                  QU R                   P76   U R                   S    S	U R                   S
    3$ )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    N/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/zdf.py_get_api_tokenZDFBaseIE._get_api_token"   s       $$TZZ__d6N6N%[XZ%[\))I}+EqQTWX\XaXaXcTdd$$T%8%8BD')G&I J JJJd66J8I8IJ##F+,Ad.?.?.H-IJJ    Nc           
      H    U R                  XSU 3SU 3[        SU05      S9$ )NDownloading Failed to download Api-Auth)headers)r,   r	   )r.   urlvideo_iditem	api_tokens        r/   	_call_apiZDFBaseIE._call_api1   s=    ""\$04Gv2NY 78 # : 	:r2   c                     U(       a  [        U[        5      (       d  g [        R                  " SU5      nU(       a5  [	        UR                  S5      5      [	        UR                  S5      5      -  $ S $ )Nz(?P<width>\d+):(?P<height>\d+)widthheight)
isinstancestrrematchr*   group)r.   aspect_ratiomobjs      r/   _parse_aspect_ratioZDFBaseIE._parse_aspect_ratio6   sT    :lC#@#@xx9<HGKs4::g&'#djj.B*CCUQUUr2   c                 T    [        US S[        14S[        14S.45      =(       d    S $ )Nc                     US   $ )NanchorOffset _vs     r/   <lambda>-ZDFBaseIE._extract_chapters.<locals>.<lambda>=   s	    .0Ar2   rL   anchorLabel)
start_timetitle)r   r
   rB   )r.   datas     r/   _extract_chaptersZDFBaseIE._extract_chapters<   s=    D#A)M?;#cU+D
 #   	r2   c                    [        5       n0 nU  Hy  n[        UR                  S5      5      nU(       a  XA;   a  M+  UR                  U5        UR                  S5      =(       d    SnUR	                  U/ 5      R                  SU05        M{     U$ )Nurilanguagedeur8   )setr   getadd
setdefaultappend)src	seen_urls	subtitlescaptionsubtitle_urllangs         r/   _extract_subtitlesZDFBaseIE._extract_subtitlesB   s    E		G&w{{5'9:L<#<MM,';;z*3eD  r*11|3   r2   c                 8    [        XR                  SS5      5      $ )Nz
{playerId}android_native_6)r   replace)r.   api_base_urltemplates      r/   _expand_ptmd_templateZDFBaseIE._expand_ptmd_templateQ   s    |%5%5lDV%WXXr2   c                    S nS n/ / p[        5       n	[        U5       GH%  n
[        U
0 5      u  pUR                  S5      S:H  nU R	                  XSU5      nUR                  S5      =(       d    U R                  SU
SS S9nU(       d	  U(       d  UnU(       d  [        USS	S
[        SS9145      nU[        USS[        145      -  n[        USSSS[        145       GHa  n[        USS[        145       GHD  n[        USSS 45       GH+  nUS   nUU	;   a  M  U	R                  U5        [        U5      nUS:X  a  U R                  UUSSSS9nOUS;   a  [        UR                  S5      5      nU(       a  U(       a  [        UU-  5      OS nSU0[        UR                  S5      5      EUU[        SUR                  S 5      5      [        U R                  S!US"S S95      S#.E/nOU R!                  S$U S%3US&9  / nUR                  S'5      nU GH  n["        R$                  " UR                  S(5      =(       d    UR                  S(5      =(       d    S)R'                  5       5      nUR                  S*5      S+:H  nUR)                  0 UE[        US,   U=(       a    S-5      [        U(       + =(       a    UU=(       a    S.UR                  S/5      S0S19U(       a  S2OS3UU(       a  UR                  S/5      S4:X  d  U(       d  US5:X  a  S6OUS7:X  a  US8:X  a  S9OUS7:X  a  S:O	US8:X  a  S;OS3S<.E5        GM"     GM.     GMG     GMd     GM(     U=(       d    UUUU R+                  U5      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                     [        US   5      $ )NrZ   r   rN   s     r/   rQ   )ZDFBaseIE._extract_ptmd.<locals>.<lambda>q   s    ZefghmfnZor2   rZ   m3u8mp4hlsF)m3u8_idfatal)r   webmhighestVerticalResolutionr8   	mimeCodechttpr"   z_(\d+)k_tbr)r@   r?   	format_idr   z Skipping unsupported extension "")r9   classr[    vcodecnoner   dgszGerman Sign Languageformat_notez, delimAudiodeskriptionadir\   main
      r   )r   r   
preferencer[   language_preference)idrv   formatsrd   )r]   r   r   r^   r<   _search_regexr   r
   dictr_   r   _extract_m3u8_formatsr   roundr   r   report_warningr   
short2longlowerra   rh   )r.   	ptmd_urlsr9   r;   rF   
content_idrv   r   src_captionsrc   ptmd_urlsmuggled_datais_dgsptmdrt   streamqualityvariant
format_urlextfmtsr@   r?   f_classff_langis_audio_onlys                              r/   _extract_ptmdZDFBaseIE._extract_ptmdT   s   
 "BE	 +H&3Hb&A#H"&&'78EAF>>(k9MD $ h %%&@(Lbf%g  f%
'|ZS`gkSlRm.noL
C$/HIIL&tnc=RUX\W]-^_+F[#v4NOG#/'8Mo9p#q%,U^
%2$!j1+J7&=#'#=#= *HeURW $> $YD O3%0=X1Y%ZFDPU[E,*?$@aeE %z%".w{{;/G"H% +1).-: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.?)+, 	 "&3 $r  P `+ ,N ( 00>	
 	
r2   c                     U(       d  U(       d   S5       eU R                  SUSU 3SU 3X4(       a$  [        R                  " U5      R                  5       OS [	        U R                  5       SU(       a  SOS S.5      S9$ )	Nz One of query or body is requiredzhttps://api.zdf.de/graphqlr4   r5   Tzapplication/json)r6   zApollo-Require-PreflightzContent-Type)queryrV   r7   )r,   jsondumpsencoder	   r0   )r.   item_id	data_descr   bodys        r/   _download_graphqlZDFBaseIE._download_graphql   s    @@@}""('9+&*=i[(I4djj.557T //1,06: 2! 	 #  	r2   c                    [        U [        R                  1S 45       VVs/ s HW  u  p[        U5      UUS:X  a  SOSS.[        [        R
                  " S[        U5      5      S[        14S[        14S	.5      EPMY     snn$ s  snnf )
Nc                     [        US   5      $ )Nr   r   rN   s     r/   rQ   /ZDFBaseIE._extract_thumbnails.<locals>.<lambda>   s    Q\]^_`]aQbr2   originalr   r   )r   r8   r   z+(?P<width>\d+|auto)[Xx](?P<height>\d+|auto)r?   r@   )r?   r@   )r   r   itemsrB   rC   searchr   )sourcer   r8   s      r/   _extract_thumbnailsZDFBaseIE._extract_thumbnails   s     !-VtzzlDb5c df !eni i.(J6!A
 299%SUXYbUcd!K=1#k]3g 	
 !ef 	f fs   ABrM   N)NN)__name__
__module____qualname____firstlineno___GEO_COUNTRIESr)   r%   r0   r<   rH   rW   staticmethodrh   ro   r   r   r   __static_attributes__rM   r2   r/   r   r      sf    VN.LK:
V  YQ
f 	f 	fr2   r   c                     ^  \ rS rSrSS/rSrSSSSS	S
SSSSSS/S.S.SSSSS	S
SSSSSS/S.SS0S.SSSSS	S
SSSSSS/S.SS0S.SSSSSSSSSSS S!S"S#S$S%S&/S'.S(.S)SSSSSSSSSS S!S"S#S$S%S&/S'.SS0S*.S+SSSSSSSSSS S!S"S#S$S%S&/S'.SS0S*.S,S-0 S.S/_S0S_S1S2_S3S4_S5S6_S7S8_S9S:_S;S<_S=S>_S?S@_SASB_SCSD_SESF_SGSH_SISJ_SKSL/_S(.SMSNSOSSPSQSRSSSTSUSV/SW.	S(.SXSYSZSS[S\S]S^S_S`SaSbScS!SdSeSf/S'.S(.SgShSSiSjSkSlSmSnSoSpSqSrSsStSu/S'.S.SvSwSxSySzS{S|S}S~S S!ScS!SSS/S'.SS0S.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS./rSrU 4S jrS r	S r
SrU =r$ )ZDFIE   zFhttps?://(?:www\.)?zdf\.de/(?:video|play)/(?:[^/?#]+/)*(?P<id>[^/?#]+)z=https?://(?:www\.)?zdf\.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-100r   #Sylt - Deutschlands edles Nordlicht$md5:35407b810c2e1e33efbe15ef6e4c06c3     P@<https://www.zdf.de/assets/sylt-118~original?cb=1613992485011-sylt---deutschlands-edles-nordlicht-movie-1009`20210204zdf 210402_1915_sendung_dokr   r   rU   descriptionrv   	thumbnailseries	series_id	timestampupload_date_old_archive_ids)r8   	info_dictzqhttps://www.zdf.de/play/dokus/sylt---deutschlands-edles-nordlicht-movie-100/sylt-deutschlands-edles-nordlicht-100skip_downloadT)r8   r   paramszbhttps://www.zdf.de/dokumentation/dokumentation-sonstige/sylt-deutschlands-edles-nordlicht-100.htmlzphttps://www.zdf.de/video/dokus/die-magie-der-farben-116/die-magie-der-farben-von-koenigspurpur-und-jeansblau-100 1eda17eb40a9ead3046326e10b9c5973z8die-magie-der-farben-von-koenigspurpur-und-jeansblau-100u   Von Königspurpur bis Jeansblauz$md5:a89da10c928c6235401066b60a6d5c1ag     n@zShttps://www.zdf.de/assets/koenigspurpur-bis-jeansblau-100~original?cb=1741857765971zDie Magie der Farbenzdie-magie-der-farben-116zSeason 1r   z	Episode 2r   i-V20151025zzdf 151025_magie_farben2_tex)r   r   rU   r   rv   r   r   r   seasonseason_numberepisodeepisode_numberr   r   r   )r8   md5r   zohttps://www.zdf.de/play/dokus/die-magie-der-farben-116/die-magie-der-farben-von-koenigspurpur-und-jeansblau-100)r8   r   r   r   zfhttps://www.zdf.de/dokumentation/terra-x/die-magie-der-farben-von-koenigspurpur-und-jeansblau-100.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   rU   zheute journal vom 19.12.2021r   z$md5:02504cf3b03777ff32fcc927d260c5ddrv   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_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  zXhttps://www.zdfheute.de/assets/dobrindt-csu-berlin-direkt-100~1920x1080?cb=1743357653736ig20250330zzdf 250330_clip_2_bdi)	r   r   rU   r   rv   r   r   r   r   zFhttps://www.zdf.de/funk/druck-11790/funk-alles-ist-verzaubert-102.html 57af4423db0455a3975d2dc4578536bczfunk-alles-ist-verzaubert-102zAlles ist verzaubertz0Die Neue an der Schule verdreht Ismail den Kopf.g     @zXhttps://www.zdf.de/assets/teaser-funk-alles-ist-verzaubert-102~original?cb=1663848412907DRUCKzfunk-collection-funk-11790-1590zSeason 7   z	Episode 1i0|a20211029zzdf video_funk_1770473zHhttps://www.zdf.de/serien/soko-stuttgart/das-geld-anderer-leute-100.htmlzdas-geld-anderer-leute-100zDas Geld anderer Leutez$md5:cb6f660850dc5eb7d1ab776ea094959dg     *@zjhttps://epg-image.zdf.de/fotobase-webdelivery/images/e2d7e55a-09f0-424e-ac73-6cac4dd65f35?layout=1920x1080zSOKO Stuttgartzsoko-stuttgart-104z	Season 11   z
Episode 10r   i2g20241015zzdf 191205_1800_sendung_sok8zLhttps://www.zdf.de/serien/northern-lights/begegnung-auf-der-bruecke-100.htmlzbegegnung-auf-der-bruecke-100r   u   Begegnung auf der Brückez$md5:e53a555da87447f7f1207f10353f8e45g     @zjhttps://epg-image.zdf.de/fotobase-webdelivery/images/c5ff1d1f-f5c8-4468-86ac-1b2f1dbecc76?layout=1920x1080zNorthern Lightsznorthern-lights-100iDg20250203zzdf 240319_2310_sendung_notzgeo-restricted http formatz^https://www.zdf.de/politik/phoenix-sendungen/wohin-fuehrt-der-protest-in-der-pandemie-100.html)r8   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U ]  " U0 UD6nUR                  S5      n[        X5      /US'   U$ )Nr   r   )superr   popr   )r.   argskwargs	ptmd_dataold_archive_id	__class__s        r/   r   ZDFIE._extract_ptmd  s>    G)4:6:	"t,)8)N(O	$%r2   c                 X   U R                  SU 3USSS9nUS   n[        US[        1[        [	        S5      145      n/ n[        US[
        R                  1S	45       Hg  u  pg[        US
[        145      nU(       d  M!  UR                  UU[        UR                  S5      5      [        UR                  S5      5      S.5        Mi     SU0[        USS[        14SS[        14S[        1[        4SSU R                  14S.5      EU R                  XAU R                  5       5      ESU0E$ )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.r8   r?   r@   )r8   r   r?   r@   
thumbnailstitelbeschreibung))r  date)metaeditorialDatery   )rU   r   r   rd   r   )r,   r   r   anyr   r   r   ra   r   r^   rB   r   rh   r   r0   )	r.   document_idvideor  r   r  thumbnail_keyr   thumbnail_urls	            r/   _extract_fallbackZDFIE._extract_fallback  sg   ##B;-P=: $ < $JM3!4 5+7 8 
(4Xtzzl\_?`(a$M(U[M4JKM $#$Y]]7%;<%immH&=>	 	 )b *
5$gu5 *NSEBE&'. )*t7N7N6OP# 
   8K8K8MN
 +
 	
r2   c                    U R                  U5      nU R                  USSU R                  SU0S.S9S   S   nU(       d  U R                  U5      $ S n/ n[	        USS	S
 45       Hx  nU R                  SUS   5      nUR                  S5      =n(       a  [        USU05      nUR                  U5        U(       a  MX  U R                  UR                  S5      5      nMz     0 [	        US[        14S[        [        14S[        14SSSU R                  14SS[        14SS[        14SS[        14SS[        14SS	SSS	U R                  14S.	5      EU R!                  XRU R#                  5       U5      ESU0E$ )Nzvideo metadataVideoByCanonical	canonical)operationNamer   	variables)r   rV   videoByCanonicalcurrentMedianodesc                     US   $ )NptmdTemplaterM   rN   s     r/   rQ   %ZDFIE._real_extract.<locals>.<lambda>3  s    TUVdTer2   zhttps://api.zdf.der)  vodMediaTyperr   aspectRatiorU   leadParagraph)teaserr   r  r/  imagelistepisodeInfoepisodeNumberseasonNumbersmartCollectionr   streamAnchorTags)	rU   r   r   r  r   r   r   r   r   r   )	_match_idr   _GRAPHQL_QUERYr  r   ro   r^   r   ra   rH   rB   r  r   r   r   rW   r   r0   )	r.   r8   r9   
video_datarF   r   noder   rr   s	            r/   _real_extractZDFIE._real_extract&  s   >>#&++H6F/((%x0N
+  	 &	'
 ))(33	 ngGe-fgD112F^H\]H!%.!99~9&x2BN1STX&<#778OP h
:!C5) LcTWSXY-?'&4;S;S:TU#0/K="Q"/+!O,gu=/seD+Wa9KWW[WmWmVno
( 

   d6I6I6K\Z
 (
 	
r2   rM   )r   r   r   r   
_VALID_URLIE_NAME_TESTSr8  r   r  r;  r   __classcell__r
  s   @r/   r   r      s7   QHJ
 G D9:AW;H#%!> ?
$ C9:AW;H#%!> ?
 #D)!& t9:AW;H#%!> ?
 #D)!& B1L6An,3 "#%!? @
	. A1L6An,3 "#%!? @
" #D)+0 x1L6An,3 "#%!? @
" #D)+2 f1
4
5
 3
 A	

 
   F
 

 o
 ,
 m
 T
 }
 c
 
 :
" !9 :#
4 z1D?As#%!8 9

	" X11+Ms: "#%!9 :
	, Z.-A F&-!# #%!? @
( ^10A F'. "#%!> ?
" #$@A', p R a P J
 k n C h emyFv0Nd#
J$
 $
r2   r   c                      ^  \ rS rSrSrSrSSSSS.S	S
.SSSSS.S	S
.\R                  5       /SSSSSSSSSSSS/S.SS0S.SSSSS.SS
.S S!S"S#S.S$S
.S%S&S'S#S.S(S).S*S+S,S-S.S.S
.S/S0S1S-S.S2S3S4./rS5r	\
U 4S6 j5       rS;S7 jrS8 rS9 rS:rU =r$ )<ZDFChannelIEiM  z2https?://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   rU   r      )r8   r   playlist_mincountz5https://www.zdf.de/sport/das-aktuelle-sportstudio-220zFhttps://www.zdf.de/dokus/sylt---deutschlands-edles-nordlicht-movie-100r   r   r   r   r   r   r   r   r   r   r   r   T)add_ier8   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/serien/taunuskrimi/ztaunuskrimi-100Taunuskrimiz$md5:ee7204e9c625c3b611d1274f9d0e3070   z0https://www.zdf.de/serien/taunuskrimi/?staffel=1ztaunuskrimi-100-s1zTaunuskrimi - Season 1r   )r8   r   playlist_countz-https://www.zdf.de/magazine/heute-journal-104r   r   z$md5:6edad39189abf8431795d3d6d7f986b3i  z:https://www.zdf.de/magazine/heute-journal-104?staffel=2024zheute-journal-104-s2024zheute journal - Season 2024   z>Video count changes daily, needs support for playlist_maxcount)r8   r   rI  skip   c                 Z   > [         R                  U5      (       a  S$ [        TU ]  U5      $ )NF)r   suitabler  )clsr8   r
  s     r/   rN  ZDFChannelIE.suitable  s&    s++uF1A#1FFr2   c                     U R                  USU SU S3S[        R                  " [        UUU R                  US.5      5      [        R                  " SSSS	.05      S
.S9S   S   $ )Nzseason z page z JSONseasonByCanonical)seasonIndexr"  episodesPageSizeepisodesAfterpersistedQueryr   @9412a0f4ac55dc37d46975d461ec64bfd14380d815df843a1492348f77b5c99aversion
sha256Hashr#  r$  
extensionsr   rV   smartCollectionByCanonical)r   r   r   r	   
_PAGE_SIZE)r.   playlist_idcanonical_id
season_idxr   page_numbercursors          r/   _fetch_pageZDFChannelIE._fetch_page  s    %%7=/}EJ!4!ZZ#-!-(,%+	5 )  #jj$#$&h'* S &   45 	5r2   c              #   ^  #    [        U5       GH  u  pVUb  XF:w  a  M  S n[        R                  " S5       H  nU R                  XXVX5      n	[	        U	S5      n
[	        U
SSSS 45       Hc  nU R
                  " US   [        40 [	        US[        14S	S
[        14S[        [        14S[        14SS[        14SS[        14S.5      D6v   Me     [	        U
SSS[        145      =(       d    0 nUR                  S5      (       a  UR                  S5      (       d    GM  US   nM     GM     g 7f)Nr   )seasonsr'  ..episodesr'  c                     [        US   5      $ )N
sharingUrlr   rN   s     r/   rQ   'ZDFChannelIE._entries.<locals>.<lambda>  s    ;q;Wr2   rk  r"  r/  rU   r-  r  r2  r3  r4  )r   rU   r   r   r   r   r   pageInfohasNextPage	endCursor)	enumerate	itertoolscountre  r   
url_resultr   rB   r  r   r   r   r^   )r.   r`  ra  season_numbersrequested_season_numberrb  r   rd  rc  pager'  r   	page_infos                r/   _entriesZDFChannelIE._entries  sH    )2>)B%J&27N7_F(q1''z+_ %T+DE+EW.W4  G //-u	&w#."6&.#%?,XZ]`c_d+e*9M?)K/<oP[}.].;^k]-[1 	 	  )ZdV0TU[Y[	 }}]339==;U;U";//  2 *Cs   D+D-c                    U R                  U5      nU R                  X5      nU R                  U R                  UR                  SSS9n[        [        U5      SS[        145      n[        X$=(       a    SU 35      nU R                  USS[        R                  " US	S
.5      [        R                  " SSSS.05      S.S9S   S   n[        US[        145      =(       d    0 n[        USSSS[        145      nU R                  U=(       a    U[        UR                  S5      5      =(       a    UR                  S5      5      (       d  U R!                  US   ["        US   5      $ Ub  XH;  a  [%        SU S35      eU R'                  U R)                  XRX5      U[        [        US[*        145      U=(       a    SU 3SS9[        US[*        145      5      $ )Nz
channel idr   )rE   staffelr   szsmart collection dataGetSmartCollectionByCanonicald   )r"  videoPageSizerV  r   @cb49420e133bd668ad895a8cea0e65cba6aa11ac1cacb02341ff5cf32a17cd02rX  r[  r]  rV   r^  r  rh  .numberrk  r"  zSeason z% was not found in the collection datarU   z - r   infoText)r7  _request_webpager   r=  r8   r   r   r   r   r   r   r   r   _yes_playlistr   r^   rs  r   r   playlist_resultrx  rB   )	r.   r8   ra  urlhr   r`  collection_datar9  rt  s	            r/   r;  ZDFChannelIE._real_extract  s   ~~c*$$S7))$//488\Y])^$Xc]Y[M4RS#L2Wa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[\\$)L 7=/9^!_``##MM+^S_w.>?;GM?";5J :u*=>@ 	@r2   rM   r   )r   r   r   r   r=  r>  r   ie_keyr?  r_  classmethodrN  re  rx  r;  r   r@  rA  s   @r/   rC  rC  M  sd   FJG C0/A

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

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

  8#"A

  B&-A

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

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

 P	IMF^ JG G5$0>'@ '@r2   rC  )rq  r   rC   r+   commonr   utilsr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   utils.traversalr   r   r   r   rC  rM   r2   r/   <module>r     sb      	  !    & 4af afHI
I I
Xp@9 p@r2   