a
    h*                     @   s   d dl Z d dlZd dlZ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 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mZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ dd	l%m&Z& G d
d de
Z'G dd deZ(G dd de(Z)dS )    N   )AdobePassIE)InfoExtractor   )compat_etree_fromstring)	HTTPError)ExtractorErrorUnsupportedError
clean_htmldict_getextract_attributesfind_xpath_attrfix_xml_ampersandsfloat_or_noneint_or_nonejoin_nonempty
js_to_jsonmimetype2extparse_iso8601parse_qssmuggle_urlstr_or_nonetry_getunescapeHTMLunsmuggle_urlupdate_url_queryurl_or_none)traverse_objc                   @   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ddddddddddddddd d!d"d#d$d%d&d'dd(d)d*d+d,dd-d.dd/d0d/d1d2d3dd,dd4d5d6d7d8d9d:d;d<d=d>d?d9d:d@dAdBgZdCdDddEdFdGd+dHdAidIdJdKdLddMdNdGdOdPdQdRdHdAidSdJdTdUdVddWdXdYdZd[d\d]d^dd_d_d`d+dadHdAidbdcdddeddfdgdhdidjdkdRdId\dldmddndndodpdQdqddHdAidrdJdsdtdud>dvdwdAdxdSdydzd{dd|d|d}d~dSddddddddddddHdAidIdJddddddddddHdAiddJg
Zedd Zedd Z	edd Z
edd Zedd Zdd Zdd ZdS )BrightcoveLegacyIEzbrightcove:legacyzN(?:https?://.*brightcove\.com/(services|viewer).*?\?|brightcove:)(?P<query>.*)z~http://c.brightcove.com/services/viewer/htmlFederated?playerID=1654948606001&flashID=myExperience&%40videoPlayer=2371591881001Z 5423e113865d26e40624dce2e4b45d95z4Test Brightcove downloads and detection in GenericIEZ2371591881001mp4u]   Xavier Sala i Martín: “Un banc que no presta és un banc zombi que no serveix per a res”Z8TVz$md5:a950cc4285c43e44d763d036710cd9cdiHQZ20130510Z1589608506001)idexttitleuploaderdescription	timestampupload_dateuploader_idz4The player has been deactivated by the content owner)urlmd5Znote	info_dictskipzzhttp://c.brightcove.com/services/viewer/htmlFederated?playerID=1217746023001&flashID=myPlayer&%40videoPlayer=1785452137001Z1785452137001Zflvz5JVMLS 2012: Arrays 2.0 - Opportunities and Challengesz<John Rose speaks at the JVM Language Summit, August 1, 2012.ZOraclei*PZ20120814Z
1460825906)r    r!   r"   r$   r#   r%   r&   r'   zvideo not playabler(   r*   r+   zhttp://c.brightcove.com/services/viewer/federated_f9?&playerID=1265504713001&publisherID=AQ%7E%7E%2CAAABBzUwv1E%7E%2CxP-xFHVUstiMFlNYfvF4G9yFnNaqCw_9&videoID=2750934548001Z2750934548001z+This Bracelet Acts as a Personal Thermostatz$md5:547b78c64f4112766ccf4e151c20b6a0iH`RZ20131017Z1130468786001r    r!   r"   r$   r%   r&   r'   )r(   r*   zhttp://link.brightcove.com/services/player/bcpid756015033001?bckey=AQ~~,AAAApYJi_Ck~,GxhXCegT1Dp39ilhXuxMJxasUhVNZiil&bctid=2878862109001Z2878862109001zLost in Motion IIz$md5:363109c02998fee92ec02211bd8000dfzNational Ballet of Canada)r    r!   r"   r$   r#   z
Video gonea  http://c.brightcove.com/services/viewer/htmlFederated?%40videoPlayer=ref%3Aevent-stream-356&linkBaseURL=http%3A%2F%2Fwww.redbull.com%2Fen%2Fbike%2Fvideos%2F1331655630249%2Freplay-uci-fort-william-2014-dh&playerKey=AQ%7E%7E%2CAAAApYJ7UqE%7E%2Cxqr_zXk0I-zzNndy8NlHogrCb5QdyZRf&playerID=1398061561001#__youtubedl_smuggle=%7B%22Referer%22%3A+%22http%3A%2F%2Fwww.redbull.com%2Fen%2Fbike%2Fstories%2F1331655643987%2Freplay-uci-dh-world-cup-2014-from-fort-william%22%7DZ3750436379001z:UCI MTB World Cup 2014: Fort William, UK - Downhill FinalszRBTV Old (do not use)iSZ20140827Z710858724001zhttp://c.brightcove.com/services/viewer/htmlFederated?playerID=3550052898001&playerKey=AQ%7E%7E%2CAAABmA9XpXk%7E%2C-Kp7jNgisre1fG5OdqpAFUTcs0lP_ZoLZSealifeZ3550319591001)r"   r       zUnsupported URL)r(   r*   Zplaylist_mincountr+   zhttp://c.brightcove.com/services/json/experience/runtime/?command=get_programming_for_experience&playerKey=AQ%7E%7E,AAABXlLMdok%7E,NJ4EoMlZ4rZdx9eU1rkMVd8EaYPBBUlgZ1522758701001z	Lesson 08r    r"   
   zhttps://link.brightcove.com/services/player/bcpid1722935254001/?bctid=5360463607001&autoStart=false&secureConnections=true&width=650&height=350Tr(   only_matchingz\http://www.bfmtv.com/video/bfmbusiness/cours-bourse/cours-bourse-l-analyse-technique-154522/Z2765128793001u*   Le cours de bourse : l’analyse techniquez$md5:7e9ad046e968cb2d1114004aba466fd9zBFM BUSINESSskip_download404 Not Found)r(   r*   paramsr+   zGhttp://bfmbusiness.bfmtv.com/mediaplayer/chroniques/olivier-delamarche/Z5255628253001z$md5:37c519b1128915607601e75a87995fc0z$md5:37f7f888b434bb8f8cc8dbd4f7a4cf26Z876450612001ikYXZ20161220)r    r!   r"   r$   r#   r'   r%   r&   zRedirects, page gonezhttp://bcove.me/i6nfkrc3Z 0ba9446db037002366bab3b3eb30c88cZ3101154703001zStill no powerzthestar.comzMississauga resident David Farmer is still out of power as a result of the ice storm a month ago. To keep the house warm, Farmer cuts wood from his property for a wood burning stove downstairs.)r    r!   r"   r#   r$   z
video goner(   r)   r*   r+   zMhttp://www.kijk.nl/sbs6/leermijvrouwenkennen/videos/jqMiXKAYan2S/aflevering-1Z3866516442001z%Leer mij vrouwen kennen: Aflevering 1zSBS Broadcastingz(Restricted to Netherlands, 404 Not Found)r(   r*   r+   r5   z5http://www.un.org/chinese/News/story.asp?NewsID=27724Z 36d74ef5e37c8b4a2ce92880d208b968Z5360463607001uS   叙利亚失明儿童在废墟上演唱《心跳》  呼吁获得正常童年生活u  联合国儿童基金会中东和北非区域大使、作曲家扎德·迪拉尼（Zade Dirani）在3月15日叙利亚冲突爆发7周年纪念日之际发布了为叙利亚谱写的歌曲《心跳》（HEARTBEAT），为受到六年冲突影响的叙利亚儿童发出强烈呐喊，呼吁世界做出共同努力，使叙利亚儿童重新获得享有正常童年生活的权利。zUnited NationsZ1362235914001i!fXZ20170315z"http://www8.hp.com/cn/zh/home.htmlZ5255815316001zSprocket Video - ChinazHP-Video GalleryiYXZ1107601872001zvideo rotates...weekly?zdhttp://www.newyorker.com/online/blogs/newsdesk/2014/01/always-never-nuclear-command-and-control.htmlzalways-neverzAlways / Never - The New Yorker   F)Zextract_flatr3   )r(   r*   playlist_countr5   r+   zIhttp://www.geekandsundry.com/tabletop-bonus-wils-final-thoughts-on-dread/Z4238694884001zTabletop: Dread, Last Thoughtsi  )r    r!   r"   r$   durationz;https://dl.dropboxusercontent.com/u/29092637/interview.htmlZ4785848093001zThe Cardinal Pell InterviewzSky News Contributor Andrew Bolt interviews George Pell in Rome, following the Cardinal's evidence before the Royal Commission into Child Abuse. z!GlobeCast Australia - GlobeStreamZ2733773828001Z20160304iRVr    r!   r"   r$   r#   r'   r&   r%   zthttp://www.stack.com/video/3167554373001/learn-to-hit-open-three-pointers-with-damian-lillard-s-baseline-drift-drillZ3167554373001zKLearn to Hit Open Three-Pointers With Damian Lillard's Baseline Drift Drillz$md5:57bacb0e0f29349de4972bfda3191713Z
1079349493Z20140207iWR)r    r!   r"   r$   r'   r&   r%   z410 Gonec           
         s  t ddd |}|dd}t dd|}t|}zt| W n tjjj	y^   Y dS 0 t
d	d
d}|durtdd tj|jd  D ni jdd}t|  fdd}i }|dp|d}|du rtd||d< |d}|dur||d< |dp0|dp0|dp0|d}|dur~t|trP|d }| }t d|sv|dsvdS ||d< |d}	|	dur|	|d< | |S )z
        Build a Brightcove url from a xml string containing
        <object class="BrightcoveExperience">{params}</object>
        z&(<param(?:\s+[a-zA-Z0-9_]+="[^"]*")*)>c                 S   s   |  dd S )Nr   z/>group)m r>   P/mnt/pikpak/tmp/myenv/lib/python3.9/site-packages/yt_dlp/extractor/brightcove.py<lambda>5      z:BrightcoveLegacyIE._build_brightcove_url.<locals>.<lambda>z<--z<!--z(<object[^>]*)(xmlns=".*?")z\1N./paramnameZ	flashVarsc                 s   s   | ]\}}||d  fV  qdS )r   Nr>   ).0kvr>   r>   r?   	<genexpr>C  s   z;BrightcoveLegacyIE._build_brightcove_url.<locals>.<genexpr>valuedata c                    s:   | v r|  S t dd| }|d ur0|jd S  | S )NrB   rC   rH   )r   attribget)rC   nodeZdata_url_paramsZ	flashvarsZ
object_docr>   r?   
find_paramL  s    
z<BrightcoveLegacyIE._build_brightcove_url.<locals>.find_paramplayerIDZplayerIdzCannot find player ID	playerKey@videoPlayervideoIdZvideoIDz
@videoListr   zT^(?:\d+|[\da-fA-F]{8}-?[\da-fA-F]{4}-?[\da-fA-F]{4}-?[\da-fA-F]{4}-?[\da-fA-F]{12})$zref:linkBaseURL)resubreplacer   r   encodexmletreeElementTree
ParseErrorr   dicturllibparser   rK   itemsrL   r   
isinstanceliststripmatch
startswith_make_brightcove_url)
clsZ
object_strZfv_elZdata_urlrO   r5   	player_id
player_keyvideo_playerZ	link_baser>   rN   r?   _build_brightcove_url,  sX    

&

z(BrightcoveLegacyIE._build_brightcove_urlc                 C   s"   t d|}|r| | S d S )Nar  (?x)customBC\.createVideo\(
                .*?                                                  # skipping width and height
                ["\'](?P<playerID>\d+)["\']\s*,\s*                   # playerID
                ["\'](?P<playerKey>AQ[^"\']{48})[^"\']*["\']\s*,\s*  # playerKey begins with AQ and is 50 characters
                                                                     # in length, however it's appended to itself
                                                                     # in places, so truncate
                ["\'](?P<videoID>\d+)["\']                           # @videoPlayer
            )rU   searchrf   	groupdict)rg   Z	object_jsr=   r>   r>   r?   _build_brightcove_url_from_jsr  s    	z0BrightcoveLegacyIE._build_brightcove_url_from_jsc                 C   s
   t d|S )Nz6https://c.brightcove.com/services/viewer/htmlFederated)r   )rg   r5   r>   r>   r?   rf     s    z'BrightcoveLegacyIE._make_brightcove_urlc                 C   s   |  |}|r|d S dS )zfTry to extract the brightcove url from the webpage, returns None
        if it can't be found
        r   N)_extract_brightcove_urls)rg   webpageurlsr>   r>   r?   _extract_brightcove_url  s    
z*BrightcoveLegacyIE._extract_brightcove_urlc                    s   t d|}|r<t|d}d|v s6d|v s6d|v r<|gS t d|}|rhttd fdd	|D S t d
|}|rttd fdd	|D S dd	 t d|D S )z6Return a list of all Brightcove URLs from the webpage z(?x)
                <meta\s+
                    (?:property|itemprop)=([\'"])(?:og:video|embedURL)\1[^>]+
                    content=([\'"])(?P<url>https?://(?:secure|c)\.brightcove.com/(?:(?!\2).)+)\2
            r(   rQ   rS   ZidVideoz(?sx)<object
            (?:
                [^>]+?class=[\'"][^>]*?BrightcoveExperience.*?[\'"] |
                [^>]*?>\s*<param\s+name="movie"\s+value="https?://[^/]*brightcove\.com/
            ).+?>\s*</object>Nc                    s   g | ]}  |qS r>   )rk   )rD   r=   rg   r>   r?   
<listcomp>  rA   z?BrightcoveLegacyIE._extract_brightcove_urls.<locals>.<listcomp>z(customBC\.createVideo\(.+?\);)c                    s   g | ]}  |qS r>   )rn   )rD   Z	custom_bcrs   r>   r?   rt     s   c                 S   s   g | ]\}}|qS r>   r>   )rD   _srcr>   r>   r?   rt     rA   zW<iframe[^>]+src=([\'"])((?:https?:)?//link\.brightcove\.com/services/player/(?!\1).+)\1)rU   rl   r   r<   findallrb   filter)rg   rp   Zurl_mr(   matchesr>   rs   r?   ro     s,    

z+BrightcoveLegacyIE._extract_brightcove_urlsc                 c   s0   |  |}|D ]}| t|d|itV  qd S )NReferer)ro   
url_resultr   r   selfr(   rp   Zbc_urlsbc_urlr>   r>   r?   _extract_from_webpage  s    
z(BrightcoveLegacyIE._extract_from_webpagec                 C   s  t |i \}}tdd|}tdd|}| |}|d}tj|}|d}|r|dd gd pv|d	|}|d }d
|vrt	d|}|d ur|dg|d
< |d}	|	r|	d 
 r|	d }	|	s|d}
|
rd|
d v r|
d }
nb|d
}|rZ|d 
 rZi }|r(||d	< | jd|d  ||dd}|rZ| jd|ddd}
|
r|
dd dd}tdt|d }	|	rd|	 d| }|rt|d|i}| |t |S t|d S )Nz$(?<=[?&])(videoI(d|D)|idVideo|bctid)z%40videoPlayerz(?<=[?&])bckeyrQ   queryrR   rT   r   rz   rP   z/bcpid(\d+)r   ZpublisherId,z1https://link.brightcove.com/services/player/bcpidF)headersfatalz.<param\s+name="playerKey"\s+value="([\w~,-]+)"z
player keyr   ~=z>Qhttps://players.brightcove.net/z$/default_default/index.html?videoId=referrer)r   rU   rV   _match_valid_urlr<   r^   r_   r   rL   rl   isdigit_download_webpage_search_regexsplitrW   structunpackbase64urlsafe_b64decoder   r{   BrightcoveNewIEZie_keyr	   )r}   r(   smuggled_dataZmobjZ	query_strr   rj   Zreferervideo_idZpublisher_idri   rh   r   Zplayer_pageZ
enc_pub_idZbrightcove_new_urlr>   r>   r?   _real_extract  sX    







z BrightcoveLegacyIE._real_extractN)__name__
__module____qualname__IE_NAME
_VALID_URL_TESTS_WEBPAGE_TESTSclassmethodrk   rn   rf   rr   ro   r   r   r>   r>   r>   r?   r   %   s  


n

  
E



"r   c                   @   s   e Zd Zi fddZdS )BrightcoveNewBaseIEc                    s  g i  }}| dpg }|D ]}| d}t| d}	| d}
|	dksT|dkr|
sZq| j|
|ddd	d
d\}}| ||}nX|	dkr|
sq| j|
|dd
d\}}| ||}n$| d}| d| d }}|
s|s|r|sqt| ddt| d t| d}t| d||	p2| d}|dkr\ dkr\|ddi n|| | dd  fdd}|
s|r||
p|||
rdnd |
rdnd!d" n||||d#d$ |g}|d%ks| d&s|	d'kr|D ]}d(|d)< q |	| q|sd| d*}|rd|d }| j
| d+p\| d,p\|d- d(d. |d/d  |D ]}|d0i | qt| d1g D ]p}| d2d3krqt| d}|sʐqt| d4pt| d5pd6 }||g d7|i qd
}t| d8d}|d ur8|dkr8d(}g d9}t|d:rbfd;d<|D nd }||||||d=t|d>thfd?thfd@dAthtttfdBthfdCthfdDS )ENsources	containertyperv   Zm3u8ZM2TSr   Zm3u8_nativeZhlsF)Zm3u8_idr   ZmpdZdashr   streaming_srcstream_nameapp_nameZavg_bitratei  heightwidthsize)tbrfilesizer   r!   r   vcodecnonecodec)r   r   r   c                    s$   t | ot d o   dS )NrE   p)r   int)kind)r   r   r>   r?   build_format_id  s    zGBrightcoveNewBaseIE._parse_brightcove_metadata.<locals>.build_format_idhttpzhttp-streaming)r(   	format_idZsource_preferenceZrtmp)r(   Z	play_pathr   ZWVMZkey_systemsZismTZhas_drmerrorsmessageerror_subcode
error_codeexpectedAuthorizationZhttp_headersZtext_tracksr   ZcaptionsZsrclanglabelenr(   r9   )	)   Z   )i@     )i    )i  ih  )   i  )i   i@  )i   r   )iV  r   )i  i8  )Zposter	thumbnailc                    s0   g | ](\}}t d | d|  ||dqS )z\d+x\d+x)r(   r   r   )rU   rV   )rD   wh)thumb_base_urlr>   r?   rt   Q  s
   zBBrightcoveNewBaseIE._parse_brightcove_metadata.<locals>.<listcomp>)r    
thumbnailsr9   formats	subtitlesis_liverC   r$   tags.Zpublished_at
account_id)r"   r$   r   r%   r'   )rL   r   Z#_extract_m3u8_formats_and_subtitlesZ_merge_subtitlesZ"_extract_mpd_formats_and_subtitlesr   r   lowerupdateextendZraise_no_formatspop
setdefaultr   r   appendr   r   r
   strrx   allr   )r}   	json_datar   r   r   r   r   sourcer   r!   rv   Zfmtssubsr   r   r   r   fr   r   errorZ
text_trackZtext_track_urllangr   r9   Z
common_resr   r>   )r   r   r   r?   _parse_brightcove_metadata  s    






 
 

z.BrightcoveNewBaseIE._parse_brightcove_metadataN)r   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dd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 d#gZd'd(d)d*dd+d,gd-d.d/d0d1d2	d3d4d5d6d.d7d8d9d:d;dd<d.d=d>d?d@dAid:dBddCd.dDd>dEdFdAigdGdHdIdJddKdLdMdNdOdddPdQdRddSdTddUdVdWdXdYdZd d[gdd\d]d^d_dd`dadbdcdddedfdgdgZedhdi Zedjdk Z	dldm Z
dndo ZdpS )qr   zbrightcove:newzhttps?://players\.brightcove\.net/(?P<account_id>\d+)/(?P<player_id>[^/]+)_(?P<embed>[^/]+)/index\.html\?.*(?P<content_type>video|playlist)Id=(?P<video_id>\d+|ref:[^&]+)zxhttp://players.brightcove.net/929656772001/e41d32dc-ec74-459e-a845-6c69f7b724ea_default/index.html?videoId=4463358922001Z c8100925723840d4b0d243f7025703beZ4463358922001r   z Meet the man behind Popcorn Timez$md5:eac376a4fe366edc70279bfb681aea16gjtd@icUZ20150904Z929656772001zmincount:20)	r    r!   r"   r$   r9   r%   r&   r'   r   r4   r6   zyhttp://players.brightcove.net/4036320279001/5d112ed9-283f-485f-a7f9-33f42e8bc042_default/index.html?videoId=4279049078001Z4279049078001zTitansgrave: Chapter 0gZd;h@iVrUZ20150606Z4036320279001zmincount:39r,   zbhttps://players.brightcove.net/1752604059001/S13cJdUBz_default/index.html?playlistId=5718313430001Z5718313430001zNo Audio Playlistr/   r.   r3   T)r(   r*   r8   r5   zahttp://players.brightcove.net/5690807595001/HyZNerRl7_default/index.html?playlistId=5743160747001r1   zwhttp://players.brightcove.net/3910869709001/21519b5c-4b3b-4363-accb-bdc8f358f823_default/index.html?videoId=ref:7069442zbhttp://players.brightcove.net/710858724001/default_default/index.html?videoId=ref:event-stream-356zvhttp://players.brightcove.net/1305187701/c832abfb-641b-44eb-9da0-2fe76786505f_default/index.html?videoId=4377407326001zOhttps://nbc-2.com/weather/forecast/2022/11/16/forecast-warmest-day-of-the-week/Z 2934d5372b354d27083ccf8575dbfee2Z6315650313112z'First Alert Forecast: November 15, 2022Znbc2ZforecastZ6146886170001zre:^https?://.*\.jpg$ikmtcg     ,m@Z20221116)	r    r"   r!   r   r'   r   r%   r9   r&   )r(   r)   r*   z7https://www.gooddishtv.com/tiktok-rapping-chef-mr-pyrexztiktok-rapping-chef-mr-pyrexz3TikTok's Rapping Chef Makes Jambalaya for the Hostsr   zJust in time for Mardi Gras)r    r"   r   Z	age_limitr$   r*   Z6299189544001zTGD_01-032_5i+bZ1569565978001Z20220228g
ףp=&k@)r    r!   r"   r   r%   r'   r&   r9   Z6305565995112z$TGD 01-087 (Airs 05.25.22)_Segment 5io|qbZ20220503g~jfs@)r(   r*   playlistz[http://www.delawaresportszone.com/video-st-thomas-more-earns-first-trip-to-basketball-semisZ 2b35148fcf48da41c9fb4591650784f3Z5348741021001Z20170306Z4191638492001i~ӼXz<VIDEO:  St. Thomas More earns first trip to basketball semis)r    r!   r&   r'   r%   r"   zhttp://www.programme-tv.net/videos/extraits/81095-guillaume-canet-evoque-les-rumeurs-d-infidelite-de-marion-cotillard-avec-brad-pitt-dans-vivement-dimanche/zo81095-guillaume-canet-evoque-les-rumeurs-d-infidelite-de-marion-cotillard-avec-brad-pitt-dans-vivement-dimancheu   Guillaume Canet évoque les rumeurs d'infidélité de Marion Cotillard avec Brad Pitt dans Vivement Dimanche, Extraits : toutes les vidéos avec Télé-LoisirsZ 732d22ba3d33f2f3fc253c39f8f36523Z5311302538001uo   Guillaume Canet évoque les rumeurs d'infidélité de Marion Cotillard avec Brad Pitt dans Vivement Dimancheu   Guillaume Canet évoque les rumeurs d'infidélité de Marion Cotillard avec Brad Pitt dans Vivement Dimanche (France 2, 5 février 2017)i,xXZ20170205Z800000640001r-   )r)   r*   r2   )r(   r*   r   r+   zNhttp://www.sportsnet.ca/baseball/mlb/sn-presents-russell-martin-world-citizen/Z 4ae374f1f8b91c889c4b9203c8c752afZ4255764656001z*SN Presents: Russell Martin, World Citizenu   To understand why he was the Toronto Blue Jays’ top off-season priority is to appreciate his background and upbringing in Montreal, where he first developed his baseball skills. Written and narrated by Stephen Brunt.zRogers SportsnetZ
1704050871Z20150525iIcUr:   z*Page no longer has URL, now has javascriptc                 C   s   t | |}|r|d S d S )Nr   )r   ro   )ierp   rq   r>   r>   r?   _extract_url	  s    zBrightcoveNewIE._extract_urlc              	   C   s   g }t d|D ]$\}}||dr*|nd|  qt d|D ]\}}}}}	t|}
|
d}|shqB|pt|
d}|s|qB|p|
dpd}|	p|
d	pd}	d
| d| d|	 d| }|s| ||dsqB|| qB|S )NzZ<iframe[^>]+src=(["\'])((?:https?:)?//players\.brightcove\.net/\d+/[^/]+/index\.html.+?)\1)zhttp:https:r   aj  (?isx)
                    (<video(?:-js)?\s+[^>]*\bdata-video-id\s*=\s*['"]?[^>]+>)
                    (?:.*?
                        (<script[^>]+
                            src=["\'](?:https?:)?//players\.brightcove\.net/
                            (\d+)/([^/]+)_([^/]+)/index(?:\.min)?\.js
                        )
                    )?
                zdata-video-idzdata-accountzdata-playerdefaultz
data-embedr   /ru   z/index.html?videoId=zpossible brightcove video)rU   rw   r   re   r   rL   Z_is_valid_url)r   rp   entriesru   r(   videoZ
script_tagr   rh   embedattrsr   r~   r>   r>   r?   ro     s2    	

	z(BrightcoveNewIE._extract_brightcove_urlsc                 c   s2   |  | |}|D ]}| t|d|itV  qd S )Nr   )ro   r{   r   r   r|   r>   r>   r?   r   J  s    z%BrightcoveNewIE._extract_from_webpagec                    s  t |i \}ddd | \ }  d jd}d}fdd fd	d
}d}d|rdnd d  d| d }|rdd| ini d}|r|t	d|
dd tdD ]}	|s| }d}d| d< zj|d}
W  qW q ty
 } zt|jtr|jjdv r|jj  d }
|
dp|
d }|
d d!krj|d" n.|
dd#kr|sd }d  W Y d }~qt|dd$ W Y d }~qd }~0 0 q|
d%}|r|d d d&kr|
d' }d(fd)d*d+D }|rltd,| d-dd$d. |d/ |d0 d1 }j|dd| id2|id3}
|d4krfd5d*t|
d6d7d fD |
d8|
d9|
d:S j|
dS );NZgeo_countriesZgeo_ip_blocks)Z	countriesZ	ip_blocksru   
brightcoveFc                    s   j d | S )Nr   )cachestorer   )policy_key_idr}   r>   r?   r@   [  rA   z/BrightcoveNewIE._real_extract.<locals>.<lambda>c                     s   d  d d d} j | d ddp.i }t|dd }|s| d	 }jd
|dd d}|rjt|dd}|r|d}|sjd|ddd}| |S )Nr   r   ru   zconfig.jsonFr   c                 S   s   | d d S )NZvideo_cloud
policy_keyr>   r   r>   r>   r?   r@   b  rA   zKBrightcoveNewIE._real_extract.<locals>.extract_policy_key.<locals>.<lambda>zindex.min.jszcatalog\(({.+?})\);catalog)r   Z	policyKeyz$policyKey\s*:\s*(["\'])(?P<pk>.+?)\1z
policy keypkr;   )_download_jsonr   r   r   _parse_jsonr   rL   )base_urlconfigr   rp   r   )r   r   rh   r}   store_pkr   r>   r?   extract_policy_key]  s:    


z9BrightcoveNewIE._real_extract.<locals>.extract_policy_keytokenzhttps://z	edge-authZedgez).api.brightcove.com/playback/v1/accounts/r   zs/r   zBearer r   zhttps?://[^/]+r   )rz   ZOriginr   Tzapplication/json;pk=Accept)r   )i  i  r   r   r   Z
CLIENT_GEO)msgZINVALID_POLICY_KEYr   r   ZTVE_AUTHcustom_fieldsz, c                 3   s   | ]}  |s|V  qd S )N)rL   )rD   key)r   r>   r?   rG     s   z0BrightcoveNewIE._real_extract.<locals>.<genexpr>)
source_urlsoftware_statementz!Missing fields in smuggled data: z. This video can be only extracted from the webpage where it is embedded. Pass the URL of the embedding webpage instead of the Brightcove URLr   ZbcadobepassrequestoridZbcadobepassresourceidr   ZtveToken)r   r   r   c                 3   s    | ]} ||d   V  qdS )r    N)r   )rD   Zvid)r   r}   r>   r?   rG     s   Zvideosc                 S   s   |d S )Nr    r>   )ru   rF   r>   r>   r?   r@     rA   r    rC   r$   )r   Z_initialize_geo_bypassrL   r   groupsr   loadr   rU   rl   r<   ranger   r   ra   causer   statusr   responsereaddecodeZraise_geo_restrictedjoinZ_extract_mvpd_authZplaylist_resultr   r   )r}   r(   content_typer   Zpolicy_key_extractedr   r   Zapi_urlr   ru   r   er   r   r   Zmissing_fieldsZ	tve_tokenr>   )	r   r   r   rh   r   r}   r   r   r   r?   r   O  s    
$




zBrightcoveNewIE._real_extractN)r   r   r   r   r   r   r   staticmethodr   ro   r   r   r>   r>   r>   r?   r   h  s  =#	
c

;r   )*r   rU   r   urllib.parser^   xml.etree.ElementTreerY   Z	adobepassr   commonr   compatr   Znetworking.exceptionsr   utilsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zutils.traversalr   r   r   r   r>   r>   r>   r?   <module>   s    \   Nx