
    yf?                         d dl Z d dlZddlm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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y)    N   )InfoExtractor   )compat_parse_qs)	HTTPError)ExtractorErrordetermine_exterror_to_compat_strextract_attributesint_or_nonemerge_dictsparse_iso8601strip_or_nonetraverse_objurl_or_noneurljoinc                        e Zd Zd Zd ZddZy)	IGNBaseIEc                 Z    | j                  dj                  | j                  |      |      S )Nz(http://apis.ign.com/{0}/v3/{0}s/slug/{1})_download_jsonformat
_PAGE_TYPE)selfslugs     6/usr/lib/python3/dist-packages/yt_dlp/extractor/ign.py	_call_apizIGNBaseIE._call_api   s.    ""6==dootTVZ\ 	\    c                    	 | j                  |      S # t        $ r}t        |j                  t              r|j                  j
                  dk(  r|j                  j                  xsK |j                  j                  j                  |j                  j
                  |j                  j                  g|j                  _        t        d|j                  d       d }~ww xY w)N  Content not found: expired?Tcauseexpected)
r   r   
isinstancer"   r   statusargsresponseurlreasonr   r   es      r   _checked_call_apizIGNBaseIE._checked_call_api   s    		>>$'' 	!''9-!''..C2G ww||  JGG$$((!''..!''..0J$1!# # 	s    	CB>CCc                 F   |d   }g }t        |dt              xs i }t        |j                  d            }|r&|j	                  | j                  ||dddd	             t        |j                  d
            }|r$|j	                  | j                  ||dd             |j                  d      xs g D ]  }t        |j                  d            }	|	s |j                  |	t        |j                  d      d      t        |j                  d            t        |j                  d            t        |j                  d            d        t        |dt              }
|
r |j                  t        |
d      dd|
d       t        |ddddift              }t        |dd       }t        |dt              xs i }t        |ddd d!       }||t        |j                  d"            t        |j                  d#            t        |j                  d$            |||d%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                 *    | j                         xs d S Nstripxs    r   <lambda>z/IGNBaseIE._extract_video_info.<locals>.<lambda>R       AGGI$5 r   metadata	longTitletitlenamec                 *    | j                         xs d S rL   rM   rO   s    r   rQ   z/IGNBaseIE._extract_video_info.<locals>.<lambda>W   rR   r   descriptionpublishDateduration)idrU   rX   	timestamprZ   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   rS   rU   s                  r   _extract_video_infoz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 	
	 %-[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__r   r,   rk    r   r   r   r      s    \
;
r   r   c                       e Zd ZdZdZdZddj                  edz   ef      z  ZdZdZ	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%gZ
ed&        Zd' Zd( Zd) Zy*)+IGNIEz
    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(?:%s)|z(?:[/?&#]|$)zign.comrd   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   rU   rX   r\   upload_daterI   
display_id	thumbnailrZ   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   rU   rX   r\   rv   rI   z404 Not Found)r(   rz   r{   skipzOhttps://www.ign.com/videos/is-a-resident-evil-4-remake-on-the-way-ign-daily-fixr(   only_matchingc           	          t        j                  d|      }t        d fdt        j                  d| j                  z  |r|d   nd      D              S )Nzg(?s)<section\b[^>]+\bclass\s*=\s*['"](?:[\w-]+\s+)*?content-feed-grid(?!\B|-)[^>]+>(.+?)</section[^>]*>c              3   T   K   | ]  }t        |j                  d              ! yw)pathN)r   group).0mr(   s     r   	<genexpr>z,IGNIE._extract_embed_urls.<locals>.<genexpr>   s&      LwsAGGFO4 Ls   %(z0<a\b[^>]+\bhref\s*=\s*('|")(?P<path>/videos%s)\1r    )refindallfilterfinditer_VIDEO_PATH_RE)clsr(   webpagegridss    `  r   _extract_embed_urlszIGNIE._extract_embed_urls   s^    

z dLbkkQ../<Aar?K LM 	Mr   c                     | j                  |      j                  dd      \  }}|r| j                  ||      S | j                  ||xs d      S )Nr[   filtall)_match_valid_urlr   _extract_video_extract_playlist)r   r(   rw   r   s       r   _real_extractzIGNIE._real_extract   sQ    005;;D&I
D&&sJ77%%c4=599r   c                       j                  ||      } j                   fd j                  ||      D        |      S )Nc              3   ^   K   | ]$  }j                  |j                                & y wrL   )
url_resultie_key)r   ur   s     r   r   z*IGNIE._extract_playlist.<locals>.<genexpr>   s*      > __Q. >s   *-)playlist_id)_download_webpageplaylist_resultr   )r   r(   rw   r   s   `   r   r   zIGNIE._extract_playlist   sJ    ((j9##>..sG<>" $ $ 	$r   c                 b    | j                  |      }| j                  |      }t        d|i|      S )Nrw   )r,   rk   r   )r   r(   rw   rd   infos        r   r   zIGNIE._extract_video   s<    &&z2''.*
 	r   N)rl   rm   rn   __doc__r   _PLAYLIST_PATH_REjoin
_VALID_URLIE_NAMEr   _TESTSclassmethodr   r   r   r   ro   r   r   rq   rq   e   s     <N4=
((N_46GH
I	J  GJ L14,A#%1n
 !$
& k14FA#%
   a?"FH M M:$r   rq   c                   ^    e Zd ZdZdddddddd	d
dddd
dgdddddddddddddgZd Zy)
IGNVideoIEzIhttps?://.+?\.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   rU   rX   r\   rv   rw   rx   rZ   rI   zHTTP Error 400: Bad Request)r(   rz   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                 8   | j                  |      }t        j                  j                  |      }t        j                  j	                  |j                  |j                  j                  dd      d   dz               }| j                  ||      \  }}|j                  }t        t        j                  j                  |      j                        j                  dd g      d   }|r$| j                  |t        j                               S | j!                  d|d	d
      }	|	s$||k(  rt#        d|z         | j                  |      S t%        |	      }	|	j                  d      xs d}
| j'                  |
|      d   }
| j)                  |
      }t+        d|i|      S )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{}rd   rw   )	_match_idurllibparseurlparse
urlunparse_replacer   rsplit_download_webpage_handler(   r   queryr_   r   rq   r   _search_regexr   r   _parse_jsonrk   r   )r   r(   re   
parsed_url	embed_urlr   urlhnew_urlign_urlrd   
video_datar   s               r   r   z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   N)rl   rm   rn   r   r   r   ro   r   r   r   r      s    ]Jl14`d#%" D
 <<" `
 U K @7FB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
iddd	ddddddddd
igddidgd d!d"d#dd$dgd%d&dd'd(dd'd)dd'd*dd'd+dd'gZd, Zd- Zy.)/IGNArticleIEzrhttps?://.+?\.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[   rU   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   rU   rX   r\   rv   rI   rx   rw   rZ    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   rU   rX   r\   rv   rZ   rI   rw   rx   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                 J   	 | j                  |      S # t        $ r}t        |j                  t              r|j                  j
                  xsK |j                  j                  j                  |j                  j                  |j                  j                  g|j                  _        |j                  j                  dk(  rt        d|j                  d      |j                  j                  dk(  r)| j                  t        |j                               Y d }~y  d }~ww xY w)Nr   r    Tr!   i  )r   r   r$   r"   r   r&   r'   r(   r%   r)   report_warningr
   r*   s      r   r,   zIGNArticleIE._checked_call_api?  s    	>>$'' 	!''9- ww||  JGG$$((!''..!''..0J77>>S((5QWW!%' ' WW^^s*''(;AGG(DE	s    
D"C:DDD"c                      j                  |       j                        r: fd} j                   |       j                  d      t	        dd             S  j                  |       j                  dd       }|r fd}n/ j                  d	d
d
d       } j                         fd} j                   |       |xs t        j                  dd j                  d            xs d       S )Nc               3   *  K   t        dt              } | r&j                  | t        j	                                j                  d      xs g D ]<  }t        j                  d|      D ]!  }t        |      sj                  |       # > y w)N)mediaRelationsr   mediarS   r(   r0   contentzD(?:\[(?:ignvideo\s+url|youtube\s+clip_id)|<iframe[^>]+src)="([^"]+)")r   r   r   rq   r   r_   r   r   )	media_urlr   	video_urlr   r   s      r   entriesz+IGNArticleIE._real_extract.<locals>.entriesU  s     (N"-/	 //)U\\^DD 'I 6 <" =G%'ZZ0w  zA  &B =	&y1"&//)"<<==s   A7B;B	articleId)rS   headlinec                 *    | j                         xs d S rL   rM   rO   s    r   rQ   z,IGNArticleIE._real_extract.<locals>.<lambda>d  s    AGGI,= r   r0   zdable:item_iddefaultc               3   J  K   t        j                  d      D ]  } j                  d| j                  d      dd      }t	        t        |      j                  d      xs d      }t        |j                  d      xs d gd	         }|ssj                  |        y w)
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   v_urlr   r   s      r   r   z+IGNArticleIE._real_extract.<locals>.entriesk  s     r! 	5A !% 2 2Q); !3 !DI !00B90M0Q0QRY0Z0`^` aI'u)=)G$(LME"ooe44	5s   B	B#B#z,\bdata-post-id\s*=\s*("|')(?P<id>[\da-f]+)\1r[   )r   r   c            
   3     K   t        dddd df      D ]g  } t        dd| j                  dd      ft              r)t        dd| ft              xs i }j                  |d	
      }|sXt	        di|       i y w)NpropsapolloState
ROOT_QUERYc                 $    | j                  d      S )NzvideoPlayerProps()
startswith)k_s     r   rQ   z=IGNArticleIE._real_extract.<locals>.entries.<locals>.<lambda>  s    ALLYlLm r   __refPlayerPropsModernContentr0   Fr   rw   )r   replacer^   rk   r   )playerrd   r   rw   nextjs_datar   s      r   r   z+IGNArticleIE._real_extract.<locals>.entries}  s     *# -?movwy !F $K%,mV^^M[j=k$l268 !(wv6VfjkqoqE33E3GD)(*+! !!s   A*B.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   rw   r   r   s   `   @@@@r   r   zIGNArticleIE._real_extractO  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   N)rl   rm   rn   r   r   r   r,   r   ro   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   compatr   networking.exceptionsr   utilsr   r	   r
   r   r   r   r   r   r   r   r   r   rq   r   r   ro   r   r   <module>r      sc    	  ! $ -   L
 L
^PI Pf; ;|Y_9 Y_r   