o
    iC                     @   s   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	 ddl
mZmZ G dd deZG d	d
 d
eZG dd deZG dd deZdS )    N   )InfoExtractor   )determine_extdict_getint_or_nonetry_getunified_timestamp)requiretraverse_objc                   @   s&   e Zd ZdgZdd Zedd ZdS )	SVTBaseIESEc                 C   s<  t |ddd}|rdnd}g }i }|d D ]i}|dp |d}|d	 }	t|	}
|
dkrG| j|	|d
||dd\}}|| | j||d q|
dkrZ|| j|	d ||dd q|
dkrv| j|	||dd\}}|| | j||d q|||	d qt	|dd t
pi }|s|dr| jd| jdd t |d}t|tr|D ]&}|d	}|dd}|rd	|i}t|dkrd|d< ||g | q|d}|d}t|d }|d!}t|d"}t|d#}tt |d$}d }t |d%dd&}|d ur|r
d'nd(}|||| |||||||||d)S )*N)live	simulcastF)defaultm3u8m3u8_nativevideoReferences
playerTypeformaturlmp4)extentry_protocolm3u8_idfatal)targetf4mz?hdcore=3.3.0)f4m_idr   mpd)mpd_idr   )	format_idr   c                 S   s   | d S )Nrights )xr#   r#   H/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/svt.py<lambda>3   s    z*SVTBaseIE._extract_video.<locals>.<lambda>geoBlockedSwedenz&This video is only available in SwedenT)	countriesmetadata_available)	subtitlessubtitleReferenceslanguagesvvttr   titleprogramTitleseasonepisodeTitleepisodeNumber	validFrom)materialLengthcontentDuration)inappropriateForChildrenblockedForChildren)skip_false_values   r   )idr/   formatsr*   duration	timestamp	age_limitseriesseason_numberepisodeepisode_numberis_live)r   getr   #_extract_m3u8_formats_and_subtitlesextend_merge_subtitles_extract_f4m_formats"_extract_mpd_formats_and_subtitlesappendr   dictraise_geo_restricted_GEO_COUNTRIES
isinstancelist
setdefaultr   r	   _fixup_subtitles)self
video_infovideo_idrD   m3u8_protocolr<   r*   vrplayer_typevurlr   fmtssubsr"   subtitle_referencessrsubtitle_urlsubtitle_langsubr/   r@   rA   rB   rC   r>   r=   r?   adultr#   r#   r%   _extract_video   s   












zSVTBaseIE._extract_videoc                 C   sP   i }|   D ]\}}|D ]}d|d v r| dn|}||g | qq|S )Nz	text-openr   z-forced)itemsrQ   rK   )r*   fixed_subtitleslangr[   r`   
fixed_langr#   r#   r%   rR   f   s   zSVTBaseIE._fixup_subtitlesN)__name__
__module____qualname__rN   rb   staticmethodrR   r#   r#   r#   r%   r      s
    Qr   c                   @   s,  e Zd ZdZdZdZdddddd	d
ddddddddddddiddddddddddddddigid	ddid d!d"dd#dd$d%d&d'd(ddd$d)ddid*ddid+gd,d-d.dd/d0d1d2d3ddd/d4d5dd6id7d8d9d:d;d9d:d<d9d:d=d9d:d>d9d:d?d9d:d@d9d:dAd9d:dBd9d:gZdCdD ZdEdF ZdGS )H	SVTPlayIEzsvt:playu   SVT Play and Öppet arkiva  (?x)
                    (?:
                        (?:
                            svt:|
                            https?://(?:www\.)?svt\.se/barnkanalen/barnplay/[^/]+/
                        )
                        (?P<svt_id>[^/?#&]+)|
                        https?://(?:www\.)?(?:svtplay|oppetarkiv)\.se/(?:video|klipp|kanaler)/(?P<id>[^/?#&]+)
                        (?:.*?(?:modalId|id)=(?P<modal_id>[\da-zA-Z-]+))?
                    )
                    zChttps://www.svtplay.se/video/eXYgwZb/sverige-och-kriget/1-utbrottet 2382036fd6f8c994856c323fe51c426eePBvGRqr   z1. Utbrottetz$md5:02291cc3159dbc9aa95d564e77a8a92bzSverige och krigetih20250511i  z6re:^https?://(?:.*[\.-]jpg|www.svtstatic.se/image/.*)$r   zcount:3)r-   z	sv-forced)r;   r   r/   descriptionr@   rB   r>   upload_dater=   	thumbnailr?   r*   skip_downloadr   )r   md5	info_dictparamsz%https://www.svtplay.se/video/304790648zVbDPAu   Designdrömmar i StenungsundiN`20210315i  r-   r   r.   )	r;   r   r/   r>   rp   r=   rq   r?   r*   zEpisode is no longer available)r   rs   rt   ru   skipz$https://www.svtplay.se/video/emBxBQjeyBd9ajz1. Farlig kryssningi%Xz$md5:8f350bc605677a5ead36a19a62fd9a3420170401i
  Rederiet)r;   r   r/   r>   ro   rp   r=   rq   r?   rB   r@   r*   zFailed to download (?:MPD|m3u8))r   rs   rt   ru   expected_warningszOhttps://www.svtplay.se/video/jz2rYz7/anders-hansen-moter/james-fallon?info=visajvXAGVbzJames FallonuL   re:James Fallon är hjärnforskaren .{532} att upptäcka psykopati tidigt\?$i g20250331i9  u   Anders Hansen möter)r;   r   r/   ro   r>   rp   r=   rq   r?   rB   r@   dashr   rt   ru   zphttps://www.svtplay.se/video/30479064/husdrommar/husdrommar-sasong-8-designdrommar-i-stenungsund?modalId=8zVbDPATr   only_matchingzOhttps://www.svtplay.se/video/30684086/rapport/rapport-24-apr-18-00-7?id=e72gVpaz3http://www.oppetarkiv.se/video/5219710/trollflojtenz:http://www.svtplay.se/klipp/9023742/stopptid-om-bjorn-borgz#https://www.svtplay.se/kanaler/svt1zsvt:1376446-003Azsvt:14278044z4https://www.svt.se/barnkanalen/barnplay/kar/eWv5MLX/zsvt:eWv5MLXc                 C   sD   | j d| ||  d}| ||}|ds t|dd|d< |S )Nz)https://api.svt.se/videoplayer-api/video/)headersr/   rB   r@   )_download_jsongeo_verification_headersrb   rE   r   )rS   rU   datart   r#   r#   r%   _extract_by_video_id   s   
zSVTPlayIE._extract_by_video_idc           	      C   s.  |  |}|d}|dp|d}|r| |S | ||}t| ||ddddtjhdtht	t
d	hf	}t|d
dd dt	f}t|ddddd dfdtht	f}|sdt|ddtht
dhf}| |}|dsztdd| ||d< |ds| ||d< |dst|dthf|d< |S )Nr;   svt_idmodal_idprops	urqlState.r   detailsPageByPathz
video datamodulesc                 S   s   |d d d d S )Ndetails
smartStartitemvideosr#   _vr#   r#   r%   r&     s    z)SVTPlayIE._real_extract.<locals>.<lambda>r   r   r   r   c                 S   s   |d dkS )NaccessibilityDefaultr#   r   r#   r#   r%   r&     s    r   svtIdvideozSVT IDr/   z\s*\|\s*.+?$ rq   ro   )_match_valid_urlgroupr   _download_webpager   _search_nextjs_datajsonloadsrL   anyr
   strrE   rer`   _og_search_title_og_search_thumbnail)	rS   r   mobjrU   r   webpager   r   rt   r#   r#   r%   _real_extract   s8   







zSVTPlayIE._real_extractN)	rg   rh   ri   IE_NAMEIE_DESC
_VALID_URL_TESTSr   r   r#   r#   r#   r%   rk   q   s    qrk   c                       sX   e Zd ZdZdZddddddd	d
dddddd	gZe fddZdd Z  Z	S )SVTSeriesIEzsvt:play:serieszThttps?://(?:www\.)?svtplay\.se/(?P<id>[^/?&#]+)(?:.+?\btab=(?P<season_slug>[^&#]+))?zhttps://www.svtplay.se/rederietjpmQYgnr{   z$md5:f71122f7cf2e52b643e75915e04cb83d)r;   r/   ro   i>  )r   rt   playlist_mincountz4https://www.svtplay.se/rederiet?tab=season-2-jpmQYgnzseason-2-jpmQYgnu   Rederiet - Säsong 2   c                       t |rdS t |S NFrk   suitablesuperclsr   	__class__r#   r%   r   2     zSVTSeriesIE.suitablec              	   C   s.  |  | \}}| jd|ddd| idd d d }d }g }|d	 D ]I}t|ts,q$|r;|d
|kr6q$|d}|d}t|tsFq$|D ]$}	|	dpPi }
|
d}|r]t|ts^qH|| 	d| t
 | qHq$|d}|pv|}|r|r| d| }n|r|}| ||p|d
|t|dS )Nz#https://api.svt.se/contento/graphqlzDownloading series pagequerya'  {
  listablesBySlug(slugs: ["%s"]) {
    associatedContent(include: [productionPeriod, season]) {
      items {
        item {
          ... on Episode {
            videoSvtId
          }
        }
      }
      id
      name
    }
    id
    longDescription
    name
    shortDescription
  }
})r   r   listablesBySlugr   associatedContentr;   namerc   r   
videoSvtIdzsvt:z - )longDescriptionshortDescription)r   groupsr   rO   rL   rE   rP   r   rK   
url_resultrk   ie_keyplaylist_resultr   )rS   r   series_slug	season_idr@   season_nameentriesr1   rc   r   r   
content_idr/   r#   r#   r%   r   6  s\   





zSVTSeriesIE._real_extract
rg   rh   ri   r   r   r   classmethodr   r   __classcell__r#   r#   r   r%   r     s*    	r   c                       s   e Zd ZdZdZddddddd	d
ddddddddd	ddiddddddddddd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$d.d/dd0d1dd0gZe fd2d3Zd4d5 Z  Z	S )6	SVTPageIEzsvt:pagez8https?://(?:www\.)?svt\.se/(?:[^/?#]+/)*(?P<id>[^/?&#]+)zzhttps://www.svt.se/nyheter/lokalt/skane/viktor-18-forlorade-armar-och-ben-i-sepsis-vill-ateruppta-karaten-och-bli-svetsareuZ   Viktor, 18, förlorade armar och ben i sepsis – vill återuppta karaten och bli svetsarezRviktor-18-forlorade-armar-och-ben-i-sepsis-vill-ateruppta-karaten-och-bli-svetsare)r/   r;   r   )r   rt   playlist_countzkhttps://www.svt.se/nyheter/lokalt/skane/forsvarsmakten-om-trafikkaoset-pa-e22-kunde-inte-varit-dar-snabbarejXvk42EuG   Försvarsmakten om trafikkaoset på E22: Kunde inte varit där snabbarer   P   r   iYeu   Lokala Nyheter Skåne20240104)	r;   r/   r   r=   r?   r>   rB   r@   rp   rr   Tr   zBhttps://www.svt.se/nyheter/svtforum/2023-tungt-ar-for-svensk-mediau    2023 tungt år för svensk mediaewqAZv4i  r   ike20231219Mediestudier)	r/   r;   r   r=   r?   r@   r>   rp   rB   zMhttps://www.svt.se/sport/ishockey/bakom-masken-lehners-kamp-mot-mental-ohalsa25298267u0   Bakom masken – Lehners kamp mot mental ohälsa)r;   r/      zVideo is gone)r   rt   r   rx   zXhttps://www.svt.se/nyheter/utrikes/svenska-andrea-ar-en-mil-fran-branderna-i-kalifornien24243746z2Svenska Andrea redo att fly sitt hem i KalifornienzDhttp://www.svt.se/sport/ishockey/jagr-tacklar-giroux-under-intervjun8439V2Ku1   Stjärnorna skojar till det - under SVT-intervjun   )r;   r   r/   r=   r?   )r   rt   rx   zIhttps://www.svt.se/nyheter/lokalt/vast/svt-testar-tar-nagon-upp-skrapet-1r   z/https://www.svt.se/vader/manadskronikor/maj2018c                    r   r   r   r   r   r#   r%   r     r   zSVTPageIE.suitablec                    sp    |}||}|d|d|}t|ddthtjhfddp'i   fdd}| |S )	NzurqlState\s*[=:]z	json data.r   F)get_allc                  3   sJ    t t ddthfD ]} d|  | | }|d< |V  qd S )Npage))topMediar   )body.r   r   zhttps://api.svt.se/video/r/   )setr   r   rb   r   )rU   infor   rS   r/   r#   r%   r     s   z(SVTPageIE._real_extract.<locals>.entries)		_match_idr   r   _search_jsonr   r   r   r   r   )rS   r   
display_idr   
urql_stater   r#   r   r%   r     s   

 	zSVTPageIE._real_extractr   r#   r#   r   r%   r   s  s    	
Jr   )r   r   commonr   utilsr   r   r   r   r	   utils.traversalr
   r   r   rk   r   r   r#   r#   r#   r%   <module>   s    _ -V