
    VGhA                    T   d dl Z 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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   G d de	      Z! G d	 d
e!      Z" G d de	      Z# G d de	      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OnDemandPagedList
clean_htmldict_getfloat_or_noneget_element_by_classint_or_nonejoin_nonempty
js_to_jsonparse_durationparse_iso8601parse_qsstrip_or_nonetraverse_objtry_getunescapeHTMLunified_timestampurl_or_noneurlencode_postdataurljoinc                   *   e Zd ZdZdZdZde dZdgZdZdZ	d	Z
d
dgZdZddddddddiddddddddddiddddddd d!dddid"dd#d$dd%d&d'dddid"dd(d)dd*d+d,dddiddd-d.d/dd0d1d2dddid3d4d5d6dd7d8d9dddid3d:d;dd<d=d>dddid?dd@dAddBdCd>dDddid?ddEdFddGdHdddidIddJdKddLdLdddiddMddNdOddNdPddNdQddNdRddNdSddNdTddNdUddNgZdV Z G dW dXe      ZdY ZdZ Zd[ Zd\ Zd] Zd^ Zd_ ZdidaZdb Zdc Zdd Zde ZdidfZdg Zdh Zy`)j	BBCCoUkIEz	bbc.co.ukzBBC iPlayerz#(?:[pbml][\da-z]{7}|w[\da-z]{7,14})a  (?x)
                    https?://
                        (?:www\.)?bbc\.co\.uk/
                        (?:
                            programmes/(?!articles/)|
                            iplayer(?:/[^/]+)?/(?:episode/|playlist/)|
                            music/(?:clips|audiovideo/popular)[/#]|
                            radio/player/|
                            events/[^/]+/play/[^/]+/
                        )
                        (?P<id>z8)(?!/(?:episodes|broadcasts|clips))
                    zLsetPlaylist\("(?P<url>https?://www\.bbc\.co\.uk/iplayer/[^/]+/[\da-z]{8})"\)zhttps://account.bbc.com/signinbbczRhttps://open.live.bbc.co.uk/mediaselector/6/select/version/2.0/mediaset/%s/vpid/%sziptv-allpcz"http://bbc.co.uk/2008/emp/playlistz(http://www.bbc.co.uk/programmes/b039g8p7b039d07mflvzKaleidoscope, Leonard Cohenz@The Canadian poet and songwriter reflects on his musical career.)idexttitledescriptionskip_downloadTurl	info_dictparamszYhttp://www.bbc.co.uk/iplayer/episode/b00yng5w/The_Man_in_Black_Series_3_The_Printed_Name/b00yng1dz,The Man in Black: Series 3: The Printed Namez}Mark Gatiss introduces Nicholas Pierpan's chilling tale of a writer's devilish pact with a mysterious man. Stars Ewan Bailey.i  )r!   r"   r#   r$   durationz3Episode is no longer available on BBC iPlayer Radior'   r(   r)   skipzVhttp://www.bbc.co.uk/iplayer/episode/b03vhd1f/The_Voice_UK_Series_3_Blind_Auditions_5/z)The Voice UK: Series 3: Blind Auditions 5zEmma Willis and Marvin Humes present the fifth set of blind auditions in the singing competition, as the coaches continue to build their teams based on voice alone.i  zHCurrently BBC iPlayer TV programmes are available to play in the UK onlyzrhttp://www.bbc.co.uk/iplayer/episode/p026c7jt/tomorrows-worlds-the-unearthly-history-of-science-fiction-2-invasionb03k3pb7z;Tomorrow's Worlds: The Unearthly History of Science Fictionz2. Invasioni  z(http://www.bbc.co.uk/programmes/b04v20dwb04v209vz)Pete Tong, The Essential New Tune Specialz@Pete has a very special mix - all of 2014's Essential New Tunes!i0*  z)http://www.bbc.co.uk/music/clips/p022h44bAudiop022h44jz5BBC Proms Music Guides, Rachmaninov: Symphonic DanceszSIn this Proms Music Guide, Andrew McGregor looks at Rachmaninov's Symphonic Dances.   )r'   noter(   r)   z)http://www.bbc.co.uk/music/clips/p025c0zzVideop025c103zIReading and Leeds Festival, 2014, Rae Morris - Closer (Live on BBC Three)z8Rae Morris performs Closer for BBC Three at Reading 2014   z\http://www.bbc.co.uk/iplayer/episode/b054fn09/ad/natural-world-20152016-2-super-powered-owlsp02n76xfz/Natural World, 2015-2016: 2. Super Powered Owlsz$md5:e4db5c937d0e95a7c6b5e654d429183di  geolocationzMhttp://www.bbc.co.uk/iplayer/episode/b05zmgwn/royal-academy-summer-exhibitionb05zmgw1zKirsty Wark and Morgan Quaintance visit the Royal Academy as it prepares for its annual artistic extravaganza, meeting people who have come together to make the show unique.zRoyal Academy Summer Exhibition)r!   r"   r$   r#   r+   z(http://www.bbc.co.uk/programmes/b06rkn85b06rkms3zKBest of the Mini-Mixes 2015: Part 3, Annie Mac's Friday Night - BBC Radio 1zUAnnie has part three in the Best of the Mini-Mixes 2015, plus the year's Most Played!zNow it's really geo-restrictedz/http://www.bbc.co.uk/programmes/p028bfkf/playerp028bfkjzHExtract from BBC documentary Look Stranger - Giant Leeks and Magic Brewsz.http://www.bbc.co.uk/iplayer/playlist/p01dvks4r'   only_matchingz)http://www.bbc.co.uk/music/clips#p02frcc3zEhttp://www.bbc.co.uk/iplayer/cbeebies/episode/b0480276/bing-14-atchooz*http://www.bbc.co.uk/radio/player/p03cchwfz7https://www.bbc.co.uk/music/audiovideo/popular#p055bc55z(http://www.bbc.co.uk/programmes/w3csv1y9z)https://www.bbc.co.uk/programmes/m00005xnz0https://www.bbc.co.uk/programmes/w172w4dww1jqt5sc           
         | j                  | j                  d d      }| j                  |      }|j                  ||d       t	        | j                  | j                  d|d| j                  d            }| j                  |d dt        |      d| j                  i	      \  }}| j                  |j                  v r2t        t        d
|            }|rt        d| d      t        d      y )NzDownloading signin page)usernamepasswordz&<form[^>]+action=(["\'])(?P<url>.+?)\1zpost urlr'   defaultgroupz
Logging inReferer)dataheaderszform-messagezUnable to login: TexpectedzUnable to log in)_download_webpage
_LOGIN_URL_hidden_inputsupdater   _search_regex_download_webpage_handler   r'   r	   r   r   )	selfr?   r@   
login_page
login_formpost_urlresponseurlherrors	            ]/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/bbc.py_perform_loginzBBCCoUkIE._perform_login   s   ++OOT#<>
 ((4
  
 	
 4??D,>,>5zu -? -> ? 66dL/A*/M0 7 2$ ??dhh&3NHMNE$'w/$@ @ !344 '    c                       e Zd Zd Zy)BBCCoUkIE.MediaSelectionErrorc                     || _         y N)r!   )rO   error_ids     rV   __init__z&BBCCoUkIE.MediaSelectionError.__init__  s	    DGrX   N)__name__
__module____qualname__r^    rX   rV   MediaSelectionErrorrZ     s    	rX   rc   c                     | j                  |j                  d      |d      }|j                  d      D cg c]  }|j                  d       c}S c c}w )NhrefzDownloading ASX playlistz./Entry/ref)_download_xmlgetfindall)rO   
connectionprogramme_idasxrefs        rV   _extract_asx_playlistzBBCCoUkIE._extract_asx_playlist  sE      !7Gab+.;;}+EFCFFFs   Ac                 @    |j                  d| j                   d      S )N./{z}item)rh   _EMP_PLAYLIST_NS)rO   playlists     rV   _extract_itemszBBCCoUkIE._extract_items  s#    $t'<'<&=V DEErX   c                 |    |j                  d      }|rt        j                  |      |j                  d      xs g S )Nresultmedia)rg   r   rc   )rO   media_selectionrU   s      rV   _extract_mediaszBBCCoUkIE._extract_medias  s<    ##H-//66""7+1r1rX   c                 ,    |j                  d      xs g S )Nri   rg   )rO   ru   s     rV   _extract_connectionszBBCCoUkIE._extract_connections#  s    yy&,",rX   c                 ,   i }| j                  |      D ]}  }t        |j                  d            }|s | j                  ||dd      }t	        |t
        j                  j                  j                        sd|j                  d      ddg|d<    |S  |S )Nre   zDownloading captionsFfatalttml)r'   r"   en)	rz   r   rg   rf   
isinstancexmletreeElementTreeElement)rO   ru   rj   	subtitlesri   cc_urlcaptionss          rV   _get_subtitleszBBCCoUkIE._get_subtitles&  s    	33E: 	J !78F))&<E * KHh		(=(=(E(EF &>>&1!IdO 	 rX   c                 N    t        | j                   d|j                   d      )N returned error: TrG   )r   IE_NAMEr!   )rO   media_selection_errors     rV   _raise_extractor_errorz BBCCoUkIE._raise_extractor_error9  s-    ||n-.C.F.F-GH 	rX   c                    d }g i }}| j                   D ]M  }	 | j                  | j                  ||fz  |      \  }}|j                  |       |r| j	                  ||       O |rC|s|r.| j                  | j                   d|j                          ||fS | j                  |       ||fS # t
        j                  $ r0}|j                  dv r|}Y d }~| j                  |       Y d }~d }~ww xY w)N)target)
notukerrorr8   selectionunavailabler   )_MEDIA_SETS_download_media_selector_url_MEDIA_SELECTOR_URL_TEMPLextend_merge_subtitlesr   rc   r!   r   report_warningr   )	rO   rj   last_exceptionformatsr   	media_setfmtssubses	            rV   _download_media_selectorz"BBCCoUkIE._download_media_selector>  s   )) 	/I
/!>>22i5NNP\^
dt$))$y)A	/ )##t||n4EnFWFWEX$YZ 	!! ++N;	!! 00 /44PP%&N++A..	/s   A
B,,C/?C*C**C/Nc                 P    | j                  ||dd      }| j                  ||      S )Nz Downloading media selection JSONi    )expected_status)_download_json_process_media_selector)rO   r'   rj   rv   s       rV   r   z&BBCCoUkIE._download_media_selector_urlT  s7    --A& . ( ++O\JJrX   c                    g }d }g }| j                  |      D ]  }|j                  d      }|dv rt        |j                  d            }|j                  d      }	t        |j                  d            }
t        |j                  d            }t        |j                  d            }| j                  |      D ]#  }|j                  d      }||v r|r|j	                  |       |j                  d      }|j                  d	      }|j                  d
      }|j                  d      }|xs |xs |}|dk(  r>t        | j                  ||            D ]  \  }}|j	                  |d| d| d       ! |dk(  r%|j                  | j                  |||d             |dk(  r+	 | j                  ||dd|d      }|j                  |       |dk(  r&|j                  | j                  |||d             C|s
|r|d| z  }||d}|dk(  r|j!                  |
|||	d       n|j!                  ||	dd        |d!v r|j!                  d"|i       nv|d#k(  ro|j                  d$d%      }|j                  d&      }|j                  d'      }|j                  d(      }|j!                  | d)| d*| d+| || d+| d,d-dd.d/       n|j	                  |       & |d0k(  s| j#                  ||      } ||fS # t        $ rF}t        |j                  d   t              r|j                  d   j                  dv s g }Y d }~d }~ww xY w)1Nkind)videoaudiobitrateencodingwidthheightmedia_file_sizere   protocolsuppliertransferFormatrk   rl   _)r'   	format_iddashF)mpd_idr}   hlsmp4m3u8_native)r"   entry_protocolm3u8_idr}   r   r   hds)f4m_idr}   -)r   filesizer   )r   r   tbrvcodecnone)abracodecr   )httphttpsr'   rtmpapplicationondemand
authString
identifierserverz:///?zhttp://www.bbc.co.ukz[http://www.bbc.co.uk/emp/releases/iplayer/revisions/617463_618125_4/617463_618125_4_emp.swfr    )r'   	play_pathapppage_url
player_url	rtmp_liver"   r   )rw   rg   r   rz   append	enumeraterm   r   _extract_mpd_formats_extract_m3u8_formatsr   r   exc_infor   status_extract_f4m_formatsrL   extract_subtitles)rO   rv   rj   r   r   urlsru   r   r   r   r   r   	file_sizeri   re   	conn_kindr   r   transfer_formatr   irl   r   r   fmtr   auth_stringr   r   s                                rV   r   z!BBCCoUkIE._process_media_selectorZ  s   	))/: W	HE99V$D))%eii	&:; 99Z0#EIIg$67$UYYx%89'		2C(DE	"&";";E"B M,J%>>&1Dt| D) *v 6I)~~j9H)~~j9H&0nn5E&FO ( AI AI5(&/0J0J:Wc0d&e FAs#NN'*/21#Qyk-B, 
 )F2t'@'@ ,y (A (O P(E1&#'#=#= $lm(1 $> $@D  t,(E1t'@'@ ,y (A (O P  (G%1WI6I)2(1  7?JJ).*0'.*2	(   JJ'.*2*0( 
 $'88JJ %t(  &/*4..
*SK*4..*FK)3)EJ%/^^H%=FJJ*23vha}Ak]'[-7*5a}'E,B /L-2',(  %s+[M,\ # 225,G	oW	Hp 	!!k  . &$.qzz!}i$H()

1(<(<
(J %#%D	&s   *L	M;MMc                    	 | j                  d| d|d      }g }i }|j                  dg       D ]  }|d   }|d   }|d   }|d   D ]  }	|	d	   }
|
d
vr|	j                  d      }t        |	j                  d            }| j                  |      \  }}|d   }|D ].  }dj	                  |      |d<   t        d |D              s*d|d<   0 ||z  }|xs i j                         D ]&  \  }}|j                  |g       j                  |       (   ||fS # t        $ r>}t        |j                  t              r|j                  j                  dk(  s Y d }~nd }~ww xY w| j                  |      S )Nz http://www.bbc.co.uk/programmes/z/playlist.jsonzDownloading playlist JSONallAvailableVersions	smpConfigr#   summaryitemsr   	programmeradioProgrammevpidr+   typesz, format_notec              3   $   K   | ]  }d |v  
 yw)AudioDescribedNrb   ).0xs     rV   	<genexpr>z/BBCCoUkIE._download_playlist.<locals>.<genexpr>  s     D/14Ds   ilanguage_preferencer   )r   rg   r   r   joinanyr   
setdefaultr   r   r   causer   r   _process_legacy_playlist)rO   playlist_idrq   r   r   version
smp_configr#   r$   itemr   rj   r+   version_formatsversion_subtitlesr   ftag
subformatsees                       rV   _download_playlistzBBCCoUkIE._download_playlist  s   	**2;-~N8:H GI#<<(>C I$[1
"7+(3&w/ ID<D#BB #'88F#3L*488J+?@H9=9V9VWc9d6O%6#G,E, ;+/99U+;-(DeDD7:A34; .G,=,C+J+J+L IZ!,,S"5<<ZHII	I(  Xw	QQ 	rxx338N 9O	
 ,,[99s   C D AD 	E!4EEc                 J    | j                  ||      }| j                  ||      S r\   )_download_legacy_playlist_url_extract_from_legacy_playlist)rO   r'   
display_idrq   s       rV   _process_legacy_playlist_urlz&BBCCoUkIE._process_legacy_playlist_url  s'    55c:F11(JGGrX   c                 ,    | j                  d| |      S )Nz&http://www.bbc.co.uk/iplayer/playlist/r  )rO   r   s     rV   r   z"BBCCoUkIE._process_legacy_playlist  s#    004[MBKQ 	QrX   c                 (    | j                  ||d      S )NzDownloading legacy playlist XML)rf   )rO   r'   r   s      rV   r  z'BBCCoUkIE._download_legacy_playlist_url  s    !!?A 	ArX   c                     |j                  d j                   d      }|J|j                  d      }|dk(  rd| d}n |dk(  rd| d}n|d	k(  rd| d
}nd| d| }t        |d       j	                  |      D ]  }|j                  d      }|dvr|j                  d j                   d      j
                  }|j                  d j                   d      }	|	|	j
                  nd }
 fd} ||      }t        |j                  d            }|r j                  |      \  }} j                  ||      \  }}|} 
fS )Nro   z}noItemsreasonpreAvailabilityzEpisode z is not yet availablepostAvailabilityz is no longer availablenoMediaz is not currently availablez is not available: TrG   r   r   z}titlez}summaryc                 n    d } ||        | j                  dj                   d      }| ||      S y )Nc                 n    dD ]0  }| j                  |      }|st        j                  d|      s.|c S  y )N)r   rC   z^[pb][\da-z]{7}$)rg   rematch)r   pvalues      rV   get_from_attributesz^BBCCoUkIE._extract_from_legacy_playlist.<locals>.get_programme_id.<locals>.get_from_attributes   s4    4 ) $ RXX.A5%I#(L)rX   ro   z	}mediator)findrp   )r   r  mediatorrO   s      rV   get_programme_idzABBCCoUkIE._extract_from_legacy_playlist.<locals>.get_programme_id  sF    )
 $D)99tD,A,A+B*%MN'.x88 (rX   r+   )	r  rp   rg   r   rr   textr   r   r   )rO   rq   r   no_itemsr  msgr   r   r#   description_elr$   r  rj   r+   r   r   s   `               rV   r  z'BBCCoUkIE._extract_from_legacy_playlist  s   ==4(=(='>i!HI\\(+F** -BC-- -DE9$ -HI -@I t44''1 	+D88F#D::MMD)>)>(?w"GHMME%]]T$2G2G1H	+RSN1?1K.--QUK	9 ,D1L"488J#78H%)%B%B<%P"%)%A%A$%T"*5	+8 UK7IMMrX   c                    | j                  |      }| j                  ||d      }| j                  d|dd       }|rt        |d      d }d }| j                  d|dd       }|rM| j	                  ||      j                  di       }t        |j                  d	            }|j                  d
      }|s$| j                  d| j                   d|d
dd       }|rf| j                  |      \  }	}
| j                  |d       xs | j                  d|d      }| j                  d|dd       }|s+| j                  d|      }n| j                  |      \  }}}}}	}
|||| j                  |d       ||	|
dS )NzDownloading video pagezP<div\b[^>]+\bclass=["\'](?:smp|playout)__message delta["\'][^>]*>\s*([^<]+?)\s*<rU   rB   TrG   z6mediator\.bind\(({.+?})\s*,\s*document\.getElementByIdplayerr+   r   z"vpid"\s*:\s*"()"F)r}   rB   )z)<h2[^>]+id="parent-title"[^>]*>(.+?)</h2>z,<div[^>]+class="info"[^>]*>\s*<h1>(.+?)</h1>r#   )z3<p class="[^"]*medium-description[^"]*">([^<]+)</p>z2<div[^>]+class="info_+synopsis"[^>]*>([^<]+)</div>r$   )r!   r#   r$   	thumbnailr+   r   r   )	_match_idrI   rM   r   _parse_jsonrg   r   	_ID_REGEXr   _og_search_title_html_search_regex_html_search_metar  _og_search_thumbnail)rO   r'   group_idwebpagerU   rj   r+   	tviplayerr  r   r   r#   r$   s                rV   _real_extractzBBCCoUkIE._real_extract  s   >>#&((h8PQ""_Wd # ,  66&&EXt ' -	 %%i:>>xLF"6::j#9:H!::f-L--"4>>"2"5we]a . cL !%!>!>|!LGY))'4)@ UDD[D[BCJGEUE ,,H - 6K "44]GLMQMdMdemMnJL%h &227D2I "
 	
rX   r\   ) r_   r`   ra   r   IE_DESCr$  
_VALID_URL_EMBED_REGEXrJ   _NETRC_MACHINEr   r   rp   _TESTSrW   	Exceptionrc   rm   rr   rw   rz   r   r   r   r   r   r  r  r   r  r  r,  rb   rX   rV   r   r   "   s:   GG6I
  !*{ +J ddL1JN t
 	K < > 6a	  	
 o G  _    J	
  l D  F    _	
  H V,    _	
 > Da!   J
 ? Pt  
 ? dY  
 r JE    "
 c   O:    "
" > fv	   6
" E ci	  
 D!
 ?!
 [!
 @!
 M!
 >!
 ?!
 F!
ctFl54i GF2-&
",K]"~":HHQA*NX1
rX   r   c            %           e Zd ZdZdZdZddg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$id-d.d/d0d1dd2d2d3d4d5d6d#d$id%d7d8dd9d:d9d;d#d$id<d.d=d>dd?d@dAdBdCdDdEdFdGdHddIdJdKdLd,dMdNdOdPddQdRdSdTdUdVdWdNdXdYddZd[d\d]d^d_d`dFdadbdcddd
deddadfddgdhdidjdkdldmd$id%dndodpdqdrdsddtd$dudvdwddxdydzd{d|d}d~dFddddddzdddd~dFddddddzdddd~dFdd$dudddddddzddFddddddddd<dNdddddddej                         gddddddddddddFddddddddddddg ddFdd$dudd$dugZ	e
 fd       Zd Zd Zd Z xZS )BBCIEr   BBCa  (?x)
        https?://(?:www\.)?(?:
            bbc\.(?:com|co\.uk)|
            bbcnewsd73hkzno2ini43t4gblxvycyac5aw4gnv7t2rccijh7745uqd\.onion|
            bbcweb3hytmzhn5d532owbu6oqadra5z3ar726vq5kgwwn6aucdccrad\.onion
        )/(?:[^/]+/)+(?P<id>[^/#?]+)r   zmobile-tablet-mainz-http://www.bbc.com/news/world-europe-32668511zworld-europe-32668511z8Russia stages massive WW2 parade despite Western boycottz$md5:00ff61976f6081841f759a08bf78cc9cr!   r#   r$   r   )r'   r(   playlist_countz)http://www.bbc.com/news/business-28299555zbusiness-28299555z%Farnborough Airshow: Video highlightsz<BBC reports and video highlights at the Farnborough Airshow.	   z	Save time)r'   r(   r7  r-   zRhttp://www.bbc.co.uk/blogs/adamcurtis/entries/3662a707-0af9-3149-963f-47bea720b460z$3662a707-0af9-3149-963f-47bea720b460BUGGERzdre:BUGGER  The recent revelations by the whistleblower Edward Snowden were fascinating. .{211}\.{3}$   z-http://www.bbc.com/news/world-europe-32041533p02mprgbr   z#Germanwings crash site aerial videozZre:(?s)Aerial video showed the site where the Germanwings flight 4U 9525, .{156} BFM TV\.$/   i*U20150324zShttps://ichef.bbci.co.uk/news/1024/media/images/81879000/jpg/_81879090_81879089.jpg)r!   r"   r#   r$   r+   	timestampupload_dater!  r%   Tr&   zFhttp://www.bbc.com/turkce/haberler/2015/06/150615_telabyad_kentin_cogu150615_telabyad_kentin_coguu*   YPG: Tel Abyad'ın tamamı kontrolümüzdez$md5:33a4805a855c9baf7115fcbde57e7025i*U20150615)r!   r"   r#   r$   r>  r?  znow SIMORGH_DATA with no videor,   zehttp://www.bbc.com/mundo/video_fotos/2015/06/150619_video_honduras_militares_hospitales_corrupcion_aw392750838150619_video_honduras_militares_hospitales_corrupcion_awuF   Honduras militariza sus hospitales por nuevo escándalo de corrupcióni6U20150619zhttps://a.files.bbci.co.uk/worldservice/live/assets/images/2015/06/19/150619132146_honduras_hsopitales_militares_640x360_aptn_nocredit.jpg)r!   r  r"   r#   r$   r>  r?  r!  z9http://www.bbc.com/news/video_and_audio/must_see/33376376p02w6qjczYJudge Mindy Glazer: "I'm sorry to see you here... I always wondered what happened to you"8   )r!   r"   r#   r+   r$   z404 Not Foundz@http://www.bbc.com/travel/story/20150625-sri-lankas-spicy-secretp02q6gc4z#Tasting the spice of life in JaffnauY   re:(?s)BBC Travel Show’s Henry Golding explores the city of Jaffna .{151} aftertaste\.$ib20220228   z6https://ichef.bbci.co.uk/images/ic/1920xn/p02vxvkn.jpg)r!   r"   r#   r$   r>  r?  r+   r!  )r'   r(   z:http://www.bbc.com/autos/story/20130513-hyundais-rock-starp018zqqgz!Hyundai Santa Fe Sport: Rock starz$md5:b042a26142c4154a6e472933cf20793di4ldT20141113zredirects to TopGear home page)r'   r(   r-   z1http://www.bbc.co.uk/sport/live/olympics/36895975p041vhd0z#Nigeria v Japan - Men's First RoundzDLive coverage of the first round from Group B at the Amazonia Arena.i,  z	BBC Sport	bbc_sport)r!   r"   r#   r$   r+   uploaderuploader_idzVideo no longer in pagez,http://www.bbc.com/sport/0/football/33653409p02xycnpz%Ronaldo to Man Utd, Arsenal to spend?zXre:(?s)BBC Sport\'s David Ornstein rounds up the latest transfer reports, .{359} here\.$iSU20150724zTre:https?://.+/.+media/images/69320000/png/_69320754_mmgossipcolumnextraaugust18.png   )r!   r"   r#   r$   r>  r?  r!  r+   z,http://www.bbc.com/sport/0/football/3447583634475836z=Jurgen Klopp: Furious football from a witty and winning coachzrFast-paced football, wit, wisdom and a ready smile - why Liverpool fans should come to love new boss Jurgen Klopp.   p034ppnvz'All you need to know about Jurgen KloppiV20151008g     ^@zWhttps://ichef.bbci.co.uk/onesport/cps/976/cpsprodpb/7542/production/_85981003_klopp.jpg)r!   r"   r#   r>  r?  r+   r!  
noplaylistz*http://www.bbc.co.uk/schoolreport/3574477935744779z.School which breaks down barriers in Jerusalemr!   r#   r   zTredirects to Young Reporter home page https://www.bbc.co.uk/news/topics/cg41ylwv43ptz,http://www.bbc.com/weather/features/33601775r<   z6http://www.bbc.co.uk/news/science-environment-33661876p02xzws1z"Pluto may have 'nitrogen glaciers'z$md5:6a95b593f528d7a5f2605221bc56912fzre:https?://.+/.+\.jpgi۲U20150725i   )r!   r"   r#   r$   r!  r>  r?  r+   z1https://www.bbc.com/news/av/world-europe-59468682p0b779gcz/Why France is making this woman a national herozjre:(?s)France is honouring the US-born 20th Century singer and activist Josephine .{208} Second World War.i/a20211129}   z$https://www.bbc.com/news/uk-68546268p0hj0lq7z5Nasser Hospital doctor describes his treatment by IDFzXre:(?s)Doctor Abu Sabha said he was detained by Israeli forces after .{276} hostages\."$ife20240311h   z*http://www.bbc.co.uk/sport/rowing/35908187zHhttps://www.bbc.co.uk/bbcthree/clip/73d0bbd0-abc3-4cea-b3c0-cdae21905eb1p06556y7z8Things Not To Say to people that live on council estatesuL  From being labelled a 'chav', to the presumption that they're 'scroungers', people who live on council estates encounter all kinds of prejudices and false assumptions about themselves, their families, and their lifestyles. Here, eight people discuss the common statements, misconceptions, and clichés that they're tired of hearing.ih  )r!   r"   r#   r$   r+   r!  z)https://www.bbc.co.uk/radio/play/b0b9z4ylb0b9z4vzz,Prom 6: An American in Paris and Turangalilaz$md5:51cf7d6f5c8553f197e58203bc78dff8zRadio 3bbc_radio_three)r!   r"   r#   r$   rN  rO  zIhttp://www.bbc.co.uk/learningenglish/chinese/features/lingohack/ep-181227p06w9twsz$md5:2fabf12a726603193a2879a055f72514z/Learn English words and phrases from this storyz8https://ichef.bbci.co.uk/images/ic/1200x675/p06pq9gk.jpg)r!   r"   r#   r$   r!  )r'   r(   add_iezWhttps://www.bbc.com/reel/video/p07c6sb6/how-positive-thinking-is-harming-your-happinessp07c6sb9z"The downsides of positive thinking   z)re:https?://.+/p07c9dsr\.(?:jpg|webp|png)20220223i\b)r!   r"   r#   r$   r+   r!  r?  r>  z*https://www.bbc.co.uk/sounds/play/w3ct5rgxp0hrw4nrz%Are our coastlines being washed away?zNre:(?s)Around the world, coastlines are constantly changing .{2000,} Images\)$i@"f20240419i4  z3https://ichef.bbci.co.uk/images/ic/raw/p0hrnxbl.jpgzWorld Servicebbc_world_serviceCrowdScience)r!   r"   r#   r$   r>  r?  r+   r!  rN  rO  serieschapterszhhttps://www.bbcnewsd73hkzno2ini43t4gblxvycyac5aw4gnv7t2rccijh7745uqd.onion/news/av/world-europe-63208576zehttps://www.bbcweb3hytmzhn5d532owbu6oqadra5z3ar726vq5kgwwn6aucdccrad.onion/sport/av/football/63195681c                     t         t        t        t        t        f}t        fd|D              rdS t        |         S )Nc              3   @   K   | ]  }|j                          y wr\   )suitable)r   ier'   s     rV   r   z!BBCIE.suitable.<locals>.<genexpr>  s     C"R[[-Cs   F)r   BBCCoUkArticleIEBBCCoUkIPlayerEpisodesIEBBCCoUkIPlayerGroupIEBBCCoUkPlaylistIEr   superrs  )clsr'   
EXCLUDE_IE	__class__s    ` rV   rs  zBBCIE.suitable  s>    !13KMbduv
C
CC 	,W%c*	,rX   c                    |j                  d      }|r|j                         D cg c]a  \  }}|j                  d      rK|d   ||j                  d      t        |j                  d      d      t        |j                  d            dc c}}g fS |j                  d      }|r| j	                  |      S |j                  d	      }|r.| j                  |      }| j                  ||      \  }	}	}	}	}
}|
|fS g g fS c c}}w )
NsourceFilesr'   r   r     r   )r'   r   r"   r   r   
externalIdre   )rg   r   r   r   r   r  r  )rO   
media_metavideo_idsource_filesr   r   rj   re   rq   r   r   r   s               rV   _extract_from_media_metazBBCIE._extract_from_media_meta  s    "~~m4 #/"4"4"6H )Q!%%, x&uuZ($QUU9%5t<'j(9: H JLL L "~~l300>> ~~f%99$?H-1-O-OPXZb-c*Aq!QI%%2v'Hs   A&C<c                 H    | j                  ||      \  }}}}}}	|||||||	dS )N)r!   r#   r$   r+   r>  r   r   r  )
rO   r'   r   r>  rj   r#   r$   r+   r   r   s
             rV   _extract_from_playlist_sxmlz!BBCIE._extract_from_playlist_sxml  sE    --c;? 	Ge[(GY & ""
 	
rX   c                 >$   QRSTUV  j                        T j                  T      V j                  VTi       }|j                  d      }|j                  d      xs; t	        j
                  dd j                  dVd            j                         xs d }|j                  d      xs  j                  Vd       }|s t         j                  g dVd	d             }g St	        j                  d
V      }|j                  t	        j                  dV             |r!|D cg c]  } j                  |T|       c}St	        j                  dV      }|r|D ]|  \  }	}
 j                  t        |
      Td      }|s'|j                  di       }|s<|j                  di       }|r|j                  d      }|sdt!        |t"              su|d   }|j                  d      }t%        |d   j                  d            }|d   j                  d      } j'                  |      \  }}Sj)                  |||||||d       |j                  di       j                  di       }|sd }dD ]Q  }|j                  | d      }|s	  j                  |T|      }|s|}n|d   |d<   |d   j                  |d          S |slSj)                  |        Sr j3                  ST||      S  j                  d j4                   dVdd       }|r j7                  d | t8              S  j                  d! j4                   d"d# j4                   d"d$ j4                   d%gVdd       }|r̉ j'                  |      \  }} j                   j                  d&Vd'd(      |d      }|j                  d)i       j                  d*i       }|j                  d+      xs  j;                  V      }|j                  d      xs  j                  V      }t        |j                  d,            xs |}||||||d-S  j                   j=                  d.Vd/d(d01      Td      }|r%t?        |d2 t@              xs i }|j                  d3      xs i }t?        |d4 t@              xs i } | j                  d5      }!|!r|d   } j'                  |!      \  }}|j                  d6      }"|j                  d7      }#|j                  d8      }$|!|||j                  d9      |"r|"jC                  d:d;      nd |j                  d      xs |j                  d<      |#r|#jC                  d=d      nd |t%        | j                  d            |$r|$gd>
S d d>
S  jE                  d?Vd@TdAi B      }%|%rtG        |%dCdDdEdFdGt@        hf      D ]  }&tG        |&dHdItH        htJ        f      }|s j'                  |      \  }}||&j                  d      xs  j;                  V      dJtG        |&dtH        hfddKtL        hfdLtH        hfdMtH        hfdN      ||dOc S   j                  tG        |%dP      Td      }'tG        |'dQ dRf      D ]  }(|(j                  d      r |(d   }) j'                  |)      \  }}|)||dS}n!|(dT   }) j7                  d |) t8        |)dUV      }|jO                  dtG        |%dCdWdXdYdZt        hf      itG        |(d[tP        htJ        fd\tH        htJ        fdtL        hfd]             |(j                  d^      r jS                  T|)      s|c S Sj)                  |        Sr.tG        |%dCdWdXd_tH        hf      xs |} j3                  ST||      S  jE                  d`VdaTtT        i b      UtG        Udcddt@        hf      }*tG        |*detH        hf      }|r|*j                  df      dgk(  rtG        |*dhditH        htJ        f      xs |} j'                  |      \  }}|||djtG        |*dkdltH        htJ        fdmdn hfddot$        hfdpdqtH        hfdpdetH        hfdrt        htJ        fdhdstH        hfdt      |tG        Ududvdw dhdx hfdydztV        hfdyd{tV        hfd|f      d}S tG        Ud~dTfdddtH        htJ        f      QQrtG        Ud~dQdtH        hf      })|)r}tG        Ud~dQfdtJ        f      }+Ufd}" j'                  |)      \  }}de|)itG        Ud~dQdtH        hfdtH        htJ        fd|"hfdt$        hfdf      ||tG        |+d7t        hf      dS  j7                  d Q t8        Q|T|      S  j                   j                  dVdd(      TtT        d      xs i },|,j                  d      xs i }-|-r$|-j                  d      xs i }.|.j                  d      }/|.j                  d      }0|/rQ|0rO j'                  |/      \  }}|/|0tY        |.d      |.j                  d      tM        |.j                  d            ||dS t?        |-d t@              }1|1r|1j                  d      xs |}|1j                  d6      }2g S|1d   D ]B  }3|3j                  d5      }|s j'                  |      \  }}Sj)                  |||2|||d       D  j3                  ST||      S  fd}4d }5 j                  dVdd       }| j                  dVdad(      }n j                  |xs dTd      } j                  |Td      }|rtG        |ddXd |5d      f      D ]H  }(tG        |(dd |5d      dd |5d      dt@        htJ        f	      }6 |4|6      }|s8Sj)                  |       J Sr j3                  ST||      S S fd}7tG        |dd f      D ]V  }8|8d   }9|9dk(  r |7t?        |8d t@                     &|9dXk(  s,tG        |8ddd |5dd      dt@        hf      D ]
  }: |7|:        X  j3                  ST||      S  jE                  dVdTi       };|;r8d}<tG        |;ddWdd |5dd      f      D ]  }(tG        |(dd |5d      dd |5d      dt@        htJ        f	      }6|(df   dk(  r	 |4|6      }ntG        |6dtH        hf      d cR}tG        |;dddRfdhf      }=tG        |=dd dtP        hfdtH        hfdt%        d      hfdf      }|rTRT|tG        |;dddtH        hf      dtG        |6dtH        hfdfdhfdkdltH        htJ        fdt%        d      hfd      }dU}<|rSj)                  |       |<s n Sr j3                  ST||      S T Vfd}>tG         j[                  VTi       d      }?tG        |?dEd |5d      dd |5d      dd |5d      dt@        htJ        f      }6|6rk |4|6      x}ra|j                  d      s+tG        |?dEd |5d      ddt%        d      htJ        f      |d<   Sj)                  |        j3                  ST||      S d j4                   d}@g S |>d      D ]N  }A|Aj                  di       j                  d«      }B|Bs't	        j\                  @B      s>Sj)                  B       P Sj                  t	        j                  d@ dĝV             Sr2 j3                  SD Ccg c]  }C j7                  |Cdū       c}CT||      S  |>dƫ      }D|Dsq j                  dǉVdd       }E|ErZ j                  ETd      }Fg }D|Fj                  di       j_                         D ]!  }GDj                  |Gj_                                # Ds~ j                   j                  dɉVdʫ      T      }Hg }I|HD ]P  }J|Jj                  d      }K|KsIj)                  K       Jj                  di       j                  d̫      Tk(  sMKg}D n DsI}Dg Sta        DdͬΫ      D ]  \  }L}M jc                  |MT      \  }}|s je                  dϫ      s0Mj                  dЫ      })|)stg        D      dk(  rTnT d=L })Mj                  dѫ      }|stg        D      dk(  r|n| dL }t%        Mj                  dӫ            xs tM        Mj                  d            }g }NMj                  di       j_                         D ]!  }ONj                  |Oj_                                # dMv rNj)                  Md          ND Ocg c]G  }O|Oj                  d֫      t%        |Oj                  d׫            t%        |Oj                  dث            dٜI }P}OSj)                  |)||P||||dڜ         j3                  ST||      S c c}w # t*        $ r?}t!        |j,                  t.              r|j,                  j0                  dk(  rY d }~ d }~ww xY wc c}Cw c c}Ow )Nr  r>  r#   z(.+)\s*-\s*BBC.*?$z\1 r$   )zA<meta[^>]+property="article:published_time"[^>]+content="([^"]+)"z/itemprop="datePublished"[^>]+datetime="([^"]+)"z"datePublished":\s*"([^"]+)datez.<param[^>]+name="playlist"[^>]+value="([^"]+)"z&data-media-id="([^"]+/playlist\.sxml)"zdata-playable=(["\'])({.+?})\1Fr|   settingsplaylistObjectr   r   r   r+   r   )r!   r#   r$   r>  r+   r   r   otherSettingsrq   )	streamingprogressiveDownloadUrlr   i  z6<div[^>]+\bclass=["\']video["\'][^>]+\bdata-pid=["\']()zgroup idz!https://www.bbc.co.uk/programmes/z#data-(?:video-player|media)-vpid="(r   z1<param[^>]+name="externalIdentifier"[^>]+value="(zvideoId\s*:\s*["\'](z)["\']z#var\s+digitalData\s*=\s*({.+?});?\nzdigital dataz{}pagepageInfopageNamepublicationDate)r!   r#   r$   r>  r   r   zP<script[^>]+id=(["\'])initial-data\1[^>]+data-json=(["\'])(?P<json>(?:(?!\2).)+)zinitial datajsonrA   c                     | d   d   d   S )NinitDatar   r   rb   r   s    rV   <lambda>z%BBCIE._real_extract.<locals>.<lambda>5  s    *g(>q(A rX   smpDatac                     | d   d   S )Nr   r   rb   r  s    rV   r  z%BBCIE._real_extract.<locals>.<lambda>7  s    AgJqM rX   	versionIDholdingImageURLdisplayDate
topicTitle
shortTitle$reciperawshortSummaryr   )
r!   r#   r   	alt_titler!  r$   r?  r   r+   
categoriesz$\bMorph\s*\.\s*setPayload\s*\([^,]+,zmorph payloadz?{(?s:(?:(?!</script>).)+(?:"leadMedia"|\\"videoData\\")\s*:.+)})contains_patternrB   body
components.props	leadMediaidentifiers)r   playablePidrY  )rawDurationformattedDurationspokenDurationmasterBrandmid)r$   r+   rN  rO  )r   r   )r  contentarticler  c                     |d   d   S )N	videoDatapidrb   r   vs     rV   r  z%BBCIE._real_extract.<locals>.<lambda>i  s    q~e?T rX   r  r!   r   r   r  T)url_transparentr  r  dateTimeInfodateTime)
iChefImageimage)r#   caption)r!  r#   r+   isLeadheadlinez(window\.__(?:PWA_)?PRELOADED_STATE__\s*=zpreload state)transform_sourcerB   
programmescurrentr!   typeplayable_itemtitles)tertiary	secondary)r!   r#   r   synopseslongmediumshort	image_urlc                 8    t        | j                  dd            S )N{recipe}r  r   replaceus    rV   r  z%BBCIE._real_extract.<locals>.<lambda>  s    +aiiPZ\aFb:c rX   r  networkshort_title))availabilityfrom)releaser  primary)r$   r!  r+   rN  rO  r>  ro  	tracklisttracksc                 $    t        |d   d         S )Noffsetstart)floatr  s     rV   r  z%BBCIE._real_extract.<locals>.<lambda>  s    ak'>R8S rX   c                 "    t        dddd|       S )Nr  r  r  z - )delim	from_dict)r   r  s    rV   r  z%BBCIE._real_extract.<locals>.<lambda>  s    }%{JeWX8Z rX   r  r  end)r#   
start_timeend_time)r   rp  entitiesarticlesc                 4    | j                  dd      d   k(  S )Nr   r   )rsplit)kr   r   s     rV   r  z%BBCIE._real_extract.<locals>.<lambda>  s    #q1A"1E1T rX   
assetVideovideosc                     |d   d   k(  S )Nr  r   rb   )r   r  asset_ids     rV   r  z%BBCIE._real_extract.<locals>.<lambda>  s    <9Kx9W rX   c                 *    t        dd| dd hf      S )Nr  imagesr'   c                 8    t        | j                  dd            S Nr  r  r  r  s    rV   r  z8BBCIE._real_extract.<locals>.image_url.<locals>.<lambda>  s    ;qyyE/J#K rX   )r   )image_idpreload_states    rV   r  z&BBCIE._real_extract.<locals>.image_url  s)    '"HhKL8N O OrX   )synopsisLongsynopsisMediumsynopsisShort)r#   r$   r!  r+   )r   r   r>  )r  r$   z((?s)bbcthreeConfig\s*=\s*({.+?})\s*;\s*<zbbcthree config)r  r}   payloadcurrentClip)posterimageUrl)r!   r#   r!  r$   r+   r   r   c                     | d   d   d   S )Nr  bbcMediarq   rb   r  s    rV   r  z%BBCIE._real_extract.<locals>.<lambda>  s    1Y<
#;J#G rX   )r!   r#   r!  r>  r   r   c                     t        | dddt        hf      }|syj                  |      \  }}|||dt        | dt        hfdfdhfd	d
t        ht        t        fdddt
        hfdddt        d      hfd      S )z)Extract single video from model structureversionsr   	versionIdNr  r#   r  c                 <    t        | j                  dd            S r  r   r  r  r'   s    rV   r  z:BBCIE._real_extract.<locals>.parse_model.<locals>.<lambda>  s    aiiPY[`Fa9b rX   r  r  r+   availableFromr  scale)r#   r!  r$   r+   r>  )r   strr   filterr   intr   )modelitem_idr   r   rO   r'   s       rV   parse_modelz(BBCIE._real_extract.<locals>.parse_model  s    "5:q+u*MNG!%!>!>w!GGY"& u%u-",/b.c!d$.0KcUTZ\_#`!+Q
SE B",a;UYCZB[!\' 	 rX   c                        fdS )Nc                     |d   v S )Nr  rb   )r   r  r   s     rV   r  z6BBCIE._real_extract.<locals>.is_type.<locals>.<lambda>  s    &	U 2 rX   rb   )r   s   `rV   is_typez$BBCIE._real_extract.<locals>.is_type  s	    22rX   z,window\.__INITIAL_DATA__\s*=\s*("{.+?}")\s*;zquoted preload statez*window\.__INITIAL_DATA__\s*=\s*({.+?})\s*;z"{}"storesarticleBodyContentr   r  blocks	aresMediaaresMediaMetadatac                    | sy t        | d t              xs g D ])  }|j                  d      }|j                  d      }|r|s+j                  |      \  }}d }t        | d t              }|rBg }|D ](  }	t        |	d t              }
|
s|j                  |
       * |rdj                  |      }d }t        | d t              xs g D ].  }t        |d       d	k(  st        |j                  d
            } n j                  |||j                  d      |||t        |      t        |j                  d            d       , y )Nc                     | d   d   S )Nru   r   rb   r  s    rV   r  z:BBCIE._real_extract.<locals>.parse_media.<locals>.<lambda>+  s    aj6I rX   r!   r#   c                     | d   d   S )Nr   r  rb   r  s    rV   r  z:BBCIE._real_extract.<locals>.parse_media.<locals>.<lambda>2  s    a	l86L rX   c                     | d   d   S )Nr  r  rb   r  s    rV   r  z:BBCIE._real_extract.<locals>.parse_media.<locals>.<lambda>6  s    AgJv<N rX   z

c                     | d   d   S )Nmetadatar   rb   r  s    rV   r  z:BBCIE._real_extract.<locals>.parse_media.<locals>.<lambda><  s    :w9O rX   c                     | d   S )Nlabelrb   r  s    rV   r  z:BBCIE._real_extract.<locals>.parse_media.<locals>.<lambda>=  s
    1W: rX   	Publishedr>  holdingImageUrlr+   )r!   r#   r!  r   r   r>  r$   r+   )
r   listrg   r   r
  r   r   r   r   r   )ru   r   r  
item_titler   r   	item_descr  r   blockr  	item_timemetaentriesrO   s                rV   parse_mediaz(BBCIE._real_extract.<locals>.parse_media(  sP   $U,I4PVTV D"hhtnG!%'!2J#
 )-)F)Fw)O&GY $I$U,LdSF"$%+ 5E#*52NPS#TD# 't 45 #(.G(<I $I '/OQU V \Z\ ""4)=>+M(9$((;:O(PI!" NN%!+%)XX.?%@#*%.%.'4Y'?$/0D$E	$ 	+rX   rE   c                     |d   S )Nnamerb   r  s     rV   r  z%BBCIE._real_extract.<locals>.<lambda>K  s
    6 rX   r+  zmedia-experiencec                     | d   d   d   S )NrE   initialItem	mediaItemrb   r  s    rV   r  z%BBCIE._real_extract.<locals>.<lambda>N  s    &	-8PQ\8] rX   )N)r  r  ru   zwindow\s*\.\s*SIMORGH_DATA\s*=zsimorgh datapageDatalegacyMediablockIdpromoc                     | d   k(  r| S d S )Nr!   rb   )r   block_ids    rV   r  z%BBCIE._real_extract.<locals>.<lambda>i  s    $8(;1  rX   c                     t        |d         S )Nr'   )r   r  s     rV   r  z%BBCIE._real_extract.<locals>.<lambda>j  s    Q\]^_d]eQf rX   r'   formatr   r  r  )r'   r"   r   )r!   r  r   r$   r  c                 <    t        | j                  dd            S r  r  r  s    rV   r  z%BBCIE._real_extract.<locals>.<lambda>w  s    WSRSR[R[\eglRmEn rX   firstPublished)r#   r!  r$   r>  c           
      j    t        t        d fdt        j                  |       D                    S )Nc              3   F   K   | ]  }j                  |d         yw)Fr|   N)r#  )r   sr   rO   s     rV   r   z;BBCIE._real_extract.<locals>.extract_all.<locals>.<genexpr>  s+      &7   Ku =&7s   !)r"  r  r  rh   )patternr   rO   r*  s    rV   extract_allz(BBCIE._real_extract.<locals>.extract_all  s1    t &7GW5&7 8 9 9rX   )r  	pagePropsr  contentsmediaMetadataz*https?://(?:www\.)?bbc\.co\.uk/(?:[^/]+/)+z(?:\b[^"]+)?znew\s+SMP\(({.+?})\)playerSettingsexternalEmbedUrlzsetPlaylist\("(z)"\)BBCCoUkzdata-media-meta='({[^']+})'z$mediaAssetPage\.init\(\s*({.+?}), "/zmedia assetzW<script[^>]+class="vxp-playlist-data"[^>]+type="application/json"[^>]*>([^<]+)</script>zplaylist dataadvertassetIdr   )r  ignore_no_formatsr  r  z	 - Video durationInSecondsr  r  re   r   r   )r'   r   r   )r!   r#   
thumbnailsr+   r>  r   r   )4r"  rI   _search_json_ldrg   r  sub_generic_titlestrip_og_search_descriptionr   rM   rh   r   r  r#  r   r   r"  r   r   r   r   r   r   r   playlist_resultr$  
url_resultr   r%  r&  r   dictr  _search_jsonr   r
  r   r   rL   r   _yes_playlistr   r   r
   _search_nextjs_datar  valuesr   r  	get_paramlen)WrO   r'   json_ld_infor>  playlist_titleplaylist_description	playlistsplaylist_urldata_playablesr   data_playable_jsondata_playabler  playlist_objectr   r#   r$   r+   rj   r   r   rq   entrykeyinfor   r)  digital_data	page_infoinitial_data	init_datasmp_data	clip_data
version_idr  display_datetopic_titlemorph_payload
lead_mediar  
video_datar  current_programmer  bbc3_configr  clip	clip_vpid
clip_titlebbc3_playlistr!  	bbc3_itemr  r  r  r)  respr+  r%  simorgh_datadone
media_datar=  	next_data	EMBED_URLr  	embed_urlentry_mediasmedia_assetmedia_asset_pager   vxp_playlistplaylist_mediasr   ru   numr  r  r  rH  r  r4  r(  r   r  r*  sW   ``                                                                               @@@@@@rV   r,  zBBCIE._real_extract  s   nnS)((k:++G["+M $$[1	%))'2 hbff!5$*=*=b'SU*=*V7XX]X]X_hcg 	  ,//   Q"99'49P 	 %d&8&81 	 '9 '/ 0I  JJPRYZ	$MwWX %./  00{IV/G
 $EwO)7 66%% $ 0 0 !34k !1 !P$(,,Z< '/ll3CR&HO& / 3 3G < Zt%<$3G$<E*9*=*=i*HK'258<<
3K'LH+08<<+?L151N1N|1\.GY#NN&2)./:-6,4+2-6,  $1#4#4_b#I#M#MjZ\#]#$(E'K */7||se3K/H'3$,!*+/+K+K(4k9,ND+0049=gg(-i(8(?(?Y(P*&  % 'u 5m66p ''nNbcc %%EdnnEUUVWZ & / ??3H:>	K K ))3DNN3C2FA$..AQQST$T^^$4F;= VT	 * + !%!>!>|!LGY++"":G^]a # cE , +L %((488RHIMM*-O1F1Fw1OE#--6^$:U:UV]:^K%imm4E&FGT9I"*&"&  ''(?(?_^T )@ )ABMUZ ( \ A4I OLN  }}Y/52H*A4HNBI"{3J )%)%B%B:%N"$LL):;	(}}];'mmL9 %"&!*|!<HQ!2!29e!DW[#+<<	#:#[immN>[DP<#7#7R#@VZ!* +IMM*,E F3>;-  EI   ))3Wo{_ *  *=L#wdV;M N 
+JH_beafhk8lm#%)%B%B<%P"&'^^G4V8M8Mg8V #:(1C5'9%/1gjxiy$z%2SE$:(-u~	0   '!* $ ##L A6 %78C5 $ RD*42TVa1bc &
>>&))&1H)-)F)Fx)P&GY&#*%.E  *%0H OO;H:F	 $ , 8E m	9njS`Ra>c "	 #:&=}c%R"6s!C%/.1A$B0 		 	 >>(+D4F4F{T\4] Lu%5&6 !-mIy*se>E "F "XIW ++[.:NP P ))7[:r * S )ySWRX8YZ#$5se}E-11&9_L !2X?X[^Z_ad4efxjxE!%!>!>|!LGY"" 0$.0KcUTW#X"-0c/d!e!+W{m D!*MC5 A$-tcU#;"QTaSbdg!h'SE:3 	 '(+S"* .Z -[ "\'/=/&J%-u}o$F	V9  2  
$T!cUC0) * #MJ(TZ]`\a3bcH&}
,WY\7^ _O
 &*%B%B8%L"("=:x")C5!1([^a]bdg'h&')%5%/+$?	T 3   '!*!-g7W!X  7zBIn 4 ' 6 6
 &&;W!4  1 *E	 ' C I GI	 	
 //),2;;}-3D(I'*JZ%)%B%B9%M"#'!)$0F!G#'88M#: .txx
/C D&!*  $GM !.!2!27!;!M~)--.?@	!.w!7 I#,==#=L' )-)F)F|)T&GYNN*!/%.%.#*%.$  ++[.:NP P	&	3 ));W"D * 2 --=w . /L  ++L,BFKW\+]L''k'O*<i)=ww?O:Q R *
$ZXw{';Xw/B'CdVS2* + $E*NN5)* ++[.:NP P!F %\F<R3ST +F|--.]_c deY&!-d"$@(#GW5w5H "I + $E*++ ''n6JL L ((-wK ) 5 D*<	7Hgg}>]:_ ` #
$ZXw{';Xw/B'CdVS2* + f%0'.E&259se:L&MtOHe!-l"GWEF=H "IJ +:
Df %}5 (3%0 )Kd,C+DEi 8 G
 "**5'.+7zSZ\ehkglFm+n	!
 +5*1C5)9.8;n:o-p0:<WZ]Y^`c/d.>SWAX@Y-Z	3 !  $NN5)G#H ++[.:NP P	9 !!9!9';XZ!9![!?A	YWW-Xww/Xw7dVS	)" #
 {511e199[)%1)W[%97+D"9!:C>A &Bk" NN5!''n6JL L
 B$..AQQ]^	 !89 	*E		"2B7;;<NOIRXXi;y)	* 	rzzyk.9 	:''BIJ3J^-AC C
 ;<,,7 - 6K #'#3#3KTY#3#Z -11(B?FFH 2EMM%,,.12   ++""n_. 	L
 !O$ )&&u-88Hb)--i8KG#WF ((q9 #	OC!%!>!>z;!WGY4>>2E#F!~~l3H*-f+*:;;-qQTPU@VNN9-E*-f+*:>BRR[\_[`@a":>>2E#FGu>ZdZhZhisZtKuHF#"5<<> .elln-.*$j12 "	#  yy($UYYw%78%eii&9: #J # NN($&"& 7#	J ##G[.J^__W/j (6 !* (2!''9'E!''..\_J_(0$)!*R Kz#s>   *AG7AG
>AHEAAHG
	AHG3AHHAHHAH)r_   r`   ra   r   r-  r.  r   r   ie_keyr1  classmethodrs  r  r  r,  __classcell__)r|  s   @rV   r4  r4  I  s   GG(J 	K ?)OA

 	 ;%<Y

 
 d8 C

 
 ?:x#%n	
 T
( X/AA#%
 T
 1!& wT]c#% f	
 T
$ Ktz
 T
    R:w#%Q	
 L8A#%
 1 C:a#&
 *  ><v#%p	
 >T P

 	 >>#%r
 $
" <E
 f	 > H9A2#%	
	  CF I2#%	
 6Lv2#%	
 < ZO j2
 ;CA!,
   [;LS
 ##%&
 i9?E%#	
 <<l#%N'.$
$ z wG	fFP	 , ,
6
G	`rX   r4  c                   6    e Zd ZdZdZdZdddddd	d
gdZd Zy)ru  zGhttps?://(?:www\.)?bbc\.co\.uk/programmes/articles/(?P<id>[a-zA-Z0-9]+)zbbc.co.uk:articlezBBC articleszhttp://www.bbc.co.uk/programmes/articles/3jNQLTMrPlYGTBn0WV6M2MS/not-your-typical-role-model-ada-lovelace-the-19th-century-programmer3jNQLTMrPlYGTBn0WV6M2MSz}Calculating Ada: The Countess of Computing - Not your typical role model: Ada Lovelace the 19th century programmer - BBC FourzXHannah Fry reveals some of her surprising discoveries about Ada Lovelace during filming.r6     rC  )r'   r(   r7  rg  c                 >   | j                  |      }| j                  ||      }| j                  |      }| j                  |      j	                         }t        j                  d|      D cg c]  }| j                  |       }}| j                  ||||      S c c}w )Nz-<div[^>]+typeof="Clip"[^>]+resource="([^"]+)")	r"  rI   r%  rM  rL  r  rh   rO  rN  )rO   r'   r   r*  r#   r$   programme_urlr(  s           rV   r,  zBBCCoUkArticleIE._real_extract  s    nnS)((k:%%g.11':@@BGIzz<gHG Hm4??=1 H H ##G[%MMHs   ,BN)r_   r`   ra   r.  r   r-  _TESTr,  rb   rX   rV   ru  ru    s?    [J!GG W+ Uu

 +	ENrX   ru  c                       e Zd Zd Zd Zy)BBCCoUkPlaylistBaseIEc              #   H  K   dt         j                  j                  t         j                  j                  |      j                        v }t        j                  d      D ]  }t        j                  | j                  t        j                  z  |      D ]5  }| j                  | j                  |z  t        j                                7 |r y | j                  d|dd d      }|s y | j!                  t         j                  j#                  ||      |d| |      } y w)Nr  r   zW<li[^>]+class=(["\'])pagination_+next\1[^>]*><a[^>]+href=(["\'])(?P<url>(?:(?!\2).)+)\2znext page urlr'   rA   zDownloading page )urllibparser   urlparsequery	itertoolscountr  rh   _VIDEO_ID_TEMPLATEr   r$  rO  _URL_TEMPLATEr  rM   rI   r   )rO   r*  r'   r   single_pagepage_numr  	next_pages           rV   _entrieszBBCCoUkPlaylistBaseIE._entries  s     5 5LL!!#&,,!. .!* 	:HJJ++i.A.AA7L Goo&&193C3C3EG GG **j$e + EI ,,$$S)4k#H:.:G	:s   D D"c                     | j                  |      }| j                  ||      }| j                  |      \  }}| j                  | j	                  |||      |||      S r\   )r"  rI   _extract_title_and_descriptionrN  r  )rO   r'   r   r*  r#   r$   s         rV   r,  z#BBCCoUkPlaylistBaseIE._real_extract*  sa    nnS)((k:!@@I{##MM'34- 	-rX   N)r_   r`   ra   r  r,  rb   rX   rV   r  r    s    :&	-rX   r  c                   P    e Zd Zdej                   dZedd       Zd Zd Z	d Z
y)	BBCCoUkIPlayerPlaylistBaseIEz1https?://(?:www\.)?bbc\.co\.uk/iplayer/%s/(?P<id>r  c                 &    t        | fd      S )Nc                     |       S r\   rb   )r   default_keyra  s    rV   r  z;BBCCoUkIPlayerPlaylistBaseIE._get_default.<locals>.<lambda>;  s    !C&*= rX   )r   )episodera  r  s    ``rV   _get_defaultz)BBCCoUkIPlayerPlaylistBaseIE._get_default9  s    w =>>rX   c                 X    |j                  | j                        xs i }t        |d      S )N)larger  small)rg   _DESCRIPTION_KEYr
   )rO   rE   synopsiss      rV   _get_descriptionz-BBCCoUkIPlayerPlaylistBaseIE._get_description=  s)    88D1128b">??rX   c              #     K   | j                  | j                  |||dz   |            }|D ]  }| j                  |      }|j                  d      }|s(d }	| j	                  |      }
|
r|
j                  dd      }	| j                  |dd      }d|| j                  |d      d	|z   |	| j                  |      |r|gnd | j                  |d
      t        j                         d	  y w)Nr   r!   r  r  labelscategoryr'   subtitlez&https://www.bbc.co.uk/iplayer/episode/r#   )	_typer!   r#   r'   r!  r$   r  ro  r  )_get_elements	_call_api_get_episoderg   _get_episode_imager  r  _get_episode_fieldr  r   r  )rO   rj   per_page	series_idr  elementselementr  
episode_idr!  r  r  s               rV   _fetch_pagez(BBCCoUkIPlayerPlaylistBaseIE._fetch_pageA  s     %%dnn(D1Hi'9 : 	G''0G T*JI++G4E!MM*e<	(((JGH 00*E?*L&#44W=,4xj$11'7C#**,
 
	s   C%C'c                    | j                  |      }t        |      }|j                  dd g      d   }|j                  dd g      d   }|rdn| j                  }t	        j
                  | j                  |||      }|r |t        |      dz
        nt        || j                        }| j                  | j                  |d            }	| j                  ||| j                  |	      | j                  |	            S )NseriesIdr   r  $   r   )r"  r   rg   
_PAGE_SIZE	functoolspartialr  r  r   _get_playlist_datar  rN  _get_playlist_titler  )
rO   r'   r  qsr  r  r  
fetch_pager(  playlist_datas
             rV   r,  z*BBCCoUkIPlayerPlaylistBaseIE._real_extractZ  s    nnS!c]FF:v.q1	vvftf%a(24??&&t'7'7h	R
/3*SY]+9J:W[WfWf9g//sA0FG##S$22=A!!-02 	2rX   Nr  )r_   r`   ra   r   r$  _VALID_URL_TMPLstaticmethodr  r  r  r,  rb   rX   rV   r  r  6  s:    J9K^K^J__`aO? ?@22rX   r  c            	           e Zd ZdZej
                  dz  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	gZdZdZ	d Z
d Zed        Zed        Zd"dZed         Zd! Zy)#rv  zbbc.co.uk:iplayer:episodesepisodesz.http://www.bbc.co.uk/iplayer/episodes/b05rcz9vb05rcz9vzThe Disappearancez$md5:58eb101aee3116bad4da05f91179c0cbr6     r'   r(   playlist_mincountz=https://www.bbc.co.uk/iplayer/episodes/b094m5t9/doctor-fosterb094m5t9zDoctor Fosterz$md5:5aa9195fad900e8e14b52acd765a9fd6
   zOhttps://www.bbc.co.uk/iplayer/episodes/b094m5t9/doctor-foster?seriesId=b094m6nv   z:https://www.bbc.co.uk/iplayer/episodes/m0004c4v/beechgrovem0004c4v
BeechgrovezLGardening show that celebrates Scottish horticulture and growing conditions.%   zAhttps://www.bbc.co.uk/iplayer/episodes/m0004c4v/beechgrove?page=2r   d   r  c                 &    | j                  |d      S )Nr  r  rO   r  s     rV   r  z+BBCCoUkIPlayerEpisodesIE._get_episode_image  s      '22rX   c                 &    | j                  ||      S r\   r  rO   r  fields      rV   r  z+BBCCoUkIPlayerEpisodesIE._get_episode_field  s      %00rX   c                     | d   d   S )Nr  resultsrb   rE   s    rV   r  z&BBCCoUkIPlayerEpisodesIE._get_elements  s    J	**rX   c                 ,    | j                  d      xs i S )Nr  ry   r  s    rV   r  z%BBCCoUkIPlayerEpisodesIE._get_episode  s    {{9%++rX   Nc           
          |||d}|r||d<   | j                  d|ddit        j                  d|d      j                               d	   d
   S )N)r!   r  perPagesliceIdz https://graph.ibl.api.bbc.co.uk/zContent-Typezapplication/json 5692d93d5aac8d796a0305e895e61551)r!   	variables)rF   rE   rE   r   )r   r  dumpsencode)rO   r  r  r  r  r  s         rV   r  z"BBCCoUkIPlayerEpisodesIE._call_api  s}    
	
 #,Ii "". 2>JJ8&   vx #   ! "-. 	.rX   c                     | S r\   rb   r  s    rV   r  z+BBCCoUkIPlayerEpisodesIE._get_playlist_data  s    rX   c                 &    | j                  |d      S Nr#   r  rO   rE   s     rV   r  z,BBCCoUkIPlayerEpisodesIE._get_playlist_title  s      w//rX   r   Nr_   r`   ra   r   r  r  r.  r1  r  r  r  r  r  r  r  r  r  r  rb   rX   rV   rv  rv  h  s   *G-==
JJ?(A

  O$A

  	 a$A

 	 L!i

  	 S!i

 	G,FZ J!31 + + , ,.   0rX   rv  c                       e Zd ZdZej
                  dz  Zddddddd	d
dddddd	ddddddd	gZdZdZ	d Z
d Zed        Zed        ZddZed        Zd Zy)rw  zbbc.co.uk:iplayer:grouprC   z+http://www.bbc.co.uk/iplayer/group/p02tcc32p02tcc32zBohemian Iconsz$md5:683e901041b2fe9ba596f2ab04c4dbe7r6  r  r  z,https://www.bbc.co.uk/iplayer/group/p081d7j7p081d7j7zMusic in Scotlandz?Perfomances in Scotland and programmes featuring Scottish acts.r<  z3https://www.bbc.co.uk/iplayer/group/p081d7j7?page=2      r  c                 (    | j                  |dd      S )Nr  standardr  r  s     rV   r  z(BBCCoUkIPlayerGroupIE._get_episode_image  s      (J??rX   c                 $    |j                  |      S r\   ry   r  s      rV   r  z(BBCCoUkIPlayerGroupIE._get_episode_field  s    {{5!!rX   c                     | d   S )Nr  rb   r  s    rV   r  z#BBCCoUkIPlayerGroupIE._get_elements  s    JrX   c                     | S r\   rb   r  s    rV   r  z"BBCCoUkIPlayerGroupIE._get_episode  s    rX   Nc                 >    | j                  d| d|||d      d   S )Nz'http://ibl.api.bbc.co.uk/ibl/v1/groups/z	/episodes)r  r  )r  group_episodes)r   )rO   r  r  r  r  s        rV   r  zBBCCoUkIPlayerGroupIE._call_api  s>    ""5cU)D$ # 
  ! 	!rX   c                     | d   S )NrC   rb   r  s    rV   r  z(BBCCoUkIPlayerGroupIE._get_playlist_data  s    G}rX   c                 $    |j                  d      S r  ry   r  s     rV   r  z)BBCCoUkIPlayerGroupIE._get_playlist_title  s    xx  rX   r  r  rb   rX   rV   rw  rw    s    'G-==GJ =%A

  	 >(\

  	 E(\

  	%F8 J!@"      !  !rX   rw  c                       e Zd ZdZdej
                   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gZ	d Z
y)rx  zbbc.co.uk:playlistz1https?://(?:www\.)?bbc\.co\.uk/programmes/(?P<id>z)/(?:episodes|broadcasts|clips)z"http://www.bbc.co.uk/programmes/%szdata-pid=["\'](%s)z.http://www.bbc.co.uk/programmes/b05rcz9v/clipsr  z$The Disappearance - Clips - BBC Fourz0French thriller serial about a missing teenager.r6     r  z5http://www.bbc.co.uk/programmes/b00mfl7n/clips?page=1b00mfl7nzFrozen Planet - Clips - BBC Onez$md5:65dcbf591ae628dafe32aa6c4a4a0d8c   z.http://www.bbc.co.uk/programmes/b00mfl7n/clips   z;http://www.bbc.co.uk/programmes/b05rcz9v/broadcasts/2016/06Tr<   z8http://www.bbc.co.uk/programmes/b055jkys/episodes/playerc                 R    | j                  |d      }| j                  |      }||fS )NFr|   )r%  rM  )rO   r*  r#   r$   s       rV   r  z0BBCCoUkPlaylistIE._extract_title_and_description+  s2    %%gU%;11':k!!rX   N)r_   r`   ra   r   r   r$  r.  r  r  r1  r  rb   rX   rV   rx  rx    s    "GEiFYFYEZZyzJ8M.?;M

  G6A

  	 @6A

 !	 M @ JA#FJ"rX   rx  ))r  r  r  r  urllib.parser  xml.etree.ElementTreer   commonr   networking.exceptionsr   utilsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r4  ru  r  r  rv  rw  rx  rb   rX   rV   <module>r     s       	   ! -     0d
 d
Nl`I l`^N} N<-M -@/2= /2dV0; V0r=!8 =!@-"- -"rX   