
    Ş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dS )    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    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dS )	ZDFBaseIEDE)zdfz	api-tokenc                    | j         s/| j                              | j        j        | j        di i           t          | j         dt          hfd          t          t          j                              k     rN| j                             | 	                    dd dd                      | j        j
        g | j        | j         R   | 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    YC:\Users\betacode\Desktop\descargarYoutube\venv\Lib\site-packages\yt_dlp/extractor/zdf.py_get_api_tokenzZDFBaseIE._get_api_token"   s       	]$$_TZ_d6N%[XZ%[%[\\\)I}+EqQQQTWX\XaXcXcTdTddd$$T%8%8BD')G&I &I J J J DJJd6J8IJJJJ#F+JJd.?.HJJJ    Nc           
      `    |                      ||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   sJ    ""0$002N2N2NY 788 # : : 	:r0   c                     |rt          |t                    sd S t          j        d|          }|rEt	          |                    d                    t	          |                    d                    z  n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   sp     	:lC#@#@ 	4x9<HHGKUs4::g&&''#djj.B.B*C*CCCQUUr0   c                 R    t          |d dt          hfdt          hfdf          p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<   sK    D#A#A)M?;#cU+D
 D
 #    	r0   c                 0   t                      }i }| D ]}t          |                    d                    }|r||v r+|                    |           |                    d          pd}|                    |g                               d|i           |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    EE		 	 	G&w{{5'9'9::L <9#<#<MM,''';;z**3eD  r**11|3     r0   c                 J    t          ||                    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%WXXXr0   c                    d }d }g g }}t                      }	t          |          D ]}
t          |
i           \  }
}|                    d          dk    }|                     |
|d|          }|                    d          p|                     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 ]o}|d         }||	v r|		                    |           t          |          }|dk    r|                     ||ddd          }n|dv rt          |                    d                    }|r|rt          ||z            nd }d|it          |                    d                    ||t          |                    d                    t          d |                    d!                    t          |                     d"|d#d                     d$g}n|                     d%| d&|'           g }|                    d(          }|D ]}t#          j        |                    d)          p|                    d)          pd*                                          }|                    d+          d,k    }|                    i |t          |d-         |od.          t          | o||od/|                    d0          d12          |rd3nd4||r|                    d0          d5k    s|s|d6k    rd7n|d8k    r|d9k    rd:n|d8k    rd;n	|d9k    rd<nd4d=           q|p||||                     |          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    ZefghmfnZoZo 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EE	 ++ E	 E	H&3Hb&A&A#Hm"&&'788EAF>>(Hk9MMD $$ h %%&@(Lbf%gg   &f &%
 p'|ZS`gkSlSlSlRm.nooL
C$/HIIIL&tnc=RUX\W]-^__ 0 0+F[#v4NOO / /G#/'8MoMo9p#q#q . .%,U^
%22$!j111+J77&==#'#=#= *HeURW $> $Y $YDD O33%0=X1Y1Y%Z%ZFDP$eU[$eE,*?$@$@$@aeE %z%".w{{;/G/G"H"H% +1).,7J8O8O,P,P-:66::fCUCU-V-V'243E3EkS]_dnr3E3s3s't't% % % $DD !//0YSV0Y0Y0Ydl/mmm#%D")++g"6"6!%  A%0%;!"z!2!2!Sgkk*6M6M!SQS Z Z \ \&^ &^F,-EE(OOv,EM#NN ,"#,-:1[>6K[V[-\-\/<(5$5$A'$*$E/E$%EE-$8$80F 0F 0F 5;.Bbb,2-: %,quu]?S?SWi?i?i4A @jFMQUoo %(C/57fCTCT.4oo.5.?.?)+, , ,    	5./0f ( 00>>	
 
 	
r0   c                     |s|s
J d            |                      d|d| d| ||r&t          j        |                                          nd t	          |                                 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&&(Ii(I(I4Idj..55777T //11,06: D 2 2! !  	 #   	r0   c                 R    d t          | t          j        hd f          D             S )Nc                     g | ]c\  }}t          |          ||d k    rdnddt          t          j        dt          |                    dt          hfdt          hfd          dS )originalr   r   )r   r6   r   z+(?P<width>\d+|auto)[Xx](?P<height>\d+|auto)r<   r=   )r<   r=   )r?   r   r@   searchr   ).0r   r6   s      r.   
<listcomp>z1ZDFBaseIE._extract_thumbnails.<locals>.<listcomp>   s     f f f i i..(J66!!A
 
 29%SUXYbUcUcdd!K=1#k]3g g  	
 f f fr0   c                 ,    t          |d                   S )Nr   rx   rJ   s     r.   rM   z/ZDFBaseIE._extract_thumbnails.<locals>.<lambda>   s    Q\]^_`]aQbQb r0   )r   r   items)sources    r.   _extract_thumbnailszZDFBaseIE._extract_thumbnails   sB    f f !-VtzlDbDb5c d df f f 	fr0   N)NN)__name__
__module____qualname___GEO_COUNTRIESr(   r$   r/   r:   rE   rR   staticmethodrb   rh   r   r   r   rI   r0   r.   r   r      s        VN.LK K K: : : :
V V V     \Y Y YR
 R
 R
 R
h    	f 	f \	f 	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                      t                      j        |i |}|                    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  sM    )EGG)4:6::	"t,,)8~)N)N(O	$%r0   c                    |                      d| |dd          }|d         }t          |dt          ht          t	          d          hf          }g }t          |dt
          j        hd	f          D ]z\  }}t          |d
t          hf          }|s |                    ||t          |	                    d                    t          |	                    d                    d           {d|it          |ddt          hfddt          hfdt          ht          fdd| j        hfd          |                     |||                                           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  s   ##P;PP=: $ < < $JM3!4!4 5+7 8 8 
(4Xtzl\_?`(a(a 		 		$M9(U[M4JKKM  $#$Y]]7%;%;<<%immH&=&=>>	      *
5$gu5 *NSEBE&'. )*t7N6OP# #  
   ;8K8K8M8MNN
 +
 
 	
r0   c                 :   |                      |          }|                     |dd| j        d|id          d         d         }|s|                     |          S d }g }t	          |dd	d
 f          D ]}|                     d|d                   }|                    d          x}rt          |d|i          }|                    |           |s(| 	                    |                    d                    }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	          |                     |||                                 |          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
 N
+   	 &	'
  	4))(333	 ngGeGe-fgg 	Q 	QD112F^H\]]H!%.!9!99~ U&x2BN1STTX&&& Q#778O8OPP
:!C5) LcTWSXY-?'&4;S:TU#0/K="Q"/+!O,gu=/seD+Wa9KWW[WmVno
( 
( 
 

   Hd6I6I6K6K\ZZ
 (
 
 	
r0   )r   r   r   
_VALID_URLIE_NAME_TESTSr,  r   r  r/  __classcell__r  s   @r.   r   r      sp         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                                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
d0d-Zd. Zd/ Z xZS )1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   r8  playlist_maxcount   c                 ~    t                               |          rdn t                                          |          S )NF)r   suitabler   )clsr6   r  s     r.   r=  zZDFChannelIE.suitable  s0    s++Fuu1A1A#1F1FFr0   Nc                     |                      |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    %%J=JJJJJ!4!Z#-!-(,%+	5 5 ) )   #j$#$&h' '*  S S &    45 	5r0   c              #   t  K   t          |          D ]$\  }}|||k    rd }t          j        d          D ]}|                     ||||||          }	t	          |	d          }
t	          |
dddd f          D ]l} | 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          V  mt	          |
dddt          hf          pi }|                    d          r|                    d          s n	|d         }&d S )Nr   )seasonsr  ..episodesr  c                 ,    t          |d                   S )N
sharingUrlrx   rJ   s     r.   rM   z'ZDFChannelIE._entries.<locals>.<lambda>  s    ;q;W;W r0   rX  r  r#  rP   r!  r  r&  r'  r(  )r   rP   r   r   r   r   r   pageInfohasNextPage	endCursor)	enumerate	itertoolscountrS  r   
url_resultr   r?   r  r   r   r   rX   )r-   rN  rO  season_numbersrequested_season_numberrP  r   rR  rQ  pager  r   	page_infos                r.   _entrieszZDFChannelIE._entries  s     )2>)B)B 	0 	0%J&27NR_7_7_F(q11 0 0''z=+W]_ _ %T+DEE+EW.W.W4      G *$/-u	 	&w#."6&.#%?,XZ]`c_d+e*9M?)K/<oP[}.].;^k]-[1 1  	 	 	 	 	 	 )ZdV0TUU[Y[	 }}]33 9==;U;U E";/9	0 	0r0   c                     |                      |          }|                     ||          }|                     | j        |j        dd          }t          t          |          ddt          hf          }t          ||od|           }| 	                    |ddt          j        |d	d
          t          j        ddddi          d          d         d         }t          |dt          hf          pi }t          |ddddt          hf          }|                     |o|t          |                    d                    o|                    d                    s(|                     |d         t"          |d                   S |||vrt%          d| d          |                     |                     ||||          |t          t          |dt*          hf          |od| d          t          |dt*          hf                    S )Nz
channel idr   )rB   staffelr   szsmart collection dataGetSmartCollectionByCanonicald   )r  videoPageSizerD  r   @cb49420e133bd668ad895a8cea0e65cba6aa11ac1cacb02341ff5cf32a17cd02rF  rI  rK  rQ   rL  r  rU  .numberrX  r  zSeason z% was not found in the collection datarP   z - r   infoText)r+  _request_webpager   r0  r6   r   r   r   r   r   r   r   r   _yes_playlistr   rX   r_  r   r   playlist_resultrd  r?   )	r-   r6   rO  urlhr   rN  collection_datar-  r`  s	            r.   r/  zZDFChannelIE._real_extract  sb   ~~c**$$S,77))$/48\Y])^^$Xc]]Y[M4RSS#L-2WDWDWDWXX000!@!Z!-%() )   #j$#$&h' '*  9 9 1    45 "/GdV3DEEK
%o	9cS[^i]j7kll!!*{
|4455U*..:U:U
 
 	] ??:l#;UJ{D[\\\$n)L)L !_=!_!_!_```##MM+|^]SS_w.>??;";M";";5J J J :u*=>>@ @ 	@r0   r   )r   r   r   r0  r1  r   ie_keyr2  rM  classmethodr=  rS  rd  r/  r3  r4  s   @r.   r6  r6  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 G G [G5 5 5 5$0 0 0>'@ '@ '@ '@ '@ '@ '@r0   r6  )r]  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   r6  rI   r0   r.   <module>rx     s        				  ! ! ! ! ! !                                     & 4 3 3 3 3 3 3 3bf bf bf bf bf bf bf bfJ`
 `
 `
 `
 `
I `
 `
 `
Fb@ b@ b@ b@ b@9 b@ b@ b@ b@ b@r0   