
    yfE                         d dl Z d dlZddlmZ ddlmZ ddlmZmZm	Z	m
Z
mZmZ  G d de      Z G d	 d
e      Z G d de      Z G d de      Z G d de      Z G d de      Zy)    N   )InfoExtractor   )
compat_str)determine_extdict_getint_or_nonetraverse_objtry_getunified_timestampc                       e Zd ZdgZd Zy)	SVTBaseIESEc                 F   t        |dd      }|rdnd}g }i }|d   D ]  }|j                  d      xs |j                  d      }|d	   }	t        |	      }
|
dk(  r?| j                  |	|d
||d      \  }}|j	                  |       | j                  ||       {|
dk(  r(|j	                  | j                  |	dz   ||d             |
dk(  r=| j                  |	||d      \  }}|j	                  |       | j                  ||       |j                  ||	d        t        |d t              xs i }|s/|j                  d      r| j                  d| j                  d       t        |d      }t        |t              re|D ]`  }|j                  d	      }|j                  dd      }|s)d	|i}t        |      dk(  rd|d<   |j                  |g       j                  |       b |j                  d      }|j                  d      }t!        |j                  d            }|j                  d       }t!        |j                  d!            }t#        |j                  d"            }t!        t        |d#            }d }t        |d$d%      }||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                     | d   S )Nrights xs    6/usr/lib/python3/dist-packages/yt_dlp/extractor/svt.py<lambda>z*SVTBaseIE._extract_video.<locals>.<lambda>1   s
    q{     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   )idr5   formatsr0   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   )self
video_infovideo_idrJ   m3u8_protocolrB   r0   vrplayer_typevurlr   fmtssubsr&   subtitle_referencessrsubtitle_urlsubtitle_langsubr5   rF   rG   rH   rI   rD   rC   rE   adults                               r*   _extract_videozSVTBaseIE._extract_video   s   :'<eL")}	./ 	B&&.B"&&2BKe9D%Cf}!EE(m'u F 6
d t$%%d9%=t88?*H&e  9  5 6 !DD(;e E E
dt$%%d9%=!,  +	2 %:DAGR6::&89%%8--$ & H 'z3VW)40) 
H!vve} "z4 8|C %\2f<%*E
((;BB3G
H w'/#JNN8$<=..0$Z^^O%DE%fjj&=>	x
4YZ[	J#% #I " ""*,
 	
r,   N)__name__
__module____qualname__rT   rg   r'   r,   r*   r   r      s    VNO
r,   r   c                   :    e Zd ZdZdez  gZddddddd	d
dZd Zy)SVTIEz^https?://(?:www\.)?svt\.se/wd\?(?:.*?&)?widgetId=(?P<widget_id>\d+)&.*?\barticleId=(?P<id>\d+)z'(?:<iframe src|href)="(?P<url>%s[^"]*)"zshttp://www.svt.se/wd?widgetId=23991&sectionId=541&articleId=2900353&type=embed&contextSectionId=123&autostart=false 33e9a5d8f646523ce0868ecfb0eed77d2900353r   1   Stjärnorna skojar till det - under SVT-intervjun   r   rA   r   r5   rC   rE   )r   md5	info_dictc                     | j                  |      }|j                  d      }|j                  d      }| j                  d|d|d|      }| j                  |d   |      }|d   d   |d<   |S )	N	widget_idrA   zhttp://www.svt.se/wd?widgetId=z&articleId=z#&format=json&type=embed&output=jsonvideocontextr5   )_match_valid_urlgroup_download_jsonrg   )rX   r   mobjru   
article_idinfors   s          r*   _real_extractzSVTIE._real_extractt   s{    $$S)JJ{+	ZZ%
""bkmwx ''WzB	!)_W5	'r,   N)rh   ri   rj   
_VALID_URL_EMBED_REGEX_TESTr~   r'   r,   r*   rl   rl   e   s=    rJ>KLL E1H

Er,   rl   c                       e Zd ZdZy)SVTPlayBaseIEzBroot\s*\[\s*(["\'])_*svtplay\1\s*\]\s*=\s*(?P<json>{.+?})\s*;\s*\nN)rh   ri   rj   _SVTPLAY_REr'   r,   r*   r   r      s    WKr,   r   c                       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d7d5Zd6 Zy4)8	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/30479064 2382036fd6f8c994856c323fe51c426e8zVbDPAr   u   Designdrömmar i StenungsundiN`20210315i  z6re:^https?://(?:.*[\.-]jpg|www.svtstatic.se/image/.*)$r   r3   r   r4   )	rA   r   r5   rD   upload_daterC   	thumbnailrE   r0   skip_downloadr   zEpisode is no longer available)r   rr   rs   paramsskipz$https://www.svtplay.se/video/emBxBQjeyBd9ajz1. Farlig kryssningi%X20170401i
  Rederietzcount:3)rA   r   r5   rD   r   rC   r   rE   rH   rF   r0   )r   rr   rs   r   zOhttps://www.svtplay.se/video/jz2rYz7/anders-hansen-moter/james-fallon?info=visajvXAGVbzJames Fallonic20230117i9  u   Anders Hansen möter...)
rA   r   r5   rD   r   rC   r   rE   rH   rF   dashr   rs   r   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:eWv5MLXNc                    | j                  d|z  || j                               }| j                  ||      }|j                  d      s?t	        |d      }|s(|r&t        j                  dd| j                  |            }|s|}||d<   |S )Nz+https://api.svt.se/videoplayer-api/video/%s)headersr5   )rH   rF   z\s*\|\s*.+?$ )rz   geo_verification_headersrg   rK   r   rere   _og_search_title)rX   rZ   webpagedatars   r5   s         r*   _extract_by_video_idzSVTPlayIE._extract_by_video_id   s    ""9HDd;;= # ? ''h7	}}W%Y(=>EW#R)>)>w)GI !&Igr,   c                    | j                  |      }|j                  d      }|j                  d      xs |j                  d      }|r| j                  |      S | j                  ||      }| j	                  | j                  | j                  |ddd      |d	      }| j                  |      }|r]t        |d
 t              }|r7| j                  ||      }	|	j                  |d   d   d   d   d   |d       |	S t        |d t              }|s?| j                  ||d	      }
t        |
ddddt        j                   hdddt"        hf	d      }|s| j                  d|d      }| j                  ||      }	||	d<   |	S )NrA   svt_idmodal_idzembedded dataz{}json)r   ry   F)r   c                 *    | d   d   d   d   d   d   S )Nrw   
dispatcherstoresVideoTitlePageStorer   rv   r'   r(   s    r*   r+   z)SVTPlayIE._real_extract.<locals>.<lambda>  s&    )\ :8 DEZ [\b cdk l r,   rw   r   r   	MetaStorer5   )r5   r   c                     | d   d   d   d   S )N
statisticsdataLakecontentrA   r'   r(   s    r*   r+   z)SVTPlayIE._real_extract.<locals>.<lambda>  s    ,
 ;I Ft L r,   props	urqlState.r   detailsPageByPathrv   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 idr   )rx   ry   r   _download_webpage_parse_json_search_regexr   _og_search_thumbnailr   rR   rg   updater   _search_nextjs_datar
   r   loadsstr)rX   r   r{   rZ   r   r   r   r   rY   rs   nextjs_datas              r*   r~   zSVTPlayIE._real_extract   s   $$S)::d#H%?J)?,,V44((h7  '?D   E	   # --g6	 lJ  //
HE	  !)_\:8D[QRYZ!*"  ! LF 227HE2RK!+c6DJJ<AT3%0)279F ''I%F
 --fg>	!*	+r,   )N)rh   ri   rj   IE_DESCr   _TESTSr   r~   r'   r,   r*   r   r      sn   )G
J 713#%R5 
  V
 1+. 61*#%R, i
  V
%, a##%R%/
 V
$ B a
 E
 L 5 "  F kXFt1r,   r   c                   Z     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       Zd Z xZS )SVTSeriesIEzThttps?://(?:www\.)?svtplay\.se/(?P<id>[^/?&#]+)(?:.+?\btab=(?P<season_slug>[^&#]+))?zhttps://www.svtplay.se/rederiet14445680r   z$md5:d9fdfff17f5d8f73468176ecd2836039)rA   r5   descriptioni>  )r   rs   playlist_mincountz5https://www.svtplay.se/rederiet?tab=season-2-14445680zseason-2-14445680u   Rederiet - Säsong 2   c                     t         j                  |      st        j                  |      rdS t        t        |   |      S NF)rl   suitabler   superr   clsr   	__class__s     r*   r   zSVTSeriesIE.suitableD  s5    s+y/A/A#/FuqER]_bLlmpLqqr,   c           	         | j                  |      j                         \  }}| j                  d|ddd|z  i      d   d   d   }d }g }|d	   D ]  }t        |t              s|r&|j                  d
      |k7  r+|j                  d      }|j                  d      }t        |t              s^|D ]r  }	|	j                  d      xs i }
|
j                  d      }|rt        |t              s<|j                  | j                  d|z   t        j                         |             t  |j                  d      }|xs |}|r
|r|d|}n|r|}| j                  ||xs |j                  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   associatedContentrA   nameitemsitem
videoSvtIdzsvt:z - )longDescriptionshortDescription)rx   groupsrz   rU   rR   rK   rV   r   rQ   
url_resultr   ie_keyplaylist_resultr   )rX   r   series_slug	season_idrF   season_nameentriesr7   r   r   rv   
content_idr5   s                r*   r~   zSVTSeriesIE._real_extractH  s   !%!6!6s!;!B!B!DY$$1;% $ %. % , -, )-*, +,--0 01 	JFfd+::d#y0$jj0JJw'EeT* J(.B"YY|4
!J
)KtZ')9)9);Z I JJ	J$ 

6"!.Y[!&4EE##Y2&**T"2EVDEG 	Gr,   	rh   ri   rj   r   r   classmethodr   r~   __classcell__r   s   @r*   r   r   0  sd    hJ0A

 ! G%+A

  F$ r r:Gr,   r   c                        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d1       Zd2 Z xZS )3	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)r5   rA   r   )r   rs   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)	rA   r5   r   rC   rE   rD   rH   rF   r   r   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)	r5   rA   r   rC   rE   rF   rD   r   rH   zMhttps://www.svt.se/sport/ishockey/bakom-masken-lehners-kamp-mot-mental-ohalsa25298267u0   Bakom masken – Lehners kamp mot mental ohälsa)rA   r5      zVideo is gone)r   rs   r   r   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8439V2Kro   rp   rq   )r   rs   r   zIhttps://www.svt.se/nyheter/lokalt/vast/svt-testar-tar-nagon-upp-skrapet-1r   z/https://www.svt.se/vader/manadskronikor/maj2018c                     t         j                  |      st        j                  |      rdS t        t        |   |      S r   )rl   r   r   r   r   r   s     r*   r   zSVTPageIE.suitable  s5    s+y/A/A#/FuoER[]`LjknLoor,   c                 *     j                  |      } j                  ||      } j                  |       j                  d|d|      }t	        |ddt
        ht        j                  hfd      xs i  fd} j                   |       |      S )Nzwindow\.svt\.nyh\.urqlState\s*=z	json data.r   Fr   c               3      K   t        t        ddt        hf            D ]0  } j                  j	                  d|  |       |       }|d<   | 2 y w)Npage))topMediar   )body.rv   r   zhttps://api.svt.se/video/r5   )setr
   r   rg   rz   )rZ   r}   r   rX   r5   s     r*   r   z(SVTPageIE._real_extract.<locals>.entries  sr     TPSVRW4 !   **''*CH:(NPXY[ce %W
s   AA)		_match_idr   r   _search_jsonr
   r   r   r   r   )rX   r   
display_idr   
urql_stater   r   r5   s   `     @@r*   r~   zSVTPageIE._real_extract  s    ^^C(
((j9%%g.&&.jR
 Jfsedjj\(JTYZ`^`	 ##GIz5AAr,   r   r   s   @r*   r   r     s3   LJ Lqf
  }^#`-%

 T
" T7#%%

 T
" _G
  jI
  VH
   [ AKHFT p pBr,   r   )r   r   commonr   compatr   utilsr   r   r	   r
   r   r   r   rl   r   r   r   r   r'   r,   r*   <module>r      st     	 !  R
 R
jI :XI Xg gTRG- RGjdB	 dBr,   