a
    ha?                     @   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/)Z_download_json
_PAGE_TYPE)selfslug r   I/mnt/pikpak/tmp/myenv/lib/python3.9/site-packages/yt_dlp/extractor/ign.py	_call_api   s    zIGNBaseIE._call_apic              
   C   s   z|  |W S  ty~ } zZt|jtrh|jjdkrh|jjpR|jjj|jj|jj	g|j_td|jdd W Y d }~n
d }~0 0 d S )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}|rL|| j||ddddd	 t|d
}|rv|| j||ddd |dpg D ]X}t|d}	|	sq||	t|ddt|dt|dt|dd qt |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pHi }t |dd d!d"d d}||t
|d#t|d$t|d%|||d&S )'NZvideoIdrefsexpected_typeZm3uUrlmp4Zm3u8_nativeZhlsF)Zm3u8_idfatalZf4mUrlZhds)Zf4m_idr)   Zassetsr    Zbitratei  Z
frame_rateheightwidth)r    ZtbrZfpsr*   r+   )systemZmezzanineUrlZ	mezzaniner   )extZ	format_idZqualityr    
thumbnails.)tags.ZdisplayNamec                 S   s   |   p
d S Nstripxr   r   r   <lambda>P       z/IGNBaseIE._extract_video_info.<locals>.<lambda>metadataZ	longTitletitlenamec                 S   s   |   p
d S r0   r1   r3   r   r   r   r5   U   r6   descriptionZpublishDateduration)idr8   r:   	timestampr;   r.   formatsr/   )r   dictr   getextendZ_extract_m3u8_formatsZ_extract_f4m_formatsappendr	   r   r   r   )r   videor)   video_idr>   r%   Zm3u8_urlZf4m_urlZassetZ	asset_urlZmezzanine_urlr.   r/   r7   r8   r   r   r   _extract_video_info%   sp    
zIGNBaseIE._extract_video_infoN)T)__name__
__module____qualname__r   r$   rE   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.comrC   z:http://www.ign.com/videos/2013/06/05/the-last-of-us-reviewZ d2e1586d9987d40fad7867bf96a018eaZ 8f862beef863986b2785559b9e1aa599r(   zThe Last of Us Reviewz$md5:c8946d4260a4d43a00d5ae8ed998870ci`DQZ20130605zcount:9zthe-last-of-us-reviewzShttps://assets1.ignimgs.com/vid/thumbnails/user/2014/03/26/lastofusreviewmimig2.jpgi  )
r<   r-   r8   r:   r=   upload_dater/   
display_id	thumbnailr;   ZnocheckcertificateT)r    md5	info_dictparamszYhttp://www.pcmag.com/videos/2015/01/06/010615-whats-new-now-is-gogo-snooping-on-your-dataZ f1581a6fe8c5121be5b807684aeac3f6Z ee10d774b508c9b8ec07e763b9125b91z.What's New Now: Is GoGo Snooping on Your Data?z$md5:817a20299de610bd56f13175386da6fai2TZ20150106zcount:4)r<   r-   r8   r:   r=   rK   r/   z404 Not Found)r    rN   rO   skipzOhttps://www.ign.com/videos/is-a-resident-evil-4-remake-on-the-way-ign-daily-fixr    Zonly_matchingc                    sB   t d|}td  fddt d| j d|r6|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>   r6   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    webpageZgridsr   rW   r   _extract_embed_urls   s    zIGNIE._extract_embed_urlsc                 C   s6   |  |dd\}}|r&| ||S | ||p2dS )Nr<   filtall)Z_match_valid_urlrT   _extract_video_extract_playlist)r   r    rL   rb   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 r0   )
url_resultie_key)rU   ur   r   r   rX      s   z*IGNIE._extract_playlist.<locals>.<genexpr>)playlist_id)_download_webpageplaylist_resultra   )r   r    rL   r`   r   rj   r   re      s    

zIGNIE._extract_playlistc                 C   s"   |  |}| |}td|i|S )NrL   )r$   rE   r
   )r   r    rL   rC   infor   r   r   rd      s    

zIGNIE._extract_videoN)rF   rG   rH   __doc__r^   Z_PLAYLIST_PATH_REformatjoin
_VALID_URLZIE_NAMEr   _TESTSclassmethodra   rf   re   rd   r   r   r   r   rI   c   sX   	$
	rI   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-sZ dd9aca7ed2657c4e118d8b261e5e9de1Z 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 VZ20151012Z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<   r-   r8   r:   r=   rK   rL   rM   r;   r/   zHTTP Error 400: Bad Request)r    rN   rO   expected_warningszNhttp://me.ign.com/ar/angry-birds-2/106533/video/lrd-ldyy-lwl-lfylm-angry-birdsTrR   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 }|r| |t S | jd|d	d
d}	|	s||krtd| | |S t|	}	|	dpd}
| |
|d }
| |
}td|i|S )N/r   r   z/embed)rS   r    z)(<div\b[^>]+\bdata-video-id\s*=\s*[^>]+>)zvideo elementFr)   zRedirect loop: zdata-settingsz{}rC   rL   )	_match_idurllibparseurlparse
urlunparse_replacerS   rsplitZ_download_webpage_handler    parse_qsqueryr@   rg   rI   rh   _search_regexr   r   Z_parse_jsonrE   r
   )r   r    rD   
parsed_urlZ	embed_urlr`   Zurlhnew_urlZign_urlrC   Z
video_datarn   r   r   r   rf      s<    


zIGNVideoIE._real_extractN)rF   rG   rH   rr   rs   rf   r   r   r   r   ru      s<   !ru   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-mindZ72113z3100 Little Things in GTA 5 That Will Blow Your Mind)r<   r8   rO   Z 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7RZ20130916zcount:12zchttps://assets1.ignimgs.com/thumbs/userUploaded/2021/8/16/gta-v-heistsjpg-e94705-1629138553533.jpegzgrand-theft-auto-v-video-reviewi  )
r<   r-   r8   r:   r=   rK   r/   rM   rL   r;   Z 638672ee848ae4ff108df2a296418ee2zGTA 5 In Slow Motionz4The twisted beauty of GTA 5 in stunning slow motion.idRZ20131212   zcount:25zgta-5-in-slow-motionzKhttps://assets1.ignimgs.com/vid/thumbnails/user/2013/11/03/GTA-SLO-MO-1.jpg)
r<   r-   r8   r:   r=   rK   r;   r/   rL   rM   Zskip_downloadTzBackend fetch failed)r    rO   ZplaylistrP   rv   zVhttp://www.ign.com/articles/2014/08/15/rewind-theater-wild-trailer-gamescom-2014?watchZ53ee806780a81ec46e0790f8z+Rewind Theater - Wild Trailer Gamescom 2014r   )r    rO   Zplaylist_countrv   z`http://www.ign.com/articles/2017/06/08/new-ducktales-short-donalds-birthday-doesnt-go-as-plannedrR   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y } zt|jtr|jjpF|jjj|jj|jj	g|j_|jjdkrjtd|jddn*|jjdkr| 
t|j W Y d }~d S  W Y d }~n
d }~0 0 d S )Nr   r   Tr   i  )r   r   r   r   r   r   r   r    r   r!   Zreport_warningstrr"   r   r   r   r$   <  s     zIGNArticleIE._checked_call_apic                    s    |  rJ fdd}|  dt ddd dS |jdd d	}|rzfd
d}n0jdddd d}fdd}| |pt	
ddjdd	pd S )Nc                  3   sb   t  dtd} | r$| t V   dp0g D ]*}td|D ]}t|rB|V  qBq2d S )N)ZmediaRelationsr   Zmediar7   r    r&   contentzD(?:\[(?:ignvideo\s+url|youtube\s+clip_id)|<iframe[^>]+src)="([^"]+)")r   r   rg   rI   rh   r@   rZ   r[   )Z	media_urlr   Z	video_url)r   r   r   r   entriesR  s    z+IGNArticleIE._real_extract.<locals>.entriesZ	articleId)r7   Zheadlinec                 S   s   |   p
d S r0   r1   r3   r   r   r   r5   a  r6   z,IGNArticleIE._real_extract.<locals>.<lambda>r&   zdable:item_iddefaultc                  3   sp   t dD ]^}  jd| dddd}tjt|dp>d}t	|dpRd gd	 }|r 
|V  qd S )
NzS(?s)<object\b[^>]+\bclass\s*=\s*("|')ign-videoplayer\1[^>]*>(?P<params>.+?)</objectz2(<param\b[^>]+\bname\s*=\s*("|')flashvars\2[^>]*>)rP   	flashvarsrY   r   valuer    rx   )rZ   r]   r   rT   r{   r|   r   r   r@   r   rg   )rV   r   Zv_url)r   r`   r   r   r   h  s    z,\bdata-post-id\s*=\s*("|')(?P<id>[\da-f]+)\1r<   )rT   r   c               	   3   sz   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	pPi }j|d
d}|rtd i|V  qd S )NpropsZapolloStateZ
ROOT_QUERYc                 S   s
   |  dS )NzvideoPlayerProps()
startswith)k_r   r   r   r5   }  r6   z=IGNArticleIE._real_extract.<locals>.entries.<locals>.<lambda>Z__refZPlayerPropsZModernContentr&   Fry   rL   )r   replacer?   rE   r
   )ZplayerrC   rn   )rL   nextjs_datar   r   r   r   z  s"    z\s+-\s+IGN\s*$rY   )rz   r$   rm   r@   r   rl   Z_html_search_metar   Z_search_nextjs_datarZ   subZ_og_search_title)r   r    r   rk   r   )r   rL   r   r   r`   r   rf   L  s2    


zIGNArticleIE._real_extractN)rF   rG   rH   rr   r   rs   r$   rf   r   r   r   r   r      s|   )
Fr   )rZ   urllib.parser{   commonr   Znetworking.exceptionsr   utilsr   r   r   r	   r
   r   r   r   r   r   r   rI   ru   r   r   r   r   r   <module>   s   0OR>