o
    ia?                     @   s   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 deZG d	d
 d
eZG dd deZG dd deZdS )    N   )InfoExtractor   )	HTTPError)
ExtractorErrordetermine_extextract_attributesint_or_nonemerge_dictsparse_iso8601strip_or_nonetraverse_objurl_or_noneurljoinc                   @   s&   e Zd Zdd Zdd Zd	ddZdS )
	IGNBaseIEc                 C   s"   |  d| j d| j d| |S )Nzhttp://apis.ign.com/z/v3/zs/slug/)_download_json
_PAGE_TYPE)selfslug r   H/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/ign.py	_call_api   s   zIGNBaseIE._call_apic              
   C   st   z|  |W S  ty9 } z't|jtr4|jjdkr4|jjp)|jjj|jj|jj	g|j_td|jdd d }~ww )N  Content not found: expired?Tcauseexpected)
r   r   
isinstancer   r   statusargsresponseurlreasonr   r   er   r   r   _checked_call_api   s   zIGNBaseIE._checked_call_apiTc                 C   s  |d }g }t |dtdpi }t|d}|r&|| j||ddddd	 t|d
}|r;|| j||ddd |dpAg D ],}t|d}	|	sNqB||	t|ddt|dt|dt|dd qBt |dtd}
|
r|t	|
ddd|
d t |ddddiftd}t |ddd d}t |dtdpi }t |dd d!d"d d}||t
|d#t|d$t|d%|||d&S )'NvideoIdrefsexpected_typem3uUrlmp4m3u8_nativehlsF)m3u8_idfatalf4mUrlhds)f4m_idr/   assetsr!   bitratei  
frame_rateheightwidth)r!   tbrfpsr6   r7   )systemmezzanineUrl	mezzaniner   )ext	format_idqualityr!   
thumbnails.)tags.displayNamec                 S      |   pd S Nstripxr   r   r   <lambda>P       z/IGNBaseIE._extract_video_info.<locals>.<lambda>metadata	longTitletitlenamec                 S   rC   rD   rE   rG   r   r   r   rI   U   rJ   descriptionpublishDateduration)idrM   rO   	timestamprQ   r@   formatsrA   )r   dictr   getextend_extract_m3u8_formats_extract_f4m_formatsappendr	   r   r   r   )r   videor/   video_idrT   r'   m3u8_urlf4m_urlasset	asset_urlmezzanine_urlr@   rA   rK   rM   r   r   r   _extract_video_info%   sp   
zIGNBaseIE._extract_video_infoN)T)__name__
__module____qualname__r   r%   rb   r   r   r   r   r      s    r   c                   @   s   e Zd ZdZdZdZdded 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&d' Zd(d) Zd*d+ Zd,d- Zd.S )/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.comr[   z:http://www.ign.com/videos/2013/06/05/the-last-of-us-review d2e1586d9987d40fad7867bf96a018ea 8f862beef863986b2785559b9e1aa599r+   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  )
rR   r=   rM   rO   rS   upload_daterA   
display_id	thumbnailrQ   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)rR   r=   rM   rO   rS   rk   rA   z404 Not Found)r!   ro   rp   skipzOhttps://www.ign.com/videos/is-a-resident-evil-4-remake-on-the-way-ign-daily-fixr!   only_matchingc                    sB   t d|}td  fddt 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   s     | ]}t  |d V  qdS )pathN)r   group).0mr!   r   r   	<genexpr>   s    z,IGNIE._extract_embed_urls.<locals>.<genexpr>z+<a\b[^>]+\bhref\s*=\s*('|")(?P<path>/videosz)\1r    )refindallfilterfinditer_VIDEO_PATH_RE)clsr!   webpagegridsr   r|   r   _extract_embed_urls   s   zIGNIE._extract_embed_urlsc                 C   s6   |  |dd\}}|r| ||S | ||pdS )NrR   filtall)_match_valid_urlry   _extract_video_extract_playlist)r   r!   rl   r   r   r   r   _real_extract   s   zIGNIE._real_extractc                    s0     ||} j fdd ||D |dS )Nc                 3   s     | ]}  |  V  qd S rD   )
url_resultie_key)rz   ur   r   r   r}      s    z*IGNIE._extract_playlist.<locals>.<genexpr>)playlist_id)_download_webpageplaylist_resultr   )r   r!   rl   r   r   r   r   r      s   

zIGNIE._extract_playlistc                 C   s"   |  |}| |}td|i|S )Nrl   )r%   rb   r
   )r   r!   rl   r[   infor   r   r   r      s   

zIGNIE._extract_videoN)rc   rd   re   __doc__r   _PLAYLIST_PATH_REformatjoin
_VALID_URLIE_NAMEr   _TESTSclassmethodr   r   r   r   r   r   r   r   rf   c   sZ    	$
	rf   c                   @   s`   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d ZdS )
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 e9be7ea899a9bbfc0674accc22a36cc8r+   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)
rR   r=   rM   rO   rS   rk   rl   rm   rQ   rA   zHTTP Error 400: Bad Request)r!   ro   rp   expected_warningszNhttp://me.ign.com/ar/angry-birds-2/106533/video/lrd-ldyy-lwl-lfylm-angry-birdsTrv   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                 C   s   |  |}tj|}tj|j|jddd d d}| ||\}}|j	}tj
tj|jdd gd }|rE| |t S | jd|d	d
d}	|	s_||krZtd| | |S t|	}	|	dpid}
| |
|d }
| |
}td|i|S )N/r   r   z/embed)rx   r!   z)(<div\b[^>]+\bdata-video-id\s*=\s*[^>]+>)zvideo elementFr/   zRedirect loop: zdata-settingsz{}r[   rl   )	_match_idurllibparseurlparse
urlunparse_replacerx   rsplit_download_webpage_handler!   parse_qsqueryrV   r   rf   r   _search_regexr   r   _parse_jsonrb   r
   )r   r!   r\   
parsed_url	embed_urlr   urlhnew_urlign_urlr[   
video_datar   r   r   r   r      s8   


zIGNVideoIE._real_extractN)rc   rd   re   r   r   r   r   r   r   r   r      s>    !r   c                   @   s   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,d- Zd.d/ Zd0S )1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)rR   rM   rp    5ebbd138523268b93c9141af17bec937r+   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  )
rR   r=   rM   rO   rS   rk   rA   rm   rl   rQ    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)
rR   r=   rM   rO   rS   rk   rQ   rA   rl   rm   skip_downloadTzBackend fetch failed)r!   rp   playlistrq   r   zVhttp://www.ign.com/articles/2014/08/15/rewind-theater-wild-trailer-gamescom-2014?watch53ee806780a81ec46e0790f8z+Rewind Theater - Wild Trailer Gamescom 2014r   )r!   rp   playlist_countr   z`http://www.ign.com/articles/2017/06/08/new-ducktales-short-donalds-birthday-doesnt-go-as-plannedrv   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              
   C   s   z|  |W S  tyN } z<t|jtrI|jjp#|jjj|jj|jj	g|j_|jjdkr4td|jdd|jjdkrI| 
t|j W Y d }~d S  d }~ww )Nr   r   Tr   i  )r   r   r   r   r   r   r    r!   r   r"   report_warningstrr#   r   r   r   r%   <  s$   zIGNArticleIE._checked_call_apic                    s    |  r% fdd}|  dt ddd dS |jdd d	}|r=fd
d}njdddd d}fdd}| |p\t	
ddjdd	pid S )Nc                  3   sd    t  dtd} | r| t V   dpg D ]}td|D ]}t|r.|V  q"qd S )N)mediaRelationsr   mediarK   r!   r(   contentzD(?:\[(?:ignvideo\s+url|youtube\s+clip_id)|<iframe[^>]+src)="([^"]+)")r   r   r   rf   r   rV   r   r   )	media_urlr   	video_url)r   r   r   r   entriesR  s   z+IGNArticleIE._real_extract.<locals>.entries	articleId)rK   headlinec                 S   rC   rD   rE   rG   r   r   r   rI   a  rJ   z,IGNArticleIE._real_extract.<locals>.<lambda>r(   zdable:item_iddefaultc                  3   sr    t dD ]/}  jd| dddd}tjt|dp d}t	|dp*d gd	 }|r6 
|V  qd S )
NzS(?s)<object\b[^>]+\bclass\s*=\s*("|')ign-videoplayer\1[^>]*>(?P<params>.+?)</objectz2(<param\b[^>]+\bname\s*=\s*("|')flashvars\2[^>]*>)rq   	flashvarsr~   r   valuer!   r   )r   r   r   ry   r   r   r   r   rV   r   r   )r{   r   v_url)r   r   r   r   r   h  s   z,\bdata-post-id\s*=\s*("|')(?P<id>[\da-f]+)\1rR   )ry   r   c               	   3   s|    t ddddd dfD ].} t dd| ddftd	rqt dd| ftd	p)i }j|d
d}|r;td i|V  qd S )NpropsapolloState
ROOT_QUERYc                 S   s
   |  dS )NzvideoPlayerProps()
startswith)k_r   r   r   rI   }  s   
 z=IGNArticleIE._real_extract.<locals>.entries.<locals>.<lambda>__refPlayerPropsModernContentr(   Fr   rl   )r   replacerU   rb   r
   )playerr[   r   )rl   nextjs_datar   r   r   r   z  s(   z\s+-\s+IGN\s*$r~   )r   r%   r   rV   r   r   _html_search_metar   _search_nextjs_datar   sub_og_search_title)r   r!   r   r   r   )r   rl   r   r   r   r   r   L  s2   


zIGNArticleIE._real_extractN)rc   rd   re   r   r   r   r%   r   r   r   r   r   r      s~    )
Fr   )r   urllib.parser   commonr   networking.exceptionsr   utilsr   r   r   r	   r
   r   r   r   r   r   r   rf   r   r   r   r   r   r   <module>   s    0OR>