
    }j8B                         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 ddlmZmZ  G d de      Z G d	 d
e      Z G d de      Z G d de      Zy)    N   )InfoExtractor   )determine_extdict_getint_or_none
js_to_jsonstr_or_nonetry_getunified_timestamp)requiretraverse_objc                   ,    e Zd ZdgZdZd Zed        Zy)	SVTBaseIESEFc                 d   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'}|||| j%                  |      ||||||||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    G/root/.hermes/venv/lib/python3.12/site-packages/yt_dlp/extractor/svt.py<lambda>z*SVTBaseIE._extract_video.<locals>.<lambda>6   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   )idr7   formatsr2   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_idrL   m3u8_protocolrD   r2   vrplayer_typevurlr   fmtssubsr)   subtitle_referencessrsubtitle_urlsubtitle_langsubr7   rH   rI   rJ   rK   rF   rE   rG   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 ..y9 ""*,
 	
r.   c                     i }| j                         D ];  \  }}|D ]1  }d|d   v r| dn|}|j                  |g       j                  |       3 = |S )Nz	text-openr   z-forced)itemsrY   rS   )r2   fixed_subtitleslangrc   rh   
fixed_langs         r,   rZ   zSVTBaseIE._fixup_subtitlesi   ss     #//+ 	GJD$ G1<E
1JvW-PT
**:r:AA#FG	G r.   N)__name__
__module____qualname__rV   _GEO_BYPASSrj   staticmethodrZ   r*   r.   r,   r   r      s)    VNKO
b  r.   r   c                   (   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dC ZdD ZyE)F	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)r5   z	sv-forced)rC   r   r7   descriptionrH   rJ   rF   upload_daterE   	thumbnailrG   r2   skip_downloadr   )r   md5	info_dictparamsz%https://www.svtplay.se/video/304790648zVbDPAu   Designdrömmar i StenungsundiN`20210315i  r5   r   r6   )	rC   r   r7   rF   r{   rE   r|   rG   r2   zEpisode is no longer available)r   r~   r   r   skipz$https://www.svtplay.se/video/emBxBQjeyBd9ajz1. Farlig kryssningi%Xz$md5:8f350bc605677a5ead36a19a62fd9a3420170401i
  Rederiet)rC   r   r7   rF   rz   r{   rE   r|   rG   rJ   rH   r2   zFailed to download (?:MPD|m3u8))r   r~   r   r   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)rC   r   r7   rz   rF   r{   rE   r|   rG   rJ   rH   dashr   r   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:eWv5MLXc                     | j                  d| || j                               }| j                  ||      }|j                  d      st	        |dd      |d<   |S )Nz)https://api.svt.se/videoplayer-api/video/)headersr7   rJ   rH   )_download_jsongeo_verification_headersrj   rM   r   )r[   r]   datar   s       r,   _extract_by_video_idzSVTPlayIE._extract_by_video_id   sh    ""7zBd;;= # ? ''h7	}}W%!-iH!MIgr.   c                    | j                  |      }|j                  d      }|j                  d      xs |j                  d      }| j                  |||       xs d}|sa| j                  d|d|t              }t        |t        j                  hd	d
t        j                  hdddt        ht        t        d      hf
      }| j                  |      }|j                  d      s)t        j                   dd| j#                  |            |d<   |j                  d      s| j%                  |d       |d<   | j'                  |      |d<   |S )NrC   svt_idmodal_id)r!    z(?<=[\s.])URQL_DATA\s*=	json data)transform_source.r   detailsPageByPath
smartStart
videoSvtIdzSVT IDr7   z\s*\|\s*.+?$rz   r   r|   )_match_valid_urlgroup_download_webpage_search_jsonr	   r   rT   valuesjsonloadsr
   anyr   r   rM   rerh   _og_search_title_og_search_description_og_search_thumbnail)r[   r   mobjr]   r   webpager   r   s           r,   _real_extractzSVTPlayIE._real_extract   sC   $$S)::d#H%?J)?((h&j(IOR$$*G[(!+ % -D "$sFTZZL:Ml[M3AR@S)U VF --f5	}}W%!#T=R=RSZ=[!\Ig}}]+'+'B'B7TX'B'YIm$!%!:!:7!C	+r.   N)	rp   rq   rr   IE_NAMEIE_DESC
_VALID_URL_TESTSr   r   r*   r.   r,   rv   rv   t   s   G)G
J U1#A*%#%R )	B
 V
#* 713#%R5 
  V
 1+. 61*#A%R, i
" V
 AA-0 a#j#%R%,
 V
& B a
 E
 L 5 "  F YoFb	r.   rv   c                   ^     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       Zd Z x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)rC   r7   rz   i>  )r   r   playlist_mincountz4https://www.svtplay.se/rederiet?tab=season-2-jpmQYgnzseason-2-jpmQYgnu   Rederiet - Säsong 2   c                 P    t         j                  |      rdS t        |   |      S NFrv   suitablesuperclsr   	__class__s     r,   r   zSVTSeriesIE.suitable*  %    !**3/uJUW5Ec5JJr.   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   associatedContentrC   namerl   itemr   zsvt:z - )longDescriptionshortDescription)r   groupsr   rW   rT   rM   rX   strrS   
url_resultrv   ie_keyplaylist_resultr   )r[   r   series_slug	season_idrH   season_nameentriesr9   rl   r   video
content_idr7   s                r,   r   zSVTSeriesIE._real_extract.  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)DtZ')9)9);Z I JJ	J$ 

6"!.Y[gS.EE##Y2&**T"2EVDEG 	Gr.   
rp   rq   rr   r   r   r   classmethodr   r   __classcell__r   s   @r,   r   r     si    GhJ0A

 ! F$+A

  F$ K K:Gr.   r   c                        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d2       Zd3 Z xZ	S )4	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)r7   rC   r   )r   r   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)	rC   r7   r   rE   rG   rF   rJ   rH   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)	r7   rC   r   rE   rG   rH   rF   r{   rJ   zMhttps://www.svt.se/sport/ishockey/bakom-masken-lehners-kamp-mot-mental-ohalsa25298267u0   Bakom masken – Lehners kamp mot mental ohälsa)rC   r7      zVideo is gone)r   r   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8439V2Ku1   Stjärnorna skojar till det - under SVT-intervjun   )rC   r   r7   rE   rG   )r   r   r   zIhttps://www.svt.se/nyheter/lokalt/vast/svt-testar-tar-nagon-upp-skrapet-1r   z/https://www.svt.se/vader/manadskronikor/maj2018c                 P    t         j                  |      rdS t        |   |      S r   r   r   s     r,   r   zSVTPageIE.suitable  r   r.   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urqlState\s*[=:]r   .r   F)get_allc               3      K   t        t        ddt        hf            D ]0  } j                  j	                  d|  |       |       }|d<   | 2 y w)Npage))topMediasvtId)body.r   r   zhttps://api.svt.se/video/r7   )setr   r   rj   r   )r]   infor   r[   r7   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   r   r   r   r   r   r   )r[   r   
display_idr   
urql_stater   r   r7   s   `     @@r,   r   zSVTPageIE._real_extract  s    ^^C(
((j9%%g.&&':G[R\]
Jfsedjj\(JTYZ`^`	 ##GIz5AAr.   r   r   s   @r,   r   r   k  s8   GLJ Lqf
  }^#`-%

 T
" T7#%%

 T
" _G
  jI
  VH
   [ AKHFT K KBr.   r   )r   r   commonr   utilsr   r   r   r	   r
   r   r   utils.traversalr   r   r   rv   r   r   r*   r.   r,   <module>r      sa     	 !  ] ]@^	 ^BSG) SGldB	 dBr.   