
    VGhy                        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e
      Z' G d de      Z( G d de(      Z)y)    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                   N   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d        Zed        Z	ed        Z
ed        Zed        Zd Zd Zy)BrightcoveLegacyIEzbrightcove:legacyzN(?:https?://.*brightcove\.com/(services|viewer).*?\?|brightcove:)(?P<query>.*)z~http://c.brightcove.com/services/viewer/htmlFederated?playerID=1654948606001&flashID=myExperience&%40videoPlayer=2371591881001 5423e113865d26e40624dce2e4b45d95z4Test Brightcove downloads and detection in GenericIE2371591881001mp4u]   Xavier Sala i Martín: “Un banc que no presta és un banc zombi que no serveix per a res”8TVz$md5:a950cc4285c43e44d763d036710cd9cdiHQ201305101589608506001)idexttitleuploaderdescription	timestampupload_dateuploader_idz4The player has been deactivated by the content owner)urlmd5note	info_dictskipzzhttp://c.brightcove.com/services/viewer/htmlFederated?playerID=1217746023001&flashID=myPlayer&%40videoPlayer=17854521370011785452137001flvz5JVMLS 2012: Arrays 2.0 - Opportunities and Challengesz<John Rose speaks at the JVM Language Summit, August 1, 2012.Oraclei*P20120814
1460825906)r'   r(   r)   r+   r*   r,   r-   r.   zvideo not playable)r/   r2   r3   zhttp://c.brightcove.com/services/viewer/federated_f9?&playerID=1265504713001&publisherID=AQ%7E%7E%2CAAABBzUwv1E%7E%2CxP-xFHVUstiMFlNYfvF4G9yFnNaqCw_9&videoID=27509345480012750934548001z+This Bracelet Acts as a Personal Thermostatz$md5:547b78c64f4112766ccf4e151c20b6a0iH`R201310171130468786001r'   r(   r)   r+   r,   r-   r.   )r/   r2   zhttp://link.brightcove.com/services/player/bcpid756015033001?bckey=AQ~~,AAAApYJi_Ck~,GxhXCegT1Dp39ilhXuxMJxasUhVNZiil&bctid=2878862109001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%7D3750436379001z:UCI MTB World Cup 2014: Fort William, UK - Downhill FinalszRBTV Old (do not use)iS20140827710858724001zhttp://c.brightcove.com/services/viewer/htmlFederated?playerID=3550052898001&playerKey=AQ%7E%7E%2CAAABmA9XpXk%7E%2C-Kp7jNgisre1fG5OdqpAFUTcs0lP_ZoLSealife3550319591001)r)   r'      zUnsupported URL)r/   r2   playlist_mincountr3   zhttp://c.brightcove.com/services/json/experience/runtime/?command=get_programming_for_experience&playerKey=AQ%7E%7E,AAABXlLMdok%7E,NJ4EoMlZ4rZdx9eU1rkMVd8EaYPBBUlg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/2765128793001u*   Le cours de bourse : l’analyse techniquez$md5:7e9ad046e968cb2d1114004aba466fd9zBFM BUSINESSskip_download404 Not Found)r/   r2   paramsr3   zGhttp://bfmbusiness.bfmtv.com/mediaplayer/chroniques/olivier-delamarche/5255628253001z$md5:37c519b1128915607601e75a87995fc0z$md5:37f7f888b434bb8f8cc8dbd4f7a4cf26876450612001ikYX20161220)r'   r(   r)   r+   r*   r.   r,   r-   zRedirects, page gonezhttp://bcove.me/i6nfkrc3 0ba9446db037002366bab3b3eb30c88c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/   r0   r2   r3   zMhttp://www.kijk.nl/sbs6/leermijvrouwenkennen/videos/jqMiXKAYan2S/aflevering-13866516442001z%Leer mij vrouwen kennen: Aflevering 1zSBS Broadcastingz(Restricted to Netherlands, 404 Not Found)r/   r2   r3   rM   z5http://www.un.org/chinese/News/story.asp?NewsID=27724 36d74ef5e37c8b4a2ce92880d208b9685360463607001uS   叙利亚失明儿童在废墟上演唱《心跳》  呼吁获得正常童年生活u  联合国儿童基金会中东和北非区域大使、作曲家扎德·迪拉尼（Zade Dirani）在3月15日叙利亚冲突爆发7周年纪念日之际发布了为叙利亚谱写的歌曲《心跳》（HEARTBEAT），为受到六年冲突影响的叙利亚儿童发出强烈呐喊，呼吁世界做出共同努力，使叙利亚儿童重新获得享有正常童年生活的权利。zUnited Nations1362235914001i!fX20170315z"http://www8.hp.com/cn/zh/home.html5255815316001zSprocket Video - ChinazHP-Video GalleryiYX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)extract_flatrK   )r/   r2   playlist_countrM   r3   zIhttp://www.geekandsundry.com/tabletop-bonus-wils-final-thoughts-on-dread/4238694884001zTabletop: Dread, Last Thoughtsi  )r'   r(   r)   r+   durationz;https://dl.dropboxusercontent.com/u/29092637/interview.html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 - GlobeStream2733773828001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-drill3167554373001zKLearn to Hit Open Three-Pointers With Damian Lillard's Baseline Drift Drillz$md5:57bacb0e0f29349de4972bfda3191713
107934949320140207iWR)r'   r(   r)   r+   r.   r-   r,   z410 Gonec                   
 t        j                  dd |      }|j                  dd      }t        j                  dd|      }t        |      }	 t	        |j                               t        dd	d
      }|Kt        d t        j                  j                  |j                  d         j!                         D              ni j                  j#                  dd      }t        |      

fd}i } |d      xs  |d      }|t%        d      ||d<    |d      }|||d<    |d      xs  |d      xs  |d      xs  |d      }|Rt'        |t(              r|d   }|j+                         }t        j,                  d|      s|j/                  d      sy||d<    |d      }	|	|	|d<   | j1                  |      S # t        j                  j                  j                  $ r Y yw xY w)z
        Build a Brightcove url from a xml string containing
        <object class="BrightcoveExperience">{params}</object>
        z&(<param(?:\s+[a-zA-Z0-9_]+="[^"]*")*)>c                 *    | j                  d      dz   S )Nr   z/>group)ms    d/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/brightcove.py<lambda>z:BrightcoveLegacyIE._build_brightcove_url.<locals>.<lambda>5  s    aggaj4&7     z<--z<!--z(<object[^>]*)(xmlns=".*?")z\1N./paramname	flashVarsc              3   0   K   | ]  \  }}||d    f  yw)r   N ).0kvs      rl   	<genexpr>z;BrightcoveLegacyIE._build_brightcove_url.<locals>.<genexpr>C  s&      RAq AaD	Rs   valuedata c                 v    | v r|    S t        dd|       }||j                  d   S j                  |       S )Nro   rp   rx   )r   attribget)rp   nodedata_url_params	flashvars
object_docs     rl   
find_paramz<BrightcoveLegacyIE._build_brightcove_url.<locals>.find_paramL  sK    y  &":y&$GD{{7++"&&t,,rn   playerIDplayerIdzCannot find player ID	playerKey@videoPlayervideoId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   r|   itemsr}   r	   
isinstanceliststripmatch
startswith_make_brightcove_url)cls
object_strfv_eldata_urlr   rM   	player_id
player_keyvideo_player	link_baser   r   r   s             @@@rl   _build_brightcove_urlz(BrightcoveLegacyIE._build_brightcove_url,  s    VVE7E
  ''v6
VV:E:N
'
3
	01B1B1DEJ  
Iv{K R"LL11%,,w2GHNNPR RI I$$((4"8,	- z*Dj.D	 !899&z,
!",F;!.1Z	5JjYbNcgqr~g#,-+A'--/L HHk "%1%<%<V%D%1F>"}-	 $-F=!''//e yy$$// 		s   G 'G.-G.c                 r    t        j                  d|      }|r| j                  |j                               S y )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
            )r   searchr   	groupdict)r   	object_jsrk   s      rl   _build_brightcove_url_from_jsz0BrightcoveLegacyIE._build_brightcove_url_from_jsr  s=     II  ++AKKM:: rn   c                     t        d|      S )Nz6https://c.brightcove.com/services/viewer/htmlFederated)r   )r   rM   s     rl   r   z'BrightcoveLegacyIE._make_brightcove_url  s    DfN 	Nrn   c                 6    | j                  |      }|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)r   webpageurlss      rl   _extract_brightcove_urlz*BrightcoveLegacyIE._extract_brightcove_url  s%    
 ++G4tAw(D(rn   c                    t        j                  d|      }|r)t        |j                  d            }d|v sd|v sd|v r|gS t        j                  d|      }|r2t        t        d|D cg c]  }| j                  |       c}            S t        j                  d|      }|r2t        t        d|D cg c]  }| j                  |       c}            S t        j                  d	|      D cg c]  \  }}|	 c}}S c c}w c c}w c c}}w )
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/   r   r   idVideoz(?sx)<object
            (?:
                [^>]+?class=[\'"][^>]*?BrightcoveExperience.*?[\'"] |
                [^>]*?>\s*<param\s+name="movie"\s+value="https?://[^/]*brightcove\.com/
            ).+?>\s*</object>Nz(customBC\.createVideo\(.+?\);)zW<iframe[^>]+src=([\'"])((?:https?:)?//link\.brightcove\.com/services/player/(?!\1).+)\1)	r   r   r   rj   findallr   filterr   r   )	r   r   url_mr/   matchesrk   	custom_bc_srcs	            rl   r   z+BrightcoveLegacyIE._extract_brightcove_urls  s$    		  u{{512C c!Y#%5c9Iu**!
  tG%Tqc&?&?&B%TUVV**?It!(&* 11)<&* + , , #%**fho#q r3 r 	r &U&*rs   )C?3D/D	c              #      K   | j                  |      }|D ]&  }| j                  t        |d|i      t               ( y w)NReferer)r   
url_resultr   r    selfr/   r   bc_urlsbc_urls        rl   _extract_from_webpagez(BrightcoveLegacyIE._extract_from_webpage  sE     //8 	]F//+fy#6F"GI[\\	]s   >A c                 z   t        |i       \  }}t        j                  dd|      }t        j                  dd|      }| j                  |      }|j	                  d      }t
        j                  j                  |      }|j                  d      }|r|j                  dd g      d   xs |j                  d	|      }|d   }d
|vr-t        j                  d|      }||j	                  d      g|d
<   |j                  d      }	|	r|	d   j                         r|	d   }	|	s|j                  d      }
|
rd|
d   v r|
d   }
na|j                  d
      }|rN|d   j                         r;i }|r||d	<   | j                  d|d   z   ||d      }|r| j                  d|dd      }
|
rP|
j                  d      d   j                  dd      }t        j                   dt#        j$                  |            d   }	|	r=d|	 d| }|rt'        |d|i      }| j)                  |t*        j-                         |      S t/        |      )Nz$(?<=[?&])(videoI(d|D)|idVideo|bctid)z%40videoPlayerz(?<=[?&])bckeyr   queryr   r   r   r   r   z/bcpid(\d+)r   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   r   r   _match_valid_urlrj   r   r   r   r}   r   isdigit_download_webpage_search_regexsplitr   structunpackbase64urlsafe_b64decoder   r   BrightcoveNewIEie_keyr
   )r   r/   smuggled_datamobj	query_strr   r   referervideo_idpublisher_idr   r   r   player_page
enc_pub_idbrightcove_new_urls                   rl   _real_extractz BrightcoveLegacyIE._real_extract  sh   *33] ff<>NPSTff&S9$$S)JJw'	%%i0yy0iiv6q9^]=N=NyZ]=^G#AH&yy5#)-AE*% 99]3LQ 7 7 9+A"YY{3
#A"6!+AJ %		* 5I Yq\%9%9%;"$"18GI.&*&<&<OR[\]R^^$gU '= 'D ')-);); Q +\ *< *HJ !+!1!1#!6q!9!A!A#s!KJ#)==v7O7OPZ7[#\]^#_L'F|nTx  zB  yC  &D")45G*V]I^)_&'9?;Q;Q;SU]^^
 s##rn   N)__name__
__module____qualname__IE_NAME
_VALID_URL_TESTS_WEBPAGE_TESTSclassmethodr   r   r   r   r   r   r   rs   rn   rl   r    r    %   s   !GbJ
 T5J%x!E').	 K	
& P%P]$')+	 )	
" A%FE').		
" _%,E7 !	
  d &U3[')-	 !	
( i"% "#%
	
 y%$ "$%		
 e!		
EhF\ n!AA&
 T
  $ Y!;A&)#%	
 T
 '!& *1!%% _
  _!<B*
 ;T
  G1!j ](*#%	
  " 4!-3*#%*	
 T
 *!( v 6
 !!
 '  [!5;
 ' M!2 p;*%#	
 T
  %* F!bA'%#
 T
 OWNr C0 C0J ; ;" N N ) )  r  rD]
4$rn   r    c                       e Zd Zi fdZy)BrightcoveNewBaseIEc                    ! |d   j                         }g i }}|j                  d      xs g }|D ]4  }|j                  d      }	t        |j                  d            }
|j                  d      }|
dk(  s|	dk(  r1|sM| j                  ||dd	d
d      \  }}| j	                  ||      }n|
dk(  r/|s| j                  ||dd      \  }}| j	                  ||      }nN|j                  d      }|j                  d      |j                  d      }}|s|s|r|st        |j                  d      d      !t        |j                  d             t        |j                  d            }!t        |j                  d            |	|
xs |	j                         d}|dk(  r dk(  r|j                  ddi       n$|j                  | |j                  d      d        !fd}|s|r(|j                  |xs | ||rdnd       |rdnd!d"       n|j                  || |d#      d$       |g}|	d%k(  s|j                  d&      s|
d'k(  r|D ]  }d(|d)<   	 |j                  |       7 |sT|j                  d*      }|rA|d   }| j                  |j                  d+      xs |j                  d,      xs |d-   d(.       |j                  d/d        |D ]#  }|j                  d0i       j                  |       % |j                  d1g       D ]  }|j                  d2      d3k7  rt        |j                  d            }|s5t        |j                  d4            xs t        |j                  d5            xs d6j                         }|j                  |g       j!                  d7|i        d}t        |j                  d8      d      }||dk  rd(}g d9}t#        |d:      }|r3|D cg c]%  \  }}t%        j&                  d;| d<| |      ||d=' c}}nd }||t)        |j                  d>            ||t+        |j                  d?            |j                  d@      |||j                  dAg       |dBS c c}}w )CNrp   sources	containertyper   m3u8M2TSr#   m3u8_nativehlsF)m3u8_idr   mpddashr   streaming_srcstream_nameapp_nameavg_bitratei  heightwidthsize)tbrfilesizer   r(   r   vcodecnonecodec)r   r   r   c                 L    t        | xr t               dxr  d      S )Nru   p)r   int)kindr   r   s    rl   build_format_idzGBrightcoveNewBaseIE._parse_brightcove_metadata.<locals>.build_format_id  s0    (s/E#c(1~vG^U[T\\]R^__rn   httpzhttp-streaming)r/   	format_idsource_preferencertmp)r/   	play_pathr	  WVMkey_systemsismThas_drmerrorsmessageerror_subcode
error_codeexpectedAuthorizationhttp_headerstext_tracksr  captionssrclanglabelenr/   r_   )	)   Z   )i@     )i    )i  ih  )   i  )i   i@  )i   r!  )iV  r"  )i  i8  )poster	thumbnailz\d+x\d+x)r/   r   r   r+   published_at
account_idtags)r'   r)   r+   
thumbnailsr_   r,   r.   formats	subtitlesr(  is_live)r   r}   r   #_extract_m3u8_formats_and_subtitles_merge_subtitles"_extract_mpd_formats_and_subtitlesr   r   lowerupdateextendraise_no_formatspop
setdefaultr   r   appendr   r   r   r   r   )"r   	json_datar   r   r)   r*  r+  r   sourcer   r(   r   fmtssubsr   r   r   r   fr  r  error
text_tracktext_track_urllangr,  r_   
common_resthumb_base_urlwhr)  r   r   s"                                   @@rl   _parse_brightcove_metadataz.BrightcoveNewBaseIE._parse_brightcove_metadata  s   &!'')--	*0b =	!F

;/Ivzz&12C**U#Cf}	V 3!EE5-e F U
d 11)TB	!DDS(TZbgDh
d 11)TB	 &

? ;(.

=(A6::jCYX=+X#FJJ}$=tD$VZZ%9:#FJJw$78 +FJJv,> ?!*3)//"3	 A:&A+HH &  HH!&"("(**W"5 ` -HH"3m%4sVHX%Y25Q2  HH'%0%4V%< 
 s E!VZZ%>#, (A#'AiL(NN4 {=	!~ ]]8,Fq	%%IIi(]EIIo,F]%P\J]hl & n 	OT* 	=ALL,33G<	= $--r: 
	J~~f%3()>?N!
y 9: D":>>'#:;D?CUUW   r*11~3 
	  z!:DAHMG F
!)-DE
 &4j	" a 66*1QCj.A
 " :>	 	 %immM&BC$ &y}}^'DE$==6"MM&"-
 	
"s   **Q7N)r   r   r   rD  rs   rn   rl   r   r     s    FH t
rn   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ddddddddd	ddi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.g d=d>d?d@dA	id:dBddCd.g 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dh        Zedi        Z	dj Z
dk Zyl)mr   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=4463358922001 c8100925723840d4b0d243f7025703be4463358922001r#   z Meet the man behind Popcorn Timez$md5:eac376a4fe366edc70279bfb681aea16gjtd@icU20150904929656772001zmincount:20)	r'   r(   r)   r+   r_   r,   r-   r.   r*  rL   rS   zyhttp://players.brightcove.net/4036320279001/5d112ed9-283f-485f-a7f9-33f42e8bc042_default/index.html?videoId=42790490780014279049078001zTitansgrave: Chapter 0gZd;h@iVrU201506064036320279001zmincount:39rK   T)r/   r2   rM   zbhttps://players.brightcove.net/1752604059001/S13cJdUBz_default/index.html?playlistId=57183134300015718313430001zNo Audio PlaylistrF   rC   )r/   r2   r]   rM   zahttp://players.brightcove.net/5690807595001/HyZNerRl7_default/index.html?playlistId=5743160747001rH   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/ 2934d5372b354d27083ccf8575dbfee26315650313112z'First Alert Forecast: November 15, 2022nbc2forecast6146886170001zre:^https?://.*\.jpg$ikmtcg     ,m@20221116)	r'   r)   r(   r(  r.   r$  r,   r_   r-   )r/   r0   r2   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$  	age_limitr+   r2   6299189544001zTGD_01-032_5i+b156956597800120220228g
ףp=&k@)	r'   r(   r)   r$  r(  r,   r.   r-   r_   6305565995112z$TGD 01-087 (Airs 05.25.22)_Segment 5io|qb20220503g~jfs@)r/   r2   playlistz[http://www.delawaresportszone.com/video-st-thomas-more-earns-first-trip-to-basketball-semis 2b35148fcf48da41c9fb4591650784f3534874102100120170306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é-Loisirs 732d22ba3d33f2f3fc253c39f8f36523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,xX20170205800000640001r<   )r0   r2   rI   )r/   r2   rZ  r3   zNhttp://www.sportsnet.ca/baseball/mlb/sn-presents-russell-martin-world-citizen/ 4ae374f1f8b91c889c4b9203c8c752af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 Sportsnet
170405087120150525iIcUrc   z*Page no longer has URL, now has javascriptc                 @    t         j                  | |      }|r|d   S d S )Nr   )r   r   )ier   r   s      rl   _extract_urlzBrightcoveNewIE._extract_url  s%    77GDtAw(D(rn   c           	         g }t        j                  d|      D ],  \  }}|j                  |j                  d      r|nd|z          . t        j                  d|      D ]  \  }}}}}	t	        |      }
|
j                  d      }|s(|xs |
j                  d      }|s@|xs |
j                  d      xs d}|	xs |
j                  d	      xs d}	d
| d| d|	 d| }|s| j                  ||d      s|j                  |        |S )NzZ<iframe[^>]+src=(["\'])((?:https?:)?//players\.brightcove\.net/\d+/[^/]+/index\.html.+?)\1)zhttp:https:rk  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   /r   z/index.html?videoId=zpossible brightcove video)r   r   r6  r   r   r}   _is_valid_url)rh  r   entriesr   r/   video
script_tagr'  r   embedattrsr   r   s                rl   r   z(BrightcoveNewIE._extract_brightcove_urls  sA     jjmovx 	[FAsNN#..1D"E38VY>Z	[ @Bzz 	@ &	#;E:z9e 'u-E yy1H#@uyy'@J!JUYY}%=JIAUYY|4A	E6zl!I;aPUwVjksjtuF b&6&6H&A'CNN6"M&	#P rn   c              #      K   | j                  | |      }|D ]&  }| j                  t        |d|i      t               ( y w)Nr   )r   r   r   r   r   s        rl   r   z%BrightcoveNewIE._extract_from_webpageO  sF     //g> 	[F//+fz36G"H/ZZ	[s   ?Ac                     t        |i       \  } j                  j                  d      j                  d      d        j                  |      j	                         \  } d  j
                  j                  d      }d} fd fd}j                  d	      }d
|rdnd d d| d }|rdd| ini j                  d      }|r7j                  |t        j                  d|      j                  d      d       t        d      D ]+  }	|s	 |       }d}d| d<   	  j                  |      }
 n 
j                  d#      }|r|d   j                  d      d$k(  ro|
d%   }d&j/                  fd'd(D              }|rt        d)| d*d"       j1                  d+   |d,   |d-   d.         } j                  |dd| id/|i0      }
|d1k(  rX j3                   fd2t5        |
d3d4 f      D        |
j                  d5      |
j                  d6      |
j                  d7            S  j7                  |
      S # t        $ r}t        |j                  t               r|j                  j"                  dv r j%                  |j                  j&                  j)                         j+                               d   }
|
j                  d      xs |
d   }|
j                  d      dk(  r j-                  |        n&|
j                  d      d!k(  r|sd } d        Y d }~t        |d"       d }~ww xY w)8Ngeo_countriesgeo_ip_blocks)	countries	ip_blocksr   
brightcoveFc                 >    j                   j                  d|       S )Nrz  )cachestore)r%  policy_key_idr   s    rl   rm   z/BrightcoveNewIE._real_extract.<locals>.<lambda>`  s    TZZ--lM1M rn   c                  j   d d d d} j                  | dz   
d      xs i }t        |d       }|ssj                  | dz   
      }j                  d	|d
d       }|r0j	                  t        |      
d      }|r|j                  d      }|sj                  d|dd      } 	|       |S )Nr   rm  r   zconfig.jsonFr   c                     | d   d   S )Nvideo_cloud
policy_keyrs   )r%  s    rl   rm   zKBrightcoveNewIE._real_extract.<locals>.extract_policy_key.<locals>.<lambda>g  s    !M"2<"@ rn   zindex.min.jszcatalog\(({.+?})\);catalog)rl  	policyKeyz$policyKey\s*:\s*(["\'])(?P<pk>.+?)\1z
policy keypkri   )_download_jsonr   r   r   _parse_jsonr   r}   )base_urlconfigr  r   r  r'  rr  r   r   store_pkr   s        rl   extract_policy_keyz9BrightcoveNewIE._real_extract.<locals>.extract_policy_keyb  s   8Ai[PQRWQXXYZH((=((% ) A GDF  @BJ00~-x9 ,,*GY - N".."7+XU / DG%,[[%=
!!%!3!3?T "4 ";J Z rn   tokenzhttps://z	edge-authedgez).api.brightcove.com/playback/v1/accounts/rm  zs/r  zBearer r   zhttps?://[^/]+r   )r   Originr   Tzapplication/json;pk=Accept)r   )i  i  r  r  r  
CLIENT_GEO)msgINVALID_POLICY_KEYr  r  TVE_AUTHcustom_fieldsz, c              3   F   K   | ]  }j                  |      r|  y w)N)r}   )rt   keyr   s     rl   rw   z0BrightcoveNewIE._real_extract.<locals>.<genexpr>  s&      'c=K\K\]`Ka'cs   !!)
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  bcadobepassrequestoridbcadobepassresourceidr  tveToken)r   r   rZ  c              3   J   K   | ]  }j                  ||d            yw)r'   N)rD  )rt   vidr   r   s     rl   rw   z0BrightcoveNewIE._real_extract.<locals>.<genexpr>  s.      W 00c$iI Ws    #videosc                     |d   S )Nr'   rs   )r   rv   s     rl   rm   z/BrightcoveNewIE._real_extract.<locals>.<lambda>  s
    AdG rn   r'   rp   r+   )r   _initialize_geo_bypassr}   r   groupsr|  loadr1  r   r   rj   ranger  r	   r   causer   statusr  responsereaddecoderaise_geo_restrictedjoin_extract_mvpd_authplaylist_resultr   rD  )r   r/   content_typer  policy_key_extractedr  r  api_urlr   r   r7  er  r  r  missing_fields	tve_tokenr'  rr  r   r   r~  r   r  r   s   `                @@@@@@@@rl   r   zBrightcoveNewIE._real_extractT  s   *33]##&**?;&**?;%
 	
 @D?T?TUX?Y?`?`?b<
IulH%,a	{3ZZ__\=A
$M	 	4 !!'*E[v>>ghrgsst  vB  uC  CE  FN  EO  P:??geW$56R $$Z0NN#))$5x@FFqI 
 q 	A/1
'+$"6zl CGH //7/S		* x(fQimmO4
B%o6M!YY 'cC'c cN$77G HZ [eik k //l+X675623	5I
 ++ 4ZLA, 	 , I :%''W(X?S4TUWd#Y]]6%:m,	. . ..x / 2 	2U " aggy1aggnn
6R $ 0 01A1A1F1F1H1O1O1QS[ \]^ _I'mmI6Q)L:QG }}_5E11g1>"|48LLUi%)
  (4@@s   ?I  	M)CMMMN)r   r   r   r   r   r   r   staticmethodri  r   r   r   rs   rn   rl   r   r   h  s~   G ~J J1!7A#%)$

  " K!-3 #%*$

 T
( t!(
  T
 s
 I t Hq<F@ a1!>Z(*1#%

	" I0K18
 %'5'.)#

 %?5'.)#

#J m1!%*#S
   n D z

 6% K  m')- "
   ). `1!A x*'%#	
 =icNJ ) ) 9 9v[
e2rn   r   )*r   r   r   urllib.parser   xml.etree.ElementTreer   	adobepassr   commonr   compatr   networking.exceptionsr   utilsr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   utils.traversalr   r    r   r   rs   rn   rl   <module>r     sp     	    " ! , -     . +H$ H$Vu
+ u
pQ2) Q2rn   