U
    gmE                     @   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	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G dd deZG dd deZdS )    N   )InfoExtractor   )determine_extdict_getint_or_nonetraverse_objtry_getunified_timestampc                   @   s   e Zd ZdgZdd ZdS )	SVTBaseIEZSEc                 C   sD  t |ddd}|rdnd}g }i }|d D ]}|dp@|d}|d	 }	t|	}
|
dkr| j|	|d
||dd\}}|| | j||d q*|
dkr|| j|	d ||dd q*|
dkr| j|	||dd\}}|| | j||d q*|||	d q*t	|dd t
pi }|s8|dr8| jd| jdd t |d}t|tr|D ]R}|d	}|dd}|rRd	|i}t|dkrd|d< ||g | qR|d}|d}t|d }|d!}t|d"}t|d#}tt |d$}d }t |d%dd&}|d k	r&|r"d'nd(}||||||||||||d)S )*N)ZliveZ	simulcastF)defaultm3u8Zm3u8_nativeZvideoReferencesZ
playerTypeformaturlmp4)extZentry_protocolZm3u8_idfatal)targetZf4mz?hdcore=3.3.0)Zf4m_idr   Zmpd)Zmpd_idr   )Z	format_idr   c                 S   s   | d S )Nrights xr   r   8/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/svt.py<lambda>0       z*SVTBaseIE._extract_video.<locals>.<lambda>ZgeoBlockedSwedenz&This video is only available in SwedenT)Z	countriesZmetadata_available)	subtitlesZsubtitleReferenceslanguagesvvttr   titleZprogramTitleseasonZepisodeTitleZepisodeNumberZ	validFrom)ZmaterialLengthZcontentDuration)ZinappropriateForChildrenZblockedForChildren)Zskip_false_values   r   )idr   formatsr   duration	timestamp	age_limitseriesseason_numberepisodeepisode_numberis_live)r   getr   Z#_extract_m3u8_formats_and_subtitlesextendZ_merge_subtitlesZ_extract_f4m_formatsZ"_extract_mpd_formats_and_subtitlesappendr	   dictZraise_geo_restricted_GEO_COUNTRIES
isinstancelist
setdefaultr   r
   )self
video_infovideo_idr+   Zm3u8_protocolr#   r   ZvrZplayer_typeZvurlr   Zfmtssubsr   Zsubtitle_referencessrZsubtitle_urlZsubtitle_langsubr   r'   r(   r)   r*   r%   r$   r&   Zadultr   r   r   _extract_video   s       

  
   


 

 


 
zSVTBaseIE._extract_videoN)__name__
__module____qualname__r0   r:   r   r   r   r   r      s   r   c                   @   s>   e Zd ZdZde dgZdddddd	d
ddZdd ZdS )SVTIEz^https?://(?:www\.)?svt\.se/wd\?(?:.*?&)?widgetId=(?P<widget_id>\d+)&.*?\barticleId=(?P<id>\d+)z(?:<iframe src|href)="(?P<url>z[^"]*)"zshttp://www.svt.se/wd?widgetId=23991&sectionId=541&articleId=2900353&type=embed&contextSectionId=123&autostart=falseZ 33e9a5d8f646523ce0868ecfb0eed77dZ2900353r   1   Stjärnorna skojar till det - under SVT-intervjun   r   r"   r   r   r$   r&   )r   md5	info_dictc                 C   s\   |  |}|d}|d}| d| d| d|}| |d |}|d d |d< |S )	N	widget_idr"   zhttp://www.svt.se/wd?widgetId=z&articleId=z#&format=json&type=embed&output=jsonvideocontextr   )_match_valid_urlgroup_download_jsonr:   )r4   r   mobjrD   Z
article_idinforC   r   r   r   _real_extracts   s    


zSVTIE._real_extractN)r;   r<   r=   
_VALID_URLZ_EMBED_REGEXZ_TESTrL   r   r   r   r   r>   d   s   r>   c                   @   s   e Zd ZdZdS )SVTPlayBaseIEzBroot\s*\[\s*(["\'])_*svtplay\1\s*\]\s*=\s*(?P<json>{.+?})\s*;\s*\nN)r;   r<   r=   _SVTPLAY_REr   r   r   r   rN      s   rN   c                   @   s   e Zd ZdZdZ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idddi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/d*d+d0d*d+d1d*d+d2d*d+d3d*d+gZd9d5d6Zd7d8 Zd4S ):	SVTPlayIEu   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-]+))?
                    )
                    z%https://www.svtplay.se/video/30479064Z 2382036fd6f8c994856c323fe51c426eZ8zVbDPAr   u   Designdrömmar i StenungsundiN`Z20210315i  z6re:^https?://(?:.*[\.-]jpg|www.svtstatic.se/image/.*)$r   r   r   r   )	r"   r   r   r%   upload_dater$   	thumbnailr&   r   skip_downloadr   zEpisode is no longer available)r   rB   rC   paramsskipz$https://www.svtplay.se/video/emBxBQjZeyBd9ajz1. Farlig kryssningi%XZ20170401i
  Rederietzcount:3)r"   r   r   r%   rQ   r$   rR   r&   r)   r'   r   )r   rB   rC   rT   zOhttps://www.svtplay.se/video/jz2rYz7/anders-hansen-moter/james-fallon?info=visaZjvXAGVbzJames FallonicZ20230117i9  u   Anders Hansen möter...)
r"   r   r   r%   rQ   r$   rR   r&   r)   r'   Zdashr   rC   rT   zphttps://www.svtplay.se/video/30479064/husdrommar/husdrommar-sasong-8-designdrommar-i-stenungsund?modalId=8zVbDPATr   Z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:eWv5MLXNc                 C   sj   | j d| ||  d}| ||}|dsft|d}|sV|rVtdd| |}|s^|}||d< |S )Nz)https://api.svt.se/videoplayer-api/video/)headersr   )r)   r'   z\s*\|\s*.+?$ )rI   Zgeo_verification_headersr:   r,   r   rer9   _og_search_title)r4   r6   webpagedatarC   r   r   r   r   _extract_by_video_id   s$     

  zSVTPlayIE._extract_by_video_idc                 C   s2  |  |}|d}|dp&|d}|r6| |S | ||}| j| j| j|dddd|dd	}| |}|rt|d
d t	}|r| 
||}	|	|d d d d d |d |	S t|dd t}|s| j||dd	}
t|
ddddtjhdddthf	dd}|s| d|d}| ||}	||	d< |	S )Nr"   svt_idZmodal_idzembedded dataz{}json)r   rH   F)r   c                 S   s   | d d d d d d S )NrF   
dispatcherstoresZVideoTitlePageStorer^   rE   r   r   r   r   r   r     r   z)SVTPlayIE._real_extract.<locals>.<lambda>rF   rb   rc   Z	MetaStorer   )r   rR   c                 S   s   | d d d d S )NZ
statisticsZdataLakecontentr"   r   r   r   r   r   r     r   propsZ	urqlState.r^   ZdetailsPageByPathrE   svtIdget_all)z,<video[^>]+data-video-id=["\']([\da-zA-Z-]+)zs<[^>]+\bdata-rt=["\']top-area-play-button["\'][^>]+\bhref=["\'][^"\']*video/[\w-]+/[^"\']*\b(?:modalId|id)=([\w-]+)zvideo idrR   )rG   rH   r_   _download_webpageZ_parse_jsonZ_search_regexrO   Z_og_search_thumbnailr	   r/   r:   updatestrZ_search_nextjs_datar   ra   loads)r4   r   rJ   r6   r`   r]   r^   rR   r5   rC   Znextjs_datar   r   r   rL      sx    


    
          zSVTPlayIE._real_extract)N)r;   r<   r=   ZIE_DESCrM   _TESTSr_   rL   r   r   r   r   rP      s        Z
rP   c                       sT   e 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 )SVTSeriesIEzThttps?://(?:www\.)?svtplay\.se/(?P<id>[^/?&#]+)(?:.+?\btab=(?P<season_slug>[^&#]+))?zhttps://www.svtplay.se/rederietZ14445680rV   z$md5:d9fdfff17f5d8f73468176ecd2836039)r"   r   descriptioni>  )r   rC   Zplaylist_mincountz5https://www.svtplay.se/rederiet?tab=season-2-14445680zseason-2-14445680u   Rederiet - Säsong 2   c                    s$   t |st|rdS t |S NFr>   suitablerP   superclsr   	__class__r   r   rs   C  s    zSVTSeriesIE.suitablec              	   C   s6  |  | \}}| jd|ddd| idd d d }d }g }|d	 D ]}t|tsXqH|rv|d
|krlqH|d}|d}t|tsqH|D ]H}	|	dpi }
|
d}|rt|tsq|| 	d| t
 | qqH|d}|p|}|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
  }
})ry   r^   ZlistablesBySlugr   ZassociatedContentr"   nameitemsitemZ
videoSvtIdzsvt:z - )ZlongDescriptionZshortDescription)rG   groupsrI   r1   r/   r,   r2   rk   r.   Z
url_resultrP   Zie_keyplaylist_resultr   )r4   r   Zseries_slugZ	season_idr'   Zseason_nameentriesr    r{   r|   rE   Z
content_idr   r   r   r   rL   G  sf      




  

  zSVTSeriesIE._real_extract	r;   r<   r=   rM   rm   classmethodrs   rL   __classcell__r   r   rw   r   rn   /  s&   	rn   c                       s   e 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d/d0dd/gZe fd1d2Zd3d4 Z  ZS )5	SVTPageIEz8https?://(?: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   rC   playlist_countzkhttps://www.svt.se/nyheter/lokalt/skane/forsvarsmakten-om-trafikkaoset-pa-e22-kunde-inte-varit-dar-snabbareZjXvk42EuG   Försvarsmakten om trafikkaoset på E22: Kunde inte varit där snabbarer   P   r   iYeu   Lokala Nyheter SkåneZ20240104)	r"   r   r   r$   r&   r%   r)   r'   rQ   rS   TrW   zBhttps://www.svt.se/nyheter/svtforum/2023-tungt-ar-for-svensk-mediau    2023 tungt år för svensk mediaZewqAZv4i  rZ   ikeZ20231219ZMediestudier)	r   r"   r   r$   r&   r'   r%   rQ   r)   zMhttps://www.svt.se/sport/ishockey/bakom-masken-lehners-kamp-mot-mental-ohalsaZ25298267u0   Bakom masken – Lehners kamp mot mental ohälsa)r"   r      zVideo is gone)r   rC   r   rU   zXhttps://www.svt.se/nyheter/utrikes/svenska-andrea-ar-en-mil-fran-branderna-i-kalifornienZ24243746z2Svenska Andrea redo att fly sitt hem i KalifornienzDhttp://www.svt.se/sport/ishockey/jagr-tacklar-giroux-under-intervjunZ8439V2Kr?   r@   rA   )r   rC   rU   zIhttps://www.svt.se/nyheter/lokalt/vast/svt-testar-tar-nagon-upp-skrapet-1rX   z/https://www.svt.se/vader/manadskronikor/maj2018c                    s$   t |st|rdS t |S rq   rr   ru   rw   r   r   rs     s    zSVTPageIE.suitablec                    sp    |}||}|d|d|}t|ddthtjhfddpNi   fdd}| |S )	Nz$window\.svt\.(?:nyh\.)?urqlState\s*=z	json data.r^   Frg   c                  3   sH   t t ddthfD ],} d|  | | }|d< |V  qd S )Npage))ZtopMediarf   )body.rE   rf   zhttps://api.svt.se/video/r   )setr   rk   r:   rI   )r6   rK   r^   r4   r   r   r   r     s       z(SVTPageIE._real_extract.<locals>.entries)	Z	_match_idri   r\   Z_search_jsonr   rk   ra   rl   r~   )r4   r   Z
display_idr]   Z
urql_stater   r   r   r   rL     s    

    	zSVTPageIE._real_extractr   r   r   rw   r   r     s     	
Jr   )ra   r[   commonr   utilsr   r   r   r   r	   r
   r   r>   rN   rP   rn   r   r   r   r   r   <module>   s    
U +U