
    V|ha?                         S SK r S SKrSSKJr  SSKJr  SSKJrJ	r	J
r
JrJrJrJrJrJrJr   " S S\5      r " S	 S
\5      r " S S\5      r " S S\5      rg)    N   )InfoExtractor   )	HTTPError)
ExtractorErrordetermine_extextract_attributesint_or_nonemerge_dictsparse_iso8601strip_or_nonetraverse_objurl_or_noneurljoinc                   *    \ rS rSrS rS rSS jrSrg)	IGNBaseIE   c                 `    U R                  SU R                   SU R                   SU 3U5      $ )Nzhttp://apis.ign.com/z/v3/zs/slug/)_download_json
_PAGE_TYPE)selfslugs     N/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/ign.py	_call_apiIGNBaseIE._call_api   s;    """4??"347HPTvVX\^ 	^    c                     U R                  U5      $ ! [         a  n[        UR                  [        5      (       a  UR                  R
                  S:X  a  UR                  R                  =(       dK    UR                  R                  R                  UR                  R
                  UR                  R                  /UR                  l        [        SUR                  SS9ee S nAff = f)N  Content not found: expired?Tcauseexpected)
r   r   
isinstancer!   r   statusargsresponseurlreasonr   r   es      r   _checked_call_apiIGNBaseIE._checked_call_api   s    		>>$'' 	!''9--!''..C2G ww||  JGG$$((!''..!''..0J$1!# # 	s    
C(CC##C(c                 ^   US   n/ n[        US[        S9=(       d    0 n[        UR                  S5      5      nU(       a"  UR	                  U R                  XcSSSSS	95        [        UR                  S
5      5      nU(       a   UR	                  U R                  XsSSS95        UR                  S5      =(       d    /  H  n[        UR                  S5      5      n	U	(       d  M&  UR                  U	[        UR                  S5      S5      [        UR                  S5      5      [        UR                  S5      5      [        UR                  S5      5      S.5        M     [        US[        S9n
U
(       a   UR                  [        U
S5      SSU
S.5        [        USSSS04[        S9n[        USS S9n[        US[        S9=(       d    0 n[        USSS S! S9nUU[        UR                  S"5      5      [        UR                  S#5      5      [        UR                  S$5      5      UUUS%.$ )&NvideoIdrefsexpected_typem3uUrlmp4m3u8_nativehlsF)m3u8_idfatalf4mUrlhds)f4m_idr7   assetsr'   bitratei  
frame_rateheightwidth)r'   tbrfpsr>   r?   )systemmezzanineUrl	mezzaniner   )ext	format_idqualityr'   
thumbnails.)tags.displayNamec                 4    U R                  5       =(       d    S $ Nstripxs    r   <lambda>/IGNBaseIE._extract_video_info.<locals>.<lambda>P       AGGI$5$5r   metadata	longTitletitlenamec                 4    U R                  5       =(       d    S $ rL   rM   rO   s    r   rQ   rR   U   rS   r   descriptionpublishDateduration)idrV   rY   	timestampr[   rH   formatsrI   )r   dictr   getextend_extract_m3u8_formats_extract_f4m_formatsappendr
   r   r   r   )r   videor7   video_idr^   r/   m3u8_urlf4m_urlasset	asset_urlmezzanine_urlrH   rI   rT   rV   s                  r   _extract_video_infoIGNBaseIE._extract_video_info%   s   #E6>D"txx12NN455E=U 6 , - dhhx01NN444%u 5 > ? ii)/R/E#EIIe$45INN "599Y#7>"599\#:;%eii&9:$UYYw%78 	 0 %-[JNN$]E:($	  "L#u~6kS
/57  zFL"k7F57
 (m)DE&x||M'BC#HLL$<=$	
 		
r    N)T)__name__
__module____qualname____firstlineno__r   r+   rl   __static_attributes__rn   r   r   r   r      s    ^
;
r   r   c                       \ rS rSrSrSrSrSR                  SR                  \S-   \45      5      r	Sr
S	rS
SSSSSSSSSSSS.
SS0S.SSSSSSSS S!S".S#S$.S%SS&./r\S' 5       rS( rS) rS* rS+rg,)-IGNIEc   z|
Extractor for some of the IGN sites, like www.ign.com, es.ign.com de.ign.com.
Some videos of it.ign.com are also supported
z#/(?:\d{4}/\d{2}/\d{2}/)?(?P<id>.+?)z(?:/?\?(?P<filt>[^&#]+))?z2https?://(?:.+?\.ign|www\.pcmag)\.com/videos(?:{})|z(?:[/?&#]|$)zign.comre   z:http://www.ign.com/videos/2013/06/05/the-last-of-us-review d2e1586d9987d40fad7867bf96a018ea 8f862beef863986b2785559b9e1aa599r3   zThe Last of Us Reviewz$md5:c8946d4260a4d43a00d5ae8ed998870ci`DQ20130605zcount:9zthe-last-of-us-reviewzShttps://assets1.ignimgs.com/vid/thumbnails/user/2014/03/26/lastofusreviewmimig2.jpgi  )
r\   rE   rV   rY   r]   upload_daterI   
display_id	thumbnailr[   nocheckcertificateT)r'   md5	info_dictparamszYhttp://www.pcmag.com/videos/2015/01/06/010615-whats-new-now-is-gogo-snooping-on-your-data f1581a6fe8c5121be5b807684aeac3f6 ee10d774b508c9b8ec07e763b9125b91z.What's New Now: Is GoGo Snooping on Your Data?z$md5:817a20299de610bd56f13175386da6fai2T20150106zcount:4)r\   rE   rV   rY   r]   r{   rI   z404 Not Found)r'   r   r   skipzOhttps://www.ign.com/videos/is-a-resident-evil-4-remake-on-the-way-ign-daily-fixr'   only_matchingc           	         ^ [         R                  " SU5      n[        S U4S j[         R                  " SU R                   S3U(       a  US   OS5       5       5      $ )Nzg(?s)<section\b[^>]+\bclass\s*=\s*['"](?:[\w-]+\s+)*?content-feed-grid(?!\B|-)[^>]+>(.+?)</section[^>]*>c              3   Z   >#    U  H   n[        TUR                  S 5      5      v   M"     g7f)pathN)r   group).0mr'   s     r   	<genexpr>,IGNIE._extract_embed_urls.<locals>.<genexpr>   s+      , ;+Q7300 ;+s   (+z+<a\b[^>]+\bhref\s*=\s*('|")(?P<path>/videosz)\1r    )refindallfilterfinditer_VIDEO_PATH_RE)clsr'   webpagegridss    `  r   _extract_embed_urlsIGNIE._extract_embed_urls   s]    

z  ,"++@ASAS@TTWZ!ar;+ ,- 	-r   c                     U R                  U5      R                  SS5      u  p#U(       a  U R                  X5      $ U R                  X=(       d    S5      $ )Nr\   filtall)_match_valid_urlr   _extract_video_extract_playlist)r   r'   r|   r   s       r   _real_extractIGNIE._real_extract   sK    005;;D&I
&&s77%%c=599r   c                 x   ^  T R                  X5      nT R                  U 4S jT R                  X5       5       US9$ )Nc              3   d   >#    U  H%  nTR                  UTR                  5       5      v   M'     g 7frL   )
url_resultie_key)r   ur   s     r   r   *IGNIE._extract_playlist.<locals>.<genexpr>   s,      >< __Q..<s   -0)playlist_id)_download_webpageplaylist_resultr   )r   r'   r|   r   s   `   r   r   IGNIE._extract_playlist   sF    ((9##>..s<>" $ $ 	$r   c                 b    U R                  U5      nU R                  U5      n[        SU0U5      $ )Nr|   )r+   rl   r   )r   r'   r|   re   infos        r   r   IGNIE._extract_video   s<    &&z2''.*
 	r   rn   N)ro   rp   rq   rr   __doc__r   _PLAYLIST_PATH_REformatjoin
_VALID_URLIE_NAMEr   _TESTSclassmethodr   r   r   r   rs   rn   r   r   ru   ru   c   s     <N4=DDSXX~`oOo  rC  OD  FE  	F GJ L14,A#%1n
 !$
& k14FA#%
   a?"FH - -:$r   ru   c                   f    \ rS rSrSrSSSSSSS	S
SSSSS.
S/S.SSS.SSS.SSS.SSS./rS rSrg)
IGNVideoIE   zIhttps?://.+?\.ign\.com/(?:[a-z]{2}/)?[^/]+/(?P<id>\d+)/(?:video|trailer)/z[http://me.ign.com/en/videos/112203/video/how-hitman-aims-to-be-different-than-every-other-s dd9aca7ed2657c4e118d8b261e5e9de1 e9be7ea899a9bbfc0674accc22a36cc8r3   zIHow Hitman Aims to Be Different Than Every Other Stealth Game - NYCC 2015zGTaking out assassination targets in Hitman has never been more stylish.i V20151012112203zhhttps://sm.ign.com/ign_me/video/h/how-hitman/how-hitman-aims-to-be-different-than-every-other-s_8z14.jpgi*  zcount:13)
r\   rE   rV   rY   r]   r{   r|   r}   r[   rI   zHTTP Error 400: Bad Request)r'   r   r   expected_warningszNhttp://me.ign.com/ar/angry-birds-2/106533/video/lrd-ldyy-lwl-lfylm-angry-birdsTr   zChttps://me.ign.com/ar/ratchet-clank-rift-apart/144327/trailer/embedz9http://adria.ign.com/sherlock-season-4/9687/trailer/embedz.https://kr.ign.com/bic-2018/3307/trailer/embedc                 l   U R                  U5      n[        R                  R                  U5      n[        R                  R	                  UR                  UR                  R                  SS5      S   S-   S95      nU R                  XB5      u  pVUR                  n[        R                  R                  [        R                  R                  U5      R                  5      R                  SS /5      S   nU(       a$  U R                  U[        R                  5       5      $ U R!                  SUS	S
S9n	U	(       d$  Xq:X  a  [#        SU-   5      eU R                  U5      $ [%        U	5      n	U	R                  S5      =(       d    Sn
U R'                  X5      S   n
U R)                  U
5      n[+        SU0U5      $ )N/r   r   z/embed)r   r'   z)(<div\b[^>]+\bdata-video-id\s*=\s*[^>]+>)zvideo elementFr7   zRedirect loop: zdata-settingsz{}re   r|   )	_match_idurllibparseurlparse
urlunparse_replacer   rsplit_download_webpage_handler'   parse_qsqueryr`   r   ru   r   _search_regexr   r	   _parse_jsonrl   r   )r   r'   rf   
parsed_url	embed_urlr   urlhnew_urlign_urlre   
video_datar   s               r   r   IGNVideoIE._real_extract   s   >>#&\\**3/
LL++Z__%;%;C%CA%F%QRT	 55iJ((,,''LL!!'*00225#edV2DRI??7ELLN;;""#OQXZiqv"w~$%6%<==??7++"5)YY/74
%%j;GD
''
3(
 	r   rn   N)ro   rp   rq   rr   r   r   r   rs   rn   r   r   r   r      s    ]Jl14`d#%" D
 <<" `
 U K @7FBr   r   c                       \ rS rSrSrSrSSSS.SS	S
SSSSSSSSS.
0SSS
SSSSSSSSS.
0/SS0S /S!.S"S#S$S.S%S /S&.S'SS(.S)SS(.S*SS(.S+SS(.S,SS(./rS- rS. rS/r	g0)1IGNArticleIE   zrhttps?://.+?\.ign\.com/(?:articles(?:/\d{4}/\d{2}/\d{2})?|(?:[a-z]{2}/)?(?:[\w-]+/)*?feature/\d+)/(?P<id>[^/?&#]+)articlezVhttp://me.ign.com/en/feature/15775/100-little-things-in-gta-5-that-will-blow-your-mind72113z3100 Little Things in GTA 5 That Will Blow Your Mind)r\   rV   r    5ebbd138523268b93c9141af17bec937r3   zGrand Theft Auto V Video ReviewzhRockstar drops the mic on this generation of games. Watch our review of the masterly Grand Theft Auto V.ih7R20130916zcount:12zchttps://assets1.ignimgs.com/thumbs/userUploaded/2021/8/16/gta-v-heistsjpg-e94705-1629138553533.jpegzgrand-theft-auto-v-video-reviewi  )
r\   rE   rV   rY   r]   r{   rI   r}   r|   r[    638672ee848ae4ff108df2a296418ee2zGTA 5 In Slow Motionz4The twisted beauty of GTA 5 in stunning slow motion.idR20131212   zcount:25zgta-5-in-slow-motionzKhttps://assets1.ignimgs.com/vid/thumbnails/user/2013/11/03/GTA-SLO-MO-1.jpg)
r\   rE   rV   rY   r]   r{   r[   rI   r|   r}   skip_downloadTzBackend fetch failed)r'   r   playlistr   r   zVhttp://www.ign.com/articles/2014/08/15/rewind-theater-wild-trailer-gamescom-2014?watch53ee806780a81ec46e0790f8z+Rewind Theater - Wild Trailer Gamescom 2014r   )r'   r   playlist_countr   z`http://www.ign.com/articles/2017/06/08/new-ducktales-short-donalds-birthday-doesnt-go-as-plannedr   z>https://www.ign.com/articles/2021-mvp-named-in-puppy-bowl-xviizLhttps://www.ign.com/articles/2014/08/07/sons-of-anarchy-final-season-trailerzihttps://www.ign.com/articles/2017/09/20/marvels-the-punisher-watch-the-new-trailer-for-the-netflix-seriesz`https://www.ign.com/articles/2016/01/16/supergirl-goes-flying-with-martian-manhunter-in-new-clipc                 ^    U R                  U5      $ ! [         Ga  n[        UR                  [        5      (       a  UR                  R
                  =(       dK    UR                  R                  R                  UR                  R                  UR                  R                  /UR                  l        UR                  R                  S:X  a  [        SUR                  SS9eUR                  R                  S:X  a)  U R                  [        UR                  5      5         S nAg e S nAff = f)Nr   r   Tr    i  )r   r   r#   r!   r   r%   r&   r'   r$   r(   report_warningstrr)   s      r   r+   IGNArticleIE._checked_call_api<  s    	>>$'' 	!''9-- ww||  JGG$$((!''..!''..0J77>>S((5QWW!%' ' WW^^s*''AGG5	s    D,DD'&D''D,c                 (  ^ ^^^^ T R                  U5      mT R                  T5      mT(       a8  UU 4S jnT R                  U" 5       TR                  S5      [	        TSS S95      $ T R                  UT5      mT R                  STS S9nU(       a  U U4S jnO-T R                  S	TS
S
S S9nT R                  TT5      mUUU 4S jnT R                  U" 5       U=(       d    T[        R                  " SST R                  TSS95      =(       d    S 5      $ )Nc               3   N  >#    [        TS[        S9n U (       a&  TR                  U [        R	                  5       5      v   TR                  S5      =(       d    /  HF  n[        R                  " SU5       H(  n[        U5      (       d  M  TR                  U5      v   M*     MH     g 7f)N)mediaRelationsr   mediarT   r'   r0   contentzD(?:\[(?:ignvideo\s+url|youtube\s+clip_id)|<iframe[^>]+src)="([^"]+)")r   r   r   ru   r   r`   r   r   )	media_urlr   	video_urlr   r   s      r   entries+IGNArticleIE._real_extract.<locals>.entriesR  s     (N"-/	 //)U\\^DD 'I 6 <" <G%'ZZ0w  zA  &B	&y11"&//)"<< &B !=s   BB%	B%	articleId)rT   headlinec                 4    U R                  5       =(       d    S $ rL   rM   rO   s    r   rQ   ,IGNArticleIE._real_extract.<locals>.<lambda>a  s    AGGI,=,=r   r0   zdable:item_iddefaultc               3     >#    [         R                  " ST5       H  n TR                  SU R                  S5      SSS9n[        R
                  R                  [        U5      R                  S5      =(       d    S5      n[        UR                  S5      =(       d    S /S	   5      nU(       d  M  TR                  U5      v   M     g 7f)
NzS(?s)<object\b[^>]+\bclass\s*=\s*("|')ign-videoplayer\1[^>]*>(?P<params>.+?)</objectz2(<param\b[^>]+\bname\s*=\s*("|')flashvars\2[^>]*>)r   	flashvarsr   r   valuer'   r   )r   r   r   r   r   r   r   r	   r`   r   r   )r   r   v_urlr   r   s      r   r   r   h  s     r!A !% 2 2Q); !3 !DI !' 5 56H6S6W6WX_6`6fdf gI'u)=)G$(LMEu"ooe44!s   B(C/Cz,\bdata-post-id\s*=\s*("|')(?P<id>[\da-f]+)\1r\   )r   r   c            
   3     >#    [        TSSSS S45       Hp  n [        TSSU R                  SS5      4[        S9(       a  M,  [        TSSU 4[        S9=(       d    0 nTR                  US	S
9nU(       d  M`  [	        ST0U5      v   Mr     g 7f)NpropsapolloState
ROOT_QUERYc                 $    U R                  S5      $ )NzvideoPlayerProps()
startswith)k_s     r   rQ   =IGNArticleIE._real_extract.<locals>.entries.<locals>.<lambda>}  s    ALLYlLmr   __refPlayerPropsModernContentr0   Fr   r|   )r   replacer_   rl   r   )playerre   r   r|   nextjs_datar   s      r   r   r   z  s     *# -?movwyF $K%,mV^^M[j=k$l268 !(wv6VfjkqoqE33E3GDt)(*+! !ys   A/B6Bz\s+-\s+IGN\s*$r   )r   r+   r   r`   r   r   _html_search_metar   _search_nextjs_datar   sub_og_search_title)r   r'   r   r   r   r|   r
  r   s   `   @@@@r   r   IGNArticleIE._real_extractL  s   ^^C(
((4	= ''	7;;{35"=?@ @ ((j9,,_gt,T
5 ,,CT4 - 9K 227JGK!  ##I{0jFF$b$*?*?QS*?*TU]Y]_ 	_r   rn   N)
ro   rp   rq   rr   r   r   r   r+   r   rs   rn   r   r   r   r      s    GJJgJ
 < > $N!+#-& "G"C # < 3#Y!+#- #&"8!n
> T
 55O(R h,B
 45 r P ^ { rADFL @_r   r   )r   urllib.parser   commonr   networking.exceptionsr   utilsr   r   r	   r
   r   r   r   r   r   r   r   ru   r   r   rn   r   r   <module>r     s[    	  ! -  L
 L
^OI Od; ;|Y_9 Y_r   