U
    MfC                     @   s   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! G d	d
 d
eZ"G dd deZ#G dd deZ$G dd deZ%G dd deZ&dS )    N   )InfoExtractor   )compat_etree_fromstring)Request)network_exceptions)ExtractorError
clean_htmldetermine_extfloat_or_noneformat_fieldget_element_by_id	get_firstint_or_nonejoin_nonempty
js_to_jsonmerge_dictsparse_countparse_qs	qualitiesstr_or_nonetraverse_objtry_geturl_or_noneurlencode_postdataurljoinvariadicc                (   @   s  e Zd ZdZddgZdZdZdZdZdZ	dZ
d	d
ddddddddde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)ed*dd+d,d-d.dd/d0d1d2ddd3d4d5d6dd7d8d9d:d d;d<d=dd>d?d9d:d d@dAdBdCddDddEdFdGdHdId3dJdKdLddMdNdOdPdQdedRedSdTdUdVdWddXdYdZd[d\d]eded^d_d`daidbdcddddedfdgdhddiddjdkdlddmdndodpdqdrdsddjdtduddvdwdxdydzd{dd|d}
dd~ddddddddedddddddddddddddeddddadddadddadddadddadddadddadddadddadddddddddddededd`daidbdddddeddddd$dddddaddddidddddddddddddjddddddddddjddaddddidddddddddddd˜dg ZdZddiZddЄ Zdd҄ ZddԄ ZdS )
FacebookIEa  (?x)
                (?:
                    https?://
                        (?:[\w-]+\.)?(?:facebook\.com|facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd\.onion)/
                        (?:[^#]*?\#!/)?
                        (?:
                            (?:
                                permalink\.php|
                                video/video\.php|
                                photo\.php|
                                video\.php|
                                video/embed|
                                story\.php|
                                watch(?:/live)?/?
                            )\?(?:.*?)(?:v|video_id|story_fbid)=|
                            [^/]+/videos/(?:[^/]+/)?|
                            [^/]+/posts/|
                            events/(?:[^/]+/)?|
                            groups/[^/]+/(?:permalink|posts)/|
                            watchparty/
                        )|
                    facebook:
                )
                (?P<id>pfbid[A-Za-z0-9]+|\d+)
                zd<iframe[^>]+?src=(["\'])(?P<url>https?://www\.facebook\.com/(?:video/embed|plugins/video\.php).+?)\1z(?x)<div[^>]+
                class=(?P<q1>[\'"])[^\'"]*\bfb-(?:video|post)\b[^\'"]*(?P=q1)[^>]+
                data-href=(?P<q2>[\'"])(?P<url>(?:https?:)?//(?:www\.)?facebook.com/.+?)(?P=q2)z\https://www.facebook.com/login.php?next=http%3A%2F%2Ffacebook.com%2Fhome.php&login_attempt=1z]https://www.facebook.com/checkpoint/?next=http%3A%2F%2Ffacebook.com%2Fhome.php&_fb_noscript=1Zfacebookz-https://www.facebook.com/video/video.php?v=%szZhttps://www.facebook.com/video/tahoe/async/%s/?chain=true&isvideo=true&payloadtype=primaryz>https://www.facebook.com/radiokicksfm/videos/3676516585958356/Z3676516585958356mp4zdr Adam Przygodaz$md5:34675bda53336b1d16400265c2bb9b3bzRADIO KICKS FMZ20230818i/'dre:^https?://.*Z100063551323670g|?5^x@r   )idexttitledescriptionuploaderupload_date	timestamp	thumbnailuploader_idduration
view_countconcurrent_view_counturl	info_dictz<https://www.facebook.com/video.php?v=637842556329505&fref=nfZ 6a40d33c0eccbb1af76cf0485a052659Z637842556329505zOre:Did you know Kei Nishikori is the first Asian man to ever reach a Grand SlamzTennis on FacebookZ20140908iTr    r!   r"   r$   r%   r&   zRequires logging in)r-   md5r.   skipz4https://www.facebook.com/video.php?v=274175099429670Z274175099429670ZAsif zAsif Nawab ButtZ20140506iV"iSZHpfbid028wxorhX2ErLFJ578N6P3crHD3PHmXTCqCvfBpsnbSLmbokwSY75p5hWBjHGkG4zxlg)\``@)r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r+   zVideo with DASH manifestz4https://www.facebook.com/video.php?v=957955867617029Z b2c28d528273b323abe5c6ab59f0f030Z957955867617029zPWhen you post epic content on instagram.com/433 8 million followers, this is ...zDemy de ZeeuwZ20160110iYV)noter-   r0   r.   r1   z8https://www.facebook.com/maxlayn/posts/10153807558977570Z 037b1fa7f3c2d02b7a0d7bc16031ecc6Z544765982287235z)"What are you doing running in the snow?"ZFailArmy)r    r!   r"   r$   z
Video gonezOhttps://m.facebook.com/story.php?story_fbid=1035862816472149&id=116132035111903Z 1deb90b6ac27f7efcf6d747c8a27f5e3Z1035862816472149z;What the Flock Is Going On In New Zealand  Credit: ViralHogzS. Saintzswf params escapedz<https://www.facebook.com/barackobama/posts/10153664894881749Z 97ba073838964d12c70566e0085c2b91Z10153664894881749zPAverage time to confirm recent Supreme Court nominees: 67 days Longest it's t...i,VZ20160223zBarack Obama)r    r!   r"   r'   r&   r%   r$   zGif on giphy.com gonez6https://www.facebook.com/cnn/videos/10155529876156509/Z ca63897a90c9452efee5f8c40d080e25Z10155529876156509z%Holocaust survivor becomes US citizenu   She survived the holocaust — and years later, she’s getting her citizenship so she can vote for Hillary Clinton http://cnn.it/2eERh5fiXZ20161030ZCNNZ100059479812265gw/=F@)r    r!   r"   r#   r&   r%   r$   r'   r*   r(   r+   r)   r-   r0   r.   zAhttps://www.facebook.com/yaroslav.korpan/videos/1417995061575415/Z1417995061575415u@   Довгоочікуване відео | By Yaroslav - Facebooku'   Довгоочікуване відеоisXZ20170209zYaroslav KorpanZGpfbid06AScABAWcW91qpiuGrLt99Ef9tvwHoXP6t8KeFYEqkSfreMtfa9nTveh8b2ZEVSWlg+9@)r    r!   r"   r#   r&   r%   r$   r(   r+   r'   r*   r)   skip_downloadT)r-   r.   paramsz>https://www.facebook.com/LaGuiaDelVaron/posts/1072691702860471Z1072691702860471z$md5:ae2d22a93fbb12dad20dc393a869739diXZ20161024u   La Guía Del Varón)r    r!   r"   r&   r%   r$   r'   )r-   r.   r1   zLhttps://www.facebook.com/groups/1024490957622648/permalink/1396382447100162/Z202882990186699z1birb (O v O") | Hello? Yes your uber ride is herezlHello? Yes your uber ride is here * Jukin Media Verified * Find this video and others like it by visiting...i9XZ20170202zElisabeth AhtnZ100013949973717)r    r!   r"   r#   r&   r%   r$   r(   zHhttps://www.facebook.com/groups/1645456212344334/posts/3737828833107051/Z1569199726448814zPence MUST GO!zVickie Gentry shared a memory.ideZZ20171124zVickie GentryZGpfbid0FuZhHCeWDAxWxEbr3yKPFaRstXvRxgsp9uCPG6GjD4J2AitB35NUAuJ4Q75KcjiDlgRb@)
r    r!   r"   r#   r&   r%   r$   r(   r'   r)   zkhttps://www.facebook.com/attn/posts/pfbid0j1Czf2gGDVqeQ8KiMLFm3pWN8GxsQmeRrVhimWDzMuKQoR8r4b1knNsejELmUgyhlZ6968553779868435z$md5:2f2fcf93e97ac00244fe64521bbdb0cbzATTN:Z20231207g`@Z100064451419378i^re)r    r!   r#   r$   r%   r"   r)   r(   r*   r'   r&   zhttps://www.facebook.com/permalink.php?story_fbid=pfbid0fqQuVEQyXRa9Dp4RcaTR14KHU3uULHV1EK7eckNXSH63JMuoALsAvVCJ97zAGitil&id=100068861234290Z270103405756416z
Lela EvanszToday Makkovik's own Pilot Mandy Smith made her inaugural landing on the airstrip in her hometown. What a proud moment as we all cheered and...ZGpfbid0shZJipuigyy5mqrUJn9ub5LJFWNHvan5prtyi3LrDuuuJ4NwrURgnQHYR9fywBeplZ20231228iegd;Ox@)r    r!   r"   r#   r'   r$   r(   r%   r&   r)   r*   zhttps://www.facebook.com/story.php?story_fbid=pfbid0Fnzhm8UuzjBYpPMNFzaSpFE9UmLdU4fJN8qTANi1Dmtj5q7DNrL5NERXfsAzDEV7l&id=100073071055552r-   Zonly_matchingz6https://www.facebook.com/video.php?v=10204634152394104zAhttps://www.facebook.com/amogood/videos/1618742068337349/?fref=nfzbhttps://www.facebook.com/ChristyClarkForBC/videos/vb.22819070941/10153870694020942/?type=2&theaterzfacebook:544765982287235zJhttps://www.facebook.com/groups/164828000315060/permalink/764967300301124/z@https://zh-hk.facebook.com/peoplespower/videos/1135894589806027/zfhttps://www.facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion/video.php?v=274175099429670zIhttps://www.facebook.com/onlycleverentertainment/videos/1947995502095005/z<https://www.facebook.com/WatchESLOne/videos/359649331226507/Z359649331226507zBFnatic vs. EG - Group A - Opening Match - ESL One Birmingham Day 1z?#ESLOne VoD - Birmingham Finals Day#1 Fnatic vs. @Evil Geniusesit[Z20180523zESL One Dota 2Z100066514874195gʡE6@)r    r!   r"   r#   r&   r%   r$   r(   r)   r*   r'   r+   z@https://www.facebook.com/100033620354545/videos/106560053808006/Z106560053808006ZJosefZGpfbid0cibUN6tV7DYgdbJdsUFN46wc4jKpVSPAvJQhFofGqBGmVn3V3JtAs2tfUwziw2hUliX\gM@zJosef NovakZ20190204)r    r!   r"   r'   r+   r(   r&   r)   r$   r#   r%   z1https://www.facebook.com/watch/?v=647537299265662zAhttps://www.facebook.com/PankajShahLondon/posts/10157667649866271r    Z10157667649866271   )r-   r.   playlist_countr1   zHhttps://m.facebook.com/Alliance.Police.Department/posts/4048563708499330Z117576630041613zFacebook video #117576630041613Z189393014416438Z20201123i_)r    r!   r"   r(   r%   r&   zMhttps://www.facebook.com/groups/ateistiskselskab/permalink/10154930137678856/Z211567722618337zFacebook video #211567722618337Z127875227654254Z20161122i3XzNo videoz7https://www.facebook.com/watch/live/?v=1823658634322275z3https://www.facebook.com/watchparty/211641140192478Z211641140192478r   z.https://m.facebook.com/events/1509582499515440Z637246984455045z;ANALISI IN CAMPO OSCURO " Coaguli nel sangue dei vaccinati"zDOther event by Comitato Liberi Pensatori on Tuesday, October 18 2022zComitato Liberi PensatoriZ100065709540881)r    r!   r"   r#   r'   r$   r(   zK(?:pagelet_group_mall|permalink_video_pagelet|hyperfeed_story_id_[0-9a-f]+)graphURIz/api/graphql/c              
   C   s  t | j}| ddd | j|d ddd}| d|d}| d	|d
}||||dddddd	}t | jt|}d|jd< z| j|d ddd}	td|	d k	r| j	d|	dd dd}
|
rt
d|
 dd| d W d S | jd|	dd d}| jd |	d!d d}|r|sW d S ||d"d#}t | jt|}d|jd< | j|d d$d%}td&|d k	r^| d' W n: tk
r } z| d(|  W Y d S d }~X Y nX d S ))Nzfacebook.comlocaleen_USzDownloading login pagezUnable to download login page)r3   Zerrnotez/<input type="hidden" name="lsd" value="([^"]*)"lsdzname="lgnrnd" value="([^"]*?)"lgnrndzhttp://facebook.com/home.php01z-60)	emailpassr=   r>   nextZdefault_persistentZlegacy_returntimezoneZtrynum!application/x-www-form-urlencodedContent-Typez
Logging inzunable to fetch login pagez <form(.*)name="login"(.*)</form>zh(?s)<div[^>]+class=(["\']).*?login_error_box.*?\1[^>]*><div[^>]*>.*?</div><div[^>]*>(?P<error>.+?)</div>zlogin errorerrordefaultgroupzUnable to login: Texpectedzjunable to log in: bad username/password, or exceeded login rate limit (~3/min). Check credentials or wait.zname="fb_dtsg" value="(.+?)"fb_dtsgrI   z.name="h"\s+(?:\w+="[^"]+"\s+)*?value="([^"]+)"hZ	dont_save)rM   rO   Zname_action_selectedzConfirming login)r3   zid="checkpointSubmitButton"zSUnable to confirm login, you have to login in your browser and authorize the login.zunable to log in: )r   
_LOGIN_URLZ_set_cookie_download_webpage_search_regexr   headersresearch_html_search_regexr   Zreport_warning_CHECKPOINT_URLr   )selfusernamepasswordZlogin_page_reqZ
login_pager=   r>   Z
login_formrequestZlogin_resultsrG   rM   rO   Z
check_formZ	check_reqZcheck_responseerr r]   =/tmp/pip-unpacked-wheel-zk9bgjdq/yt_dlp/extractor/facebook.py_perform_login  s    
 
    
      
zFacebookIE._perform_loginc           *         s`   |ddfdd}d }dd jjddgd	d
ddd}|rd|dg }fdd}fdddd fddfdd}|sވjdj dj dgdd
dtd}||}|s|d}|rg   fdddwfd!d"	}	tt|d#d$p,g }
t|
d%d&d'd(d)d*d%d+d,t	hf
}|D ]F}t|d-d#d%t	hfd.d*d%d/d,t	hf}|D ]}|	| q|	| qTt
|d0d1 tpg }|D ]}|	|d$d2 qt|d3d4t	d5pi }|r&t
|d6d1 d7d1 gtpg }|D ]}|	| q s&| t d8kr@ S  rN d9 nd:i}|}|d;rv|d; |d;< |d<r|d< |d<< t||S |std=}|d k	rtd>|d8 d?d@dAn tfdBdCdDD r  |s*dE|kr*dFtdGidH}|dI}|rHt
|dJd1 t	}|rH|dK ||dL < dM}|dNp^g D ]}|d9 dOkr`|dP _q`jt|jdQ t|dRdS dT }g  t
|dUd1 pg D ]\}t
|dVd1 pi }|d:}|sqt|} j|  ||dL q S |sj j  td8jdWdXdYdjdZd[d\djd]d^d_dd`dadbidc}jjdd|ded
ddd}||}|stdft|d8kr"g  |D ]F}|d9 dg}|sqΈ t|| |d9 dh qΈ S |d9 }g } i }!|D ] }"|"di }#|"r\t!|"t	r\|"g}"|"r6t!|"tsrq6djD ]}$dkD ]z}%|"d9 |$ dl|% }&|&r~|#dmkrdnndo}'|$dpkr|'d87 }'| |# dl|$ dl|% |&|'|$dpkrdqnd dr q~qv|"d9 |  |"d9 ds}(|(r6|!"dtg du|(i q6| |!dv})|) |)#| |)S )xNz://m.facebook.com/z://www.facebook.com/c                    s6   fddt d| D }t|dtdp,g }t|dddfdd	ftd}t|d
}t|d}|p jdd d ddf| dd dd}|p jdddg| dd d}t|dthfpt|ddddddd	 fpt|dddd	 fpt|dddthfpt|d d!thfpi }|d"pRt	t
d#| pR jd9 d| d%d&d'}t jd(| d)d d}	 jd*d+g| d,d d}
|
rt d-|
sd }
|||d.|	|
t jd/| d0d dt|d1d2thfd3} j| i d}t d4d5|p|dp|pd5p&|pd5d6d7p&d8 |d< t||S ):Nc                    s   g | ]} j |d dqS Ffatal_parse_json.0jrX   video_idr]   r^   
<listcomp>  s     zJFacebookIE._extract_from_url.<locals>.extract_metadata.<locals>.<listcomp>z-data-sjs>({.*?ScheduledServerJS.*?})</script>).require...__bboxrk   ...rl   resultdataZexpected_type.attachmentsc                    s$   | dko"t |d  ko"|d dkS )Nmediar    
__typenameVideo)strkv)ri   r]   r^   <lambda>  s    zHFacebookIE._extract_from_url.<locals>.extract_metadata.<locals>.<lambda>)r"   text)creation_storycomet_sectionsmessagestoryr|   ry   z=<h2\s+[^>]*class="uiHeaderTitle"[^>]*>(?P<content>[^<]*)</h2>zq(?s)<span class="fbPhotosPhotoCaption".*?id="fbPhotoPageCaption"><span class="hasCaption">(?P<content>.*?)</span>zog:titleztwitter:titlez<title>(?P<content>.+?)</title>r"   contentrH   r#   zog:descriptionztwitter:descriptionrN   ownervideorz   rq   c                 S   s   | dko|d S Nr   namer]   ru   r]   r]   r^   rx         c                 S   s   | dko|d S r   r]   ru   r]   r]   r^   rx     r   nodeZactorseventZevent_creatorr   ZfbPhotoPageAuthorNameownerName\s*:\s*"([^"]+)"r$   Fra   z<abbr[^>]+data-utime=["\'](\d+)r&   zog:imageztwitter:imager'   z\.(?:jpg|png)r    )z \bviewCount\s*:\s*["\']([\d,.]+)z!video_view_count["\']\s*:\s*(\d+)z
view count)r   )..rp   .rq   ZliveViewerCount)r#   r$   r(   r&   r'   r*   r+   z\s*\|\s*Facebook$r2   
 Facebook video #)r   )rT   findallr   dictr   rV   Z_meta_regex_html_search_metagetr	   r   rR   Z_og_regexesr   rU   r   Z_search_json_ldsubreplacer   )webpage	post_datapostrq   r"   r#   Z
page_titleZuploader_datar$   r&   r'   r.   Zinfo_json_ldrh   r]   r^   extract_metadata  s     

                   (z6FacebookIE._extract_from_url.<locals>.extract_metadatac                 S   sH   g }| D ]:}t |dd dkr|d d }|dr||d  q|S )Nc                 S   s   | d d S )Nr   r   r]   xr]   r]   r^   rx     r   zJFacebookIE._extract_from_url.<locals>.extract_video_data.<locals>.<lambda>ZVideoConfigr   r   ri   Z	videoData)r   r   append)	instances
video_dataitemZ
video_itemr]   r]   r^   extract_video_data  s    
z8FacebookIE._extract_from_url.<locals>.extract_video_dataz handleServerJS\(({.+})(?:\);|,")z\bs\.handle\(({.+?})\);zserver js data{}rN   Fra   r   c                    s    | r t | dd tpg S d S )Nc                 S   s   | d d S )NZjsmodsr   r]   r   r]   r]   r^   rx   +  r   zUFacebookIE._extract_from_url.<locals>.extract_from_jsmods_instances.<locals>.<lambda>)r   list)Zjs_data)r   r]   r^   extract_from_jsmods_instances(  s      zCFacebookIE._extract_from_url.<locals>.extract_from_jsmods_instancesc                    s>   t | ddtd}|r:| jttj|| dd d S )Ndash_manifestplaylistro   Zdash_manifest_url)Zmpd_url)	r   rt   extendZ_parse_mpd_formatsr   urllibparseunquote_plusr   )r   formatsr   rX   r]   r^   extract_dash_manifest-  s    z;FacebookIE._extract_from_url.<locals>.extract_dash_manifestc                 S   s2   | d D ]$}d| di d< d| di d< qd S )Nr   zfacebookexternalhit/1.1Zhttp_headersz
User-Agenti  Zdownloader_optionsZhttp_chunk_size)
setdefault)infofr]   r]   r^   process_formats4  s    z5FacebookIE._extract_from_url.<locals>.process_formatsc                    s*    j  jd|  ddddddp(i S )Nzdata-sjs>({.*?z.*?})</script>zreplay datar   rN   Fra   )rd   rR   Z_filter)rX   ri   r   r]   r^   extract_relay_data>  s    
   z8FacebookIE._extract_from_url.<locals>.extract_relay_datac                    s.   t  | dddd dddddthf	d	d
p,i S )Nrk   )N)...rl   rk   c                 S   s   t dd |D S )Nc                 s   s   | ]}| d V  qdS )ZRelayPrefetchedStreamCacheN)
startswith)rf   keyr]   r]   r^   	<genexpr>F  s     zhFacebookIE._extract_from_url.<locals>.extract_relay_prefetched_data.<locals>.<lambda>.<locals>.<genexpr>)any_rw   r]   r]   r^   rx   F  r   zUFacebookIE._extract_from_url.<locals>.extract_relay_prefetched_data.<locals>.<lambda>.rl   rm   rn   Fget_all)r   r   r   )r   r]   r^   extract_relay_prefetched_dataC  s          zCFacebookIE._extract_from_url.<locals>.extract_relay_prefetched_datazNbigPipe\.onPageletArrive\(({.+?})\)\s*;\s*}\s*\)\s*,\s*["\']onPageletArrive\s+z)bigPipe\.onPageletArrive\(({.*?id\s*:\s*"z	".*?})\);zjs dataz/"(?:dash_manifest|playable_url(?:_quality_hd)?)c              
      st  |  dp|  dp}t| dddthf}|rP| d } t| d| d< | | g }tdd	g}d
D ]R\}}|  |}|s|qdt|dkr|| qd||||d |d qd| | |sd S i i  }}	t| dt	hf}
t| ddd hdd fD ]v}| dpd}|d t
|d| d|dd}| dsD|
r\||d g | n|	|d g |  qt| dthf}|r|s|	sƈjddgddd}d|ig|
r|n|	|< ||t| d d!t| ddthft| d"d#td$t|  d%d&pt|  d'||	d(}| t| d)d }|  d*}|rR|||d+ n|p`d,| |d-<  | d S ).NZvideoIdr    rz   short_form_video_contextZplayback_video)r   Zvideo_ownerr   sdhd))playable_urlr   )Zplayable_url_quality_hdr   )Zplayable_url_dashr2   )Zbrowser_native_hd_urlr   )Zbrowser_native_sd_urlr   Zmpdr8   )	format_idqualityr-   Zis_video_broadcastZ video_available_captions_localesc                 S   s   t | dd dS )Nc                 S   s   | d S )Nr;   r]   )cr]   r]   r^   rx   x  r   z]FacebookIE._extract_from_url.<locals>.parse_graphql_video.<locals>.<lambda>.<locals>.<lambda>r   )sortedr   r]   r]   r^   rx   x  r   zKFacebookIE._extract_from_url.<locals>.parse_graphql_video.<locals>.<lambda>c                 S   s   t |d S )Ncaptions_urlr   r   r]   r]   r^   rx   y  r   Zlocalized_languageZundr   Zlocalized_countryz (%s)rN   )r-   r   Zlocalized_creation_methodr;   z	og:localeztwitter:localer<   r-   )ZthumbnailImageuri)Zpreferred_thumbnailimager   Zpublish_timecreation_timero   Zplayable_duration_in_msi  Zlength_in_second)r    r   r'   r(   r&   r)   automatic_captions	subtitlesc                 S   s   | d d S )NZsavable_descriptionry   r]   r   r]   r]   r^   rx     r   r   )r"   r#   r   r"   )r   r   r   updater   r
   r   Z_extract_mpd_formatsr   boolr   r   r   r   r   r   r   r   )r   v_idZ	reel_infor   qr   r   r   r   r   Zis_broadcastcaptionlangsubsr   r;   r   r#   r"   )entriesr   r   rX   ri   r   r]   r^   parse_graphql_videoV  s     






     

z9FacebookIE._extract_from_url.<locals>.parse_graphql_videorq   c                    s(   |  |pi }| ddkr$ |S d S )Nrr   rs   )r   )
attachmentr   rq   )r   r]   r^   parse_attachment  s    z6FacebookIE._extract_from_url.<locals>.parse_attachmentnodesr   .r{   r~   r}   )NZattached_storyrp   )stylesZstyle_type_renderer)ZthrowbackStylesZattachment_target_rendererr   Zall_subattachmentstargetr   c                 S   s   | d d d S )NZmediasetZ	currMediaedgesr]   r   r]   r]   r^   rx     r   z.FacebookIE._extract_from_url.<locals>.<lambda>r   )r   Zcover_media_rendererZcover_videor   ro   c                 S   s   | d d S )Nr}   rp   r]   r   r]   r]   r^   rx     r   c                 S   s   | d d S )Nrz   rp   r]   r   r]   r]   r^   rx     r   r   r   r    r)   r'   z8class="[^"]*uiInterstitialContent[^"]*"><div>(.*?)</div>z,The video is not available, Facebook said: ""TrK   c                 3   s   | ]}| kV  qd S Nr]   )rf   p)r   r]   r^   r     s     z/FacebookIE._extract_from_url.<locals>.<genexpr>)z>You must log in to continuezid="login_form"zid="loginbutton"z/watchparty/l   Ws/j ZlivingRoomID)Zdoc_id	variablesz"login_data"\s*:\s*{c                 S   s   | d d S )NZ
login_datar=   r]   r   r]   r]   r^   rx     r   valuer   z!\[\s*"RelayAPIConfigDefaults"\s*,defineZRelayAPIConfigDefaultsr   r:   )rn   rn   living_roomc                 S   s   | d d d S )NZrecapZwatched_contentr   r]   r   r]   r]   r^   rx     r   c                 S   s   | d d S )Nr   r   r]   r   r]   r]   r^   rx     r   z%pkg_cohort["\']\s*:\s*["\'](.+?)["\']z
pkg cohortzPHASED:DEFAULTz!client_revision["\']\s*:\s*(\d+),zclient revisionZ3944515z>"DTSGInitialData"\s*,\s*\[\]\s*,\s*{\s*"token"\s*:\s*"([^"]+)"z
dtsg tokenr2   )Z__aZ__pcZ__revrM   rF   rE   )rn   rS   zfor\s+\(\s*;\s*;\s*\)\s*;(.+)ztahoe js datazCannot parse data	video_urlri   Zstream_type)r   r   )srcZsrc_no_ratelimitr   Zprogressiveir   i  )r   r-   r   heightsubtitles_srcenr-   )r    r   r   )rq   )$rQ   r   rd   rR   r   _SUPPORTED_PAGLETS_REGEXr   r   r   r   r   r   lenZplaylist_resultr   rT   rU   r   rJ   r   Zraise_login_requiredjsondumps_api_configZ_download_jsonr   r   rt   r   
url_result_VIDEO_PAGE_TEMPLATEie_key_VIDEO_PAGE_TAHOE_TEMPLATE
isinstancer   r   )*rX   r-   ri   r   r   Zserver_js_datar   r   rn   r   r   rp   r   nsnr   Zedger   Z
video_infoZwebpage_infoZm_msgr   Zprefetched_datar=   Z
relay_datar   r   r   Z
tahoe_dataZtahoe_js_datarw   r   r   r   r   r   r   Zsrc_typer   Z
preferencer   r.   r]   )	r   r   r   r   r   r   rX   ri   r   r^   _extract_from_url  s   
 7	   
    L        

  
  
           
  


zFacebookIE._extract_from_urlc                 C   s.   |  |}|dr| j| n|}| ||S )Nz	facebook:)	_match_idr   r   r   )rX   r-   ri   Zreal_urlr]   r]   r^   _real_extractO  s    
zFacebookIE._real_extractN)__name__
__module____qualname__
_VALID_URLZ_EMBED_REGEXrP   rW   Z_NETRC_MACHINEIE_NAMEr   r   int_TESTSr   r   r_   r   r   r]   r]   r]   r^   r   "   st  	 	
  	 	    R ;  vr   c                	   @   sL   e Zd ZdZdddddddd	d
e gdddddddgZdd ZdS )FacebookPluginsVideoIEzQhttps?://(?:[\w-]+\.)?facebook\.com/plugins/video\.php\?.*?\bhref=(?P<id>https.+)zhttps://www.facebook.com/plugins/video.php?href=https%3A%2F%2Fwww.facebook.com%2Fgov.sg%2Fvideos%2F10154383743583686%2F&show_text=0&width=560Z 5954e92cdfe51fe5782ae9bda7058a07Z10154383743583686r   zWhat to do during the haze?zGov.sgZ20160826iWr/   )r-   r0   r.   add_iezrhttps://www.facebook.com/plugins/video.php?href=https%3A%2F%2Fwww.facebook.com%2Fvideo.php%3Fv%3D10204634152394104Tr7   zhttps://www.facebook.com/plugins/video.php?href=https://www.facebook.com/gov.sg/videos/10154383743583686/&show_text=0&width=560c                 C   s   |  tj| |t S r   )r   r   r   unquoter   r   r   )rX   r-   r]   r]   r^   r   n  s    z$FacebookPluginsVideoIE._real_extractN)r   r   r   r   r   r   r   r   r]   r]   r]   r^   r   V  s(   	r   c                   @   s`   e Zd ZdZdZddddddd	d
gddddddddddddeeddgddidgZdd ZdS )FacebookRedirectURLIEFz0https?://(?:[\w-]+\.)?facebook\.com/flx/warn[/?]zlhttps://www.facebook.com/flx/warn/?h=TAQHsoToz&u=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DpO8h3EaFRdo&s=1ZpO8h3EaFRdor   z.Tripeo Boiler Room x Dekmantel Festival DJ Setz$md5:2d713ccbb45b686a1888397b2c77ca6bZUCGBpxWJr9FNOcFYA5GkKrMgTZMusiczBoiler RoomZbrtvofficialzcount:11i  Znot_livez4https://i.ytimg.com/vi/pO8h3EaFRdo/maxresdefault.jpgz8https://www.youtube.com/channel/UCGBpxWJr9FNOcFYA5GkKrMgpublicz(http://www.youtube.com/user/brtvofficialZ20150917r   )r    r!   r"   r#   Z
channel_idZplayable_in_embed
categoriesZchannelr(   r$   tagsr)   Zlive_statusr'   Zchannel_urlZavailabilityuploader_urlr%   Z	age_limitr*   
like_countZYoutuber5   )r-   r.   r   r6   c                 C   s4   t t|dd gd }|s*tddd| |S )NuzInvalid facebook redirect URLTrK   )r   r   r   r   r   )rX   r-   Zredirect_urlr]   r]   r^   r     s    z#FacebookRedirectURLIE._real_extractN)r   r   r   ZIE_DESCr   r   r   r   r]   r]   r]   r^   r   t  s:   r   c                   @   s@   e Zd ZdZdZddddddd	d
ddddd
dgZdd ZdS )FacebookReelIEz4https?://(?:[\w-]+\.)?facebook\.com/reel/(?P<id>\d+)zfacebook:reelz.https://www.facebook.com/reel/1195289147628387Z f13dd37f2633595982db5ed8765474d3Z1195289147628387r   z$md5:b05800b5b1ad56c0ca78bd3807b6a61ez$md5:22f03309b216ac84720183961441d8dbz$md5:723e6cb3091241160f20b3c5dc282af1Z100040874179269g r(#@iNaZ20211121r   )
r    r!   r"   r#   r$   r(   r)   r&   r%   r'   r4   c                 C   s    |  |}| d| dt|S )Nz https://m.facebook.com/watch/?v=z&_rdr)r   r   r   )rX   r-   ri   r]   r]   r^   r     s    

  zFacebookReelIE._real_extractN)r   r   r   r   r   r   r   r]   r]   r]   r^   r    s"   r  c                   @   s   e Zd ZdZdZddddddd	d
d	ded
ddddddd	ddedddddddddgZddddd Zd!d" Zd#d$ Z	d%S )&FacebookAdsIEzLhttps?://(?:[\w-]+\.)?facebook\.com/ads/library/?\?(?:[^#]+&)?id=(?P<id>\d+)zfacebook:adsz8https://www.facebook.com/ads/library/?id=899206155126718Z899206155126718r   zvideo by KandaoZKandaoZ774114102743284r   ijzeZ20231214)
r    r!   r"   r$   r(   r   r&   r'   r%   r   r,   z8https://www.facebook.com/ads/library/?id=893637265423481Z893637265423481u@   Jusqu’à -25% sur une sélection de vins pétillants italiens zEataly Paris MaraisZ2086668958314152iIpeZ20231226)r    r"   r$   r(   r   r&   r%   r   r8   )r-   r.   r9   z:https://es-la.facebook.com/ads/library/?id=901230958115569Tr7   z6https://m.facebook.com/ads/library/?id=901230958115569)zsd-wmkzSD, watermarked)r   N)zhd-wmkzHD, watermarked)r   N)Zwatermarked_video_sd_urlZvideo_sd_urlZwatermarked_video_hd_urlZvideo_hd_urlc              
      sd   g }t |tjh fddfD ]@\}}| j| d  j| d |dtt j|d q|S )Nc                    s   |d  j kot|d S )Nr   r   )_FORMATS_MAPr   r   r   r]   r^   rx     r   z0FacebookAdsIE._extract_formats.<locals>.<lambda>r   r   r   )r   Zformat_noter-   r!   r   )r   r   itemsr   r  r   tuple)rX   Z
video_dictr   Z
format_keyZ
format_urlr]   r   r^   _extract_formats  s     

zFacebookAdsIE._extract_formatsc           
         s    | |} fddtd|D }t|ddddddddthf	d	d
}|s`td|d}|rv|dkrtddd|d}t|dt	hdd hfdt	hfdt
hfdthfdthfdthfd}g }tt|d fddfdD ]V\}}	| d| |	dp||	dp$|dt|	d |	d  qt|dkr`||d!  n(t|dkr||d! d |d"d# |d$< |S )%Nc                    s   g | ]} j |d dqS r`   rc   re   rh   r]   r^   rj     s   z/FacebookAdsIE._real_extract.<locals>.<listcomp>z!s\.handle\(({.*})\);requireLazy\(.rk   propsZdeeplinkAdCardZsnapshotFr   zUnable to extract ad datar"   z{{product.name}}Zdisplay_formatZ	page_namez by )delim	from_dictZlink_descriptionc                 S   s   | dkr| S d S )Nz{{product.description}}r]   r   r]   r]   r^   rx     r   z-FacebookAdsIE._real_extract.<locals>.<lambda>Zpage_idZpage_profile_urir   Zpage_like_count)r#   r$   r(   r   r&   r   )ZvideosZcardsc                    s   t  fddjD S )Nc                 3   s   | ]}t  | V  qd S r   r   )rf   r   rw   r]   r^   r     s     z@FacebookAdsIE._real_extract.<locals>.<lambda>.<locals>.<genexpr>)r   r  r   r   r  r^   rx     r   r   r   r#   Zvideo_preview_image_url)r    r"   r#   r'   r   r   r   )r"   r   _typer    )r   rQ   rT   r   r   r   r   r   r   rt   r   r   r   	enumerater   r  r   r   )
rX   r-   r   r   rn   r"   r.   r   idxentryr]   rh   r^   r     sn    

        
	 

zFacebookAdsIE._real_extractN)
r   r   r   r   r   r   r   r  r  r   r]   r]   r]   r^   r    sR   
$r  )'r   rT   urllib.parser   commonr   compatr   Z
networkingr   Znetworking.exceptionsr   utilsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r]   r]   r]   r^   <module>   s$   \      :'