Ë
    š„j¦‘  ã                   óÎ   — 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    úK/var/www/html/GAP/venv/lib/python3.12/site-packages/yt_dlp/extractor/zdf.pyÚ_get_api_tokenzZDFBaseIE._get_api_token"   së   € ð × Ò Ø×Ñ×$Ñ$ _ T§Z¡Z§_¡_°d×6NÑ6NÐ%[ÐXZÑ%[Ô\ä˜×)Ñ)¨I¼°}Ð+EÈqÔQÔTWÔX\×XaÑXaÓXcÓTdÒdØ×Ñ×$Ñ$ T×%8Ñ%8ØBÀDØ'Ð)Gó&Iô Jð ˆD�J‰J×ÑÐJ˜d×6Ñ6ÐJ¸×8IÑ8IÓJà×#Ñ# FÑ+Ð,¨A¨d×.?Ñ.?ÀÑ.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?   € Ø×"Ñ"Ø�˜\¨$¨Ð0Ð4GÈÀvÐ2NÜ ¨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   € Ù¤:¨l¼CÔ#@ØÜ�x‰xÐ9¸<ÓHˆÙGKŒs�4—:‘:˜gÓ&Ó'¬#¨d¯j©j¸Ó.BÓ*CÑCÐUÐQUÐ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¨?Ð;Ø#¤c UÐ+ñ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Ñ#<ØØ�M‰M˜,Ô'Ø—;‘;˜zÓ*Ò3¨eˆDØ× Ñ   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Ñ%5°lÐDVÓ%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 r£t        |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«      d1¬2«      |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   € ÔZeÐfgÐhmÑfnÓZo€ 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ÚadiöÿÿÿrV   Ú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Ü&3°H¸bÓ&AÑ#ˆH�mà"×&Ñ&Ð'7Ó8¸EÑAˆFØ—>‘> (¨H°kÀ9ÓMˆDð —‘˜Ó$ò hð ×%Ñ%Ð&@À(ÈLÐbfÐ%Ógð ñ ¡fØ%�
áÜ'¨¨|¸ZÈÔS`ÐgkÔSlÐRmÐ.nÓo�ØœL¨°
¸CÄ$ÀÐ/HÓIÑIˆLä& t¨n¸cÀ=ÐRUÔX\ÐW]Ð-^Ó_ó 0�Ü+¨F°[À#ÌÀvÐ4NÓOó /�GÜ#/°¸'À8ÑMoÐ9pÓ#qó .˜Ø%,¨U¡^˜
Ø%¨Ñ2Ø$Ø!Ÿ™ jÔ1Ü+¨JÓ7˜Ø &š=Ø#'×#=Ñ#=Ø *¨H°eÀUÐRWð $>ó $Y™Dà  OÑ3Ü%0°·±Ð=XÓ1YÓ%Z˜FÙDPÑU[¤E¨,¸Ñ*?Ô$@Ðae˜Eà % zð%ä".¨w¯{©{¸;Ó/GÓ"Hð%ð +1Ø).Ü,7¸¿¹ÀJÓ8OÓ,PÜ-:¸6À6Ç:Á:ÈfÓCUÓ-VÜ'2°4×3EÑ3EÀkÐS]Ð_dÐnrÐ3EÓ3sÓ'tò%ð $™Dð !×/Ñ/Ð2RÐSVÐRWÐWXÐ0YÐdlÐ/ÔmØ#%˜Dà")§+¡+¨gÓ"6˜Ø!%ò ˜AÜ%0×%;Ñ%;Ø!"§¡ zÓ!2Ò!S°g·k±kÀ*Ó6MÒ!SÐQS× ZÑ ZÓ \ó&^˜Fà,-¯E©E°(«O¸vÑ,E˜MØ#ŸN™Nð ,Ø"#ð,ä-:¸1¸[¹>È6ÒK[ÐV[Ó-\Ü/<Ø(5Ð$5Ò$A¸'Ø$*Ò$EÐ/EØ$%§E¡E¨-Ó$8Àô0Fñ 5;©bÀØ,2á-:¸q¿u¹uÀ]Ó?SÐWiÒ?iÙ4AÀgÐQUÂoñ %(à/5¸ªÀ7ÈfÒCT©Ø.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Ø¹4œdŸj™j¨Ó.×5Ñ5Ô7ÀTÜØ ×/Ñ/Ó1Ø,0Ù6:Ñ 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\Ð]^Ð_`Ñ]aÓQb€ 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—   € ô !-¨V´t·z±z°lÑDbÐ5cÓ d÷fñ ˆi˜ô �i“.ØØ(¨JÒ6™!¸Añ
ô œ2Ÿ9™9Ð%SÔUXÐYbÓUcÓ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   „ Ø�V€NØ.ÐØ€LòKó:ò
Vòð ñó ðòYóR
óhð ñ	fó ñ	fr0   r   c                   ód  ‡ — e Zd Zg d¢ZdZ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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]“d4d5“d6d^“d8d9“d:d;“d<d_“d>d`“d@da“dBdb“dDdc“dFdd“dHdeg“dœdfdgdhddidjdkdldmdndogdpœ	dœdqdri d+ds“d-d“d.dt“d0du“d2dv“d4dw“d6dx“d8dy“d:dz“d<d_“d>d`“d@d{“dBd|“dDd}“dFdd“dHd~g“dœdd€d�dd‚dƒd„d…dydzd†d‡dˆgdœdœd‰dŠdd‹edŒeed�dŽgd�œ	d�gd‘œd’dd“œd”dd“œd•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ˆ 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   z~https://www.zdf.de/video/dokus/ein-tag-im-juli---ahrtalflut-2021-movie-100/terra-x-history-ein-tag-im-juli-ahrtalflut-2021-100Ú 19dedfc5bca3f4f015deeb96c153ececú3terra-x-history-ein-tag-im-juli-ahrtalflut-2021-100rz   ú!Ein Tag im Juli - Ahrtalflut 2021ú$md5:7a426ce6f44d988eccbd4a485453e336ç     ¸´@údre:https://www\.zdf\.de/assets/terra-x-history-ein-tag-im-juli-ahrtal-flut-2021-102~original\?cb=\d+ú+ein-tag-im-juli---ahrtalflut-2021-movie-100é¤¨jÚ20260519úzdf 260519_2015_sendung_his©r—   r«   rP   Údescriptionrn   Ú	thumbnailÚseriesÚ	series_idÚ	timestampÚupload_dateÚ_old_archive_ids)r6   Úmd5Ú	info_dictz}https://www.zdf.de/play/dokus/ein-tag-im-juli---ahrtalflut-2021-movie-100/terra-x-history-ein-tag-im-juli-ahrtalflut-2021-100Úskip_downloadT)r6   rÝ   Úparamszphttps://www.zdf.de/dokumentation/dokumentation-sonstige/terra-x-history-ein-tag-im-juli-ahrtalflut-2021-100.htmlz´https://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-102u6   Gelb Â· Vom hellen Glanz zu finsteren AbgrÃ¼nden (6/6)z$md5:9aad4806b4c8ea152ab21e70c9d516beg     ø‹@zore:https://www\.zdf\.de/assets/image-ard-gelb--vom-hellen-glanz-zu-finsteren-abgruenden-66-100~original\?cb=\d+zDie Magie der FarbenzTcollection-index-page-ard-collection-ard-dxjuomfyzdpzag93ojy2mzhhmmq3mzk2ztq4nda-140z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Û   z³https://www.zdf.de/play/dokus/collection-index-page-ard-collection-ard-dxjuomfyzdpzag93ojy2mzhhmmq3mzk2ztq4nda-132/page-video-ard-gelb-vom-hellen-glanz-zu-finsteren-abgruenden-102z³https://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=2400x1350Ú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 50é2   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     Ð›@zcount:10zSeason 2025ié  zEpisode 365ém  iÐ¼EiÚ20251219zzdf 251219_2200_sendung_hjozUhttps://www.zdfheute.de/politik/deutschland/wildberger-ki-einsatz-rede-texte-100.htmlÚ 7e3f7bb4fcaf0ce2c7a56f6cfb33e054z$wildberger-ki-einsatz-rede-texte-100u2   Minister Wildberger nutzte KI fÃ¼r Texte und Redenz$md5:6093c58c5aa98a9a1549ff66c93f3209g      >@zLre:https://www\.zdfheute\.de/assets/karsten-wildberger-120~2400x1350\?cb=\d+iÔ-jÚ20260613zzdf 260611_mario_voigt_viu)	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:76bfa6581dd70ee2ef7b2679155e75dcg     Àd@zJre:https://www\.zdf\.de/assets/vivaan-alina-grijseels-100~original\?cb=\d+i  FiÚ20251220z%zdf 251219_kr_alina_grijseels_neu_logz;https://www.zdf.de/play/live-tv/sender/zdf-live-beitrag-100zzdf-live-beitrag-100zre:ZDF Livestreamz<re:https://www\.zdf\.de/assets/2400-zdf-100~original\?cb=\d+Úis_livezzdf zdf-live-beitrag-100)	r—   r«   rP   rÕ   rÖ   rÙ   rÚ   Úlive_statusrÛ   z2Ignoring subtitle tracks found in the HLS manifest)r6   rÝ   Úexpected_warningsz^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ÜˆMœ3¤¨Ó!4Ð 5ð+7ó 8ˆð ˆ
Ü(4°XÀÌtÏzÉzÈlÐ\_Ð?`Ó(aò 		Ñ$ˆM˜9Ü(¨°U¼[¸MÐ4JÓKˆMÙ ØØ×ÑØ$Ø#Ü$ Y§]¡]°7Ó%;Ó<Ü% i§m¡m°HÓ&=Ó>ñ	õ ð			ð ˜*ð
ä˜5Ø$ g´¨uÐ5Ø *¨N¼S¸EÐBàEÜ&Ð'¬ð.ð )¨*°t×7NÑ7NÐ6OÐPñ#ó ð
ð × Ñ  ¨;¸×8KÑ8KÓ8MÓNð
ð �+ñ
ð 	
r0   c                 óâ  — | j                  |«      }| j                  |dd| j                  d|idœ¬«      d   d   }|s| j                  |«      S d }d}g }t	        |d	d
d„ f«      D ]p  }| j                  d|d   «      }|j                  d«      x}	rt        |d|	i«      }d|v }|j                  |«       |rŒQ| j                  |j                  d«      «      }Œr 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œ¥S ) Nzvideo metadataÚVideoByCanonicalÚ	canonical)ÚoperationNamer³   Ú	variables)r¹   rQ   ÚvideoByCanonicalFÚcurrentMediaÚnodesc                 ó   — |d   S )NÚptmdTemplaterI   rJ   s     r.   rM   z%ZDFIE._real_extract.<locals>.<lambda>\  s   € ÐTUÐVdÑTe€ r0   zhttps://api.zdf.der  ÚvodMediaTyperj   ÚliveMediaTypeÚaspectRatiorP   ©ÚleadParagraph)ÚteaserrÕ   r  r%  ÚimageÚlistÚepisodeInfoÚepisodeNumberÚseasonNumberÚsmartCollectionr   ÚstreamAnchorTags)	rP   rÕ   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÷   r    Únoder£   rj   s
             r.   Ú_real_extractzZDFIE._real_extractN  sÞ  € Ø—>‘> #Ó&ˆØ×+Ñ+¨HÐ6FØ/Ø×(Ñ(Ø% xÐ0ñN
Ð+ó ð ñ	ð &ñ	'ˆ
ñ Ø×)Ñ)¨(Ó3Ð3àˆØˆØˆ	Ü  ¨n¸gÑGeÐ-fÓgò 	QˆDØ×1Ñ1Ð2FÈÈ^ÑH\Ó]ˆHà!%§¡¨.Ó!9Ð9ˆ~Ð9Ü& xÐ2BÀNÐ1SÓT�Ø%¨Ð-ˆGØ×Ñ˜XÔ&ÚØ#×7Ñ7¸¿¹ÀÓ8OÓP‘ð	Qð
Ü˜:Ø!¤C 5Ð)Ø LÌcÔTWÐSXÐYØ-´¨Ð?Ø'¨°&¸4×;SÑ;SÐ:TÐUØ#0°/ÄKÀ=Ð"QØ"/°Ä+ÀÐ!OØ,¨g¼°uÐ=Ø/°¼s¸eÐDØ+¨W°aÐ9KÈWÐW[×WmÑWmÐVnÐoñ
(ó 
ð
ð × Ñ  ¨H°d×6IÑ6IÓ6KÈ\ÓZð
ð Øò
ð 	
r0   )rÃ   rÄ   rÅ   Ú
_VALID_URLÚIE_NAMEr?   r)   Ú_TESTSr.  r±   r  r1  Ú__classcell__©r  s   @r.   rÉ   rÉ   Â   sÊ  ø„ ò€Jð €Gð PØ1àGØØ8ØAØð AØ9ØFØ#Ø%Ø!>Ð ?ñ
ñ	ð& OàGØØ8ØAØð AØ9ØFØ#Ø%Ø!>Ð ?ñ
ð # DÐ)ñ!ð& BàGØØ8ØAØð AØ9ØFØ#Ø%Ø!>Ð ?ñ
ð # DÐ)ñ!ð( FØ1àTØØMØAØð LØ,ØoØ#Ø!Ø"ØØ#Ø%Ø!aÐ bñ
ñð0 EàTØØMØAØð LØ,ØoØ#Ø!Ø"ØØ#Ø%Ø!aÐ bñ
ð" # DÐ)ñ)ð. EàTØØMØAØð LØ,Ø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 gØ1à8ØØIØAØØhØ#Ø%Ø!=Ð >ñ

ñ	ð" PØ1ð
ØÐ9ð
à�5ð
ð Ð;ð
ð ÐAð	
ð
 ˜ð
ð Ðwð
ð ˜	ð
ð �gð
ð ˜ð
ð �mð
ð ˜Tð
ð �}ð
ð ˜cð
ð ˜ð
ð ˜:ð
ð  Ð!>Ð ?ð!
ñ	ð0 [Ø1àDØØAØAØØfØØ#Ø#Ø%Ø!HÐ Iñ
ñ	ð& Mà(ØØ)ØØXØØØ$Ø!;Ð <ñ

ð SÐSñð" pØñð RØñð aØñð PØñð JØñð
 kØñð nØñð CØñð hØñð eØñðw^€Fð@	0€Nôdò#
ö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-220zDhttps://www.zdf.de/dokus/ein-tag-im-juli---ahrtalflut-2021-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Ý   r:  Ú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Ü!ŸZ™Z¬Ø#-Ø!-Ø(,¯©Ø%+ñ	5ó )ó ô #Ÿj™jØ$Ø#$Ø&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   rZ  r  r%  rP   r#  r  r(  r)  r*  )r—   rP   rÕ   rÙ   rå   rã   r�   ÚpageInfoÚhasNextPageÚ	endCursor)Ú	enumerateÚ	itertoolsÚcountrU  r   Ú
url_resultrÉ   r?   r  r   r   rš   rX   )r-   rP  rQ  Úseason_numbersÚrequested_season_numberrR  rã   rT  rS  Úpager  rä   Ú	page_infos                r.   Ú_entrieszZDFChannelIE._entriesÔ  s_  è ø€ Ü)2°>Ó)Bó 	0Ñ%ˆJ˜Ø&Ð2Ð7NÐR_Ò7_ØàˆFÜ(Ÿ™¨qÓ1ò 0�Ø×'Ñ'Ø ¨z¸=È+ÐW]ó_�ô % TÐ+DÓE�ä+¨EØ˜ WÑ.Wð4ó  ò �Gð *˜$Ÿ/™/Ø Ñ-¬uñ	ä& wØ#.´°Ð"6Ø&.°¼#¸Ð%?Ø,XÔZ]Ô`cÐ_dÐ+eØ*9¼M¸?Ð)KØ/<¸oÔP[È}Ð.]Ø.;¸^ÌkÈ]Ð-[ñ1ó ñ	ó 	ðô )¨°°ZÀÌdÈVÐ0TÓUÒ[ÐY[�	Ø —}‘} ]Ô3¸9¿=¹=ÈÔ;UÙØ" ;Ñ/‘ò/0ñ	0ùs   ‚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ÚGetSmartCollectionByCanonicaléd   )r  ÚvideoPageSizerF  r   Ú@cb49420e133bd668ad895a8cea0e65cba6aa11ac1cacb02341ff5cf32a17cd02rH  rK  rM  rQ   rN  r  rW  .ÚnumberrZ  r  zSeason z% was not found in the collection datarP   z - rŒ   ÚinfoText)r-  Ú_request_webpager™   r2  r6   r   r   r   r   rº   r´   rµ   rš   Ú_yes_playlistr   rX   ra  rÉ   r   Úplaylist_resultrf  r?   )	r-   r6   rQ  Úurlhrã   rP  Úcollection_datar/  rb  s	            r.   r1  zZDFChannelIE._real_extractó  s÷  € Ø—~‘~ cÓ*ˆà×$Ñ$ S¨,Ó7ˆØ×)Ñ)¨$¯/©/¸4¿8¹8À\ÐY]Ð)Ó^ˆÜ$¤X¨c£]°YÀÄ[ÀMÐ4RÓSˆÜ# L°-Ò2WÀaÈÀÐDWÓXˆà×0Ñ0ØÐ0Ø!@Ü!ŸZ™ZØ!-Ø%(ñ)ó ô #Ÿj™jØ$Ø#$Ø&hñ'ð*ó ñ9ð 1ó ð ñð 4ñ5ˆô " /°G¼d¸VÐ3DÓEÒKÈˆ
Ü% o¸	À9ÈcÐS[Ô^iÐ]jÐ7kÓlˆà×!Ñ!ØÒ*˜{Ü˜
Ÿ™ |Ó4Ó5ÒU¸*¿.¹.ÈÓ:Uô
ð —?‘? :¨lÑ#;¼UÀJÈ{ÑD[Ó\Ð\àÐ$¨¸nÑ)LÜ  7¨=¨/Ð9^Ð!_Ó`Ð`à×#Ñ#Ø�M‰M˜+ |°^À]ÓSØœÜ˜_¨w¼¸Ð.>Ó?ØÒ; G¨M¨?Ð";À5ôJô ˜¨:¼°uÐ*=Ó>ó@ð 	@r0   rÂ   )rÃ   rÄ   rÅ   r2  r3  rÉ   Úie_keyr4  rO  Úclassmethodr?  rU  rf  r1  r5  r6  s   @r.   r8  r8  x  s%  ø„ ØF€JØ€Gð Cà0Ø/ØAñ
ð
  ñ	ð Gà0Ø/ØAñ
ð
  ñ	ð —<‘<“>Ð"ØUàGØØ8ØAØð AØ9ØFØ#Ø%Ø!>Ð ?ñ
ð # DÐ)ñ#ð& Kà1Ø3ØAñ
ð
 ñð ?à%Ø$ØAñ
ð
 !ñ	ð Là+Ø2ØAñ
ð
 Ø ñ
ðk?€FðB €JàóGó ðGó5ò$0ö>'@r0   r8  )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É   r8  rI   r0   r.   ú<module>rz     sb   ðÛ Û Û 	Û å !÷÷ ÷ ÷ õ ÷& 4ôbf�ô bfôJs
ˆIô s
ôlb@�9õ b@r0   