
    VGha?                         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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   )	HTTPError)
ExtractorErrordetermine_ext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                 `    | j                  d| j                   d| j                   d| |      S )Nzhttp://apis.ign.com/z/v3/zs/slug/)_download_json
_PAGE_TYPE)selfslugs     ]/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/ign.py	_call_apizIGNBaseIE._call_api   s;    """4??"347HPTvVX\^ 	^    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_idr4   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>P       AGGI$5 r   metadata	longTitletitlenamec                 *    | j                         xs d S rI   rJ   rL   s    r   rN   z/IGNBaseIE._extract_video_info.<locals>.<lambda>U   rO   r   descriptionpublishDateduration)idrR   rU   	timestamprW   rE   formatsrF   )r   dictr   getextend_extract_m3u8_formats_extract_f4m_formatsappendr
   r   r   r   )r   videor4   video_idrZ   r,   m3u8_urlf4m_urlasset	asset_urlmezzanine_urlrE   rF   rP   rR   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)   rh    r   r   r   r      s    ^
;
r   r   c                       e Zd ZdZdZdZdj                  dj                  edz   ef            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(?:{})|z(?:[/?&#]|$)zign.comra   z:http://www.ign.com/videos/2013/06/05/the-last-of-us-review d2e1586d9987d40fad7867bf96a018ea 8f862beef863986b2785559b9e1aa599r0   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  )
rX   rB   rR   rU   rY   upload_daterF   
display_id	thumbnailrW   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)rX   rB   rR   rU   rY   rs   rF   z404 Not Found)r%   rw   rx   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                   d|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$      ,Q73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_urlszIGNIE._extract_embed_urls   s]    

z  ,"++@ASAS@TTWZ!ar;+ ,- 	-r   c                     | j                  |      j                  dd      \  }}|r| j                  ||      S | j                  ||xs d      S )NrX   filtall)_match_valid_urlr   _extract_video_extract_playlist)r   r%   rt   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rI   )
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%   rt   r   s   `   r   r   zIGNIE._extract_playlist   sJ    ((j9##>..sG<>" $ $ 	$r   c                 b    | j                  |      }| j                  |      }t        d|i|      S )Nrt   )r)   rh   r   )r   r%   rt   ra   infos        r   r   zIGNIE._extract_video   s<    &&z2''.*
 	r   N)ri   rj   rk   __doc__r   _PLAYLIST_PATH_REformatjoin
_VALID_URLIE_NAMEr   _TESTSclassmethodr   r   r   r   rl   r   r   rn   rn   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   rn   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 e9be7ea899a9bbfc0674accc22a36cc8r0   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)
rX   rB   rR   rU   rY   rs   rt   ru   rW   rF   zHTTP Error 400: Bad Request)r%   rw   rx   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                 `   | j                  |      }t        j                  j                  |      }t        j                  j	                  |j                  |j                  j                  dd      d   dz               }| j                  ||      \  }}|j                  }t        j                  j                  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r4   zRedirect loop: zdata-settingsz{}ra   rt   )	_match_idurllibparseurlparse
urlunparse_replacer   rsplit_download_webpage_handler%   parse_qsqueryr\   r   rn   r   _search_regexr   r	   _parse_jsonrh   r   )r   r%   rb   
parsed_url	embed_urlr   urlhnew_urlign_urlra   
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)ri   rj   rk   r   r   r   rl   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)rX   rR   rx    5ebbd138523268b93c9141af17bec937r0   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  )
rX   rB   rR   rU   rY   rs   rF   ru   rt   rW    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)
rX   rB   rR   rU   rY   rs   rW   rF   rt   ru   skip_downloadTzBackend fetch failed)r%   rx   playlistry   r   zVhttp://www.ign.com/articles/2014/08/15/rewind-theater-wild-trailer-gamescom-2014?watch53ee806780a81ec46e0790f8z+Rewind Theater - Wild Trailer Gamescom 2014r   )r%   rx   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_warningstrr'   s      r   r)   zIGNArticleIE._checked_call_api<  s    	>>$'' 	!''9- ww||  JGG$$((!''..!''..0J77>>S((5QWW!%' ' WW^^s*''AGG5	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   mediarP   r%   r-   contentzD(?:\[(?:ignvideo\s+url|youtube\s+clip_id)|<iframe[^>]+src)="([^"]+)")r   r   r   rn   r   r\   r   r   )	media_urlr   	video_urlr   r   s      r   entriesz+IGNArticleIE._real_extract.<locals>.entriesR  s     (N"-/	 //)U\\^DD 'I 6 <" =G%'ZZ0w  zA  &B =	&y1"&//)"<<==s   A7B;B	articleId)rP   headlinec                 *    | j                         xs d S rI   rJ   rL   s    r   rN   z,IGNArticleIE._real_extract.<locals>.<lambda>a  s    AGGI,= r   r-   zdable:item_iddefaultc               3   r  K   t        j                  d      D ]  } j                  d| j                  d      dd      }t        j
                  j                  t        |      j                  d      xs d      }t        |j                  d      xs d gd	         }|sj                  |        y w)
NzS(?s)<object\b[^>]+\bclass\s*=\s*("|')ign-videoplayer\1[^>]*>(?P<params>.+?)</objectz2(<param\b[^>]+\bname\s*=\s*("|')flashvars\2[^>]*>)ry   	flashvarsr   r   valuer%   r   )r   r   r   r   r   r   r   r	   r\   r   r   )r   r   v_urlr   r   s      r   r   z+IGNArticleIE._real_extract.<locals>.entriesh  s     r! 	5A !% 2 2Q); !3 !DI !' 5 56H6S6W6WX_6`6fdf gI'u)=)G$(LME"ooe44	5s   BB7!B7z,\bdata-post-id\s*=\s*("|')(?P<id>[\da-f]+)\1rX   )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   rN   z=IGNArticleIE._real_extract.<locals>.entries.<locals>.<lambda>}  s    ALLYlLm r   __refPlayerPropsModernContentr-   Fr   rt   )r   replacer[   rh   r   )playerra   r   rt   nextjs_datar   s      r   r   z+IGNArticleIE._real_extract.<locals>.entriesz  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   rt   r   r   s   `   @@@@r   r   z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   N)ri   rj   rk   r   r   r   r)   r   rl   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   rn   r   r   rl   r   r   <module>r      s[    	  ! -  L
 L
^OI Od; ;|Y_9 Y_r   