a
    hG                     @   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gddddddddddd d!d"d#dd$d%d&d'dd(d)d*eed+dgdd,d-d.d/dd0d1d2d3dd d4d5d6d7dd8d9d:d;d!d<d=d>dd?d@d:d;d!dAdBdCdDddEddFdGdHdIdJd4dKdLdMddNdOdPdQdRdedSedTdUdVdWdXddYdZd[d\d]d^eded_d`dadbdcddddedfdgdhddid dbdjdkddldmdndodpdqdrd dbdsdtddudvdwdxdydzdd{d|
dadbd}d~dddddddedddddddddddddddedddddddddddddddddddddddddddddddddddddddededddiddddddeddddd%dddgdddddddidd dddddddddd dbddddddddddbddddddidd ddddddddddΜddddg!ZddddddԜdgd֜dddddedddddddeddgd֜dddddedddddddedddddgiii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)/(?:[\da-f]+/)?|
                            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202308182re:https?://scontent\.fitm\d-1\.fna\.fbcdn\.net/.+i/'dZ100063551323670g#~*{@r   )idexttitledescriptionuploaderupload_date	thumbnail	timestampuploader_idduration
view_countconcurrent_view_countCannot parse data)url	info_dictexpected_warningsz<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274175099429670u7   119 reactions · 1.4K shares | Asif Nawab Butt on Reels zAsif Nawab ButtZ20140506iV"iSZHpfbid028xue38TBXRyNbiqBSV2LFs3QK3yopvKjupbqFoL6U9SKbx4p2SMdJjQSBvnjsHGWlg)\``@)r    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 70b82ebf5f0e9b91b2a49d3db3563611Z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100059479812265gI+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)   Invalid URLr-   r.   r1   z>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&   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 GentryZGpfbid0FkkycT95ySNNyfCw4Cho6u5G7WbbZEcxT496Hq8rtx1K3LcTCATpR3wnyYhmyGC5lgI+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'   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...ZHpfbid02wjMpknobSMnyynK3TNKN4Ww1StcpAKXgowqTyge3bz7LwHZMQ68uiXzzbu7xeryBlZ20231228iegd;Ox@)r    r!   r"   r#   r&   r$   r(   r%   r'   r)   r*   zhttps://www.facebook.com/story.php?story_fbid=pfbid0Fnzhm8UuzjBYpPMNFzaSpFE9UmLdU4fJN8qTANi1Dmtj5q7DNrL5NERXfsAzDEV7l&id=100073071055552T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100066514874195gL7A @)r    r!   r"   r#   r'   r%   r$   r(   r)   r*   r&   r+   Zskip_download)r-   r.   paramsz@https://www.facebook.com/100033620354545/videos/106560053808006/Z106560053808006zJosef Novak on ReelsZGpfbid0cjYJYXpePWqhZ9DgpB6gKXrN2q3obwducdKm4wT7K5nkhbfKg5cneocYbsdaji7fliX\g$C
@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.   Z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(   zYhttps://www.facebook.com/groups/1513990329015294/posts/d41d8cd9/2013209885760000/?app=fblz1http://www.unique-almeria.com/mini-hollywood.htmlZ cba5d8c5021e9340dcefe925255e2c3eZ1529066599879zFacebook video #1529066599879)r    r!   r"   zunable to extract uploaderr-   r0   r.   r/   zHhttps://www.newsmemory.com/eedition/e-publishing-solutions/2-in-one-app/Z ae97d4a44f8cc9a8b1a4c03b9ed793afZ10155710648695814z6Download the all new and improved Trinidad Express Appz$md5:4806195c99908e4189b45b1c23bd4f89g'1ZQ@iۿm[Z20180810zTrinidad Express NewspapersZ100064446413648r    r!   r"   r+   r#   r)   r&   r'   r%   r$   r(   r*   zhttps://www.curs.md/roZ 090bae53b9bff2be993c896edc2ea205Z334484292523563z$md5:9abffe1c86cdd967ffa224e1ccc13b90z$md5:0ba98567a61c640f9fabf1882235b33dg^I*@i$]eZ20231121zIstoria MoldoveiZ100063529778592Zextractor_argsZgenericZimpersonateZchrome)r-   r0   r.   r9   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 u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 ur^| d' W n8 ty } z| d(|  W Y d }~d S d }~0 0 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passrA   rB   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rM   z.name="h"\s+(?:\w+="[^"]+"\s+)*?value="([^"]+)"hZ	dont_save)rQ   rS   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_pagerA   rB   Z
login_formrequestZlogin_resultsrK   rQ   rS   Z
check_formZ	check_reqZcheck_responseerr ra   N/mnt/pikpak/tmp/myenv/lib/python3.9/site-packages/yt_dlp/extractor/facebook.py_perform_login  st    



zFacebookIE._perform_loginc           +         st   |ddfdd}d }dd jjddgd	d
ddd}|rd|dg }fdd}d{fdd	dd fddfdd}d|fdd	}|sjdj dj dgdd
dtd}||}|s|dd d!}	|	rg   fd"d#d}fd%d&	}
tt|	d'd(p@g }t|d)d*d+d,d-d.d)d/d0t	hf
}|D ]F}t|d1d'd)t	hfd2d.d)d3d0t	hf}|D ]}|
| q|
| qht
|	d4d5 tpg }|D ]}|
|d(d6 qt|	d7d8t	d9pi }|r:t
|d:d5 d;d5 gtpg }|D ]}|
| q s:| t d<krT S  rb d= nd>i}|}|d?r|d? |d?< |d@r|d@ |d@< t||S |stdA}|d urtdB|d< dCdDdEn tfdFdGdHD r  |s>dI|v r>dJtdKidL}|dM}|r\t
|dNd5 t	}|r\|dO ||dP < |dQ}|dRprg D ]}|d= dSkrt|dT _qtjt|jdU t|dVdW dX }g  t
|dYd5 pg D ]\}t
|dZd5 pi }|d>}|s qt|} j|  ||dP qԈ S |sj j  td<jd[d\d]djd^d_d`djdadbdcddddedfidg}jjdh|did
ddd}||}|stdjt|d<kr6g  |D ]F}|d= dk} | sq t||  |d= dl q S |d= }g }!i }"|D ] }#|#dm }$|#rpt!|#t	rp|#g}#|#rJt!|#tsqJdnD ]}%doD ]z}&|#d= |% dp|& }'|'r|$dqkrdrnds}(|%dtkr|(d<7 }(|!|$ dp|% dp|& |'|(|%dtkr dund dv qq|#d= |! |#d= dw})|)rJ|""dxg dy|)i qJ|!|"dz}*|* |*#| |*S )~Nz://m.facebook.com/z://www.facebook.com/c                    s   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g d| dd d}t|dthfp0t|ddddddd	 fp0t|dddd	 fp0t|dddthfp0t|dd thfp0t|ddd!d"thfp0i }|d#plt	t
d$| pl jd%g dR | d&d'd(}t jd)| d*d d}	 jd+d,g| d-d d}
|
rt d.|
sd }
|||d/|	|
t jd0| d1d dt|d2d3thfd4t|fd5d	d6d7d8thfd9thfd:thfd;fd'd<} j| i d}t d=d>|pV|dpV|pVd>px|pdd>d?d@pxdA |d< t||S )BNc                    s   g | ]} j |d dqS )Ffatal)_parse_json).0jr\   video_idra   rb   
<listcomp>      zJFacebookIE._extract_from_url.<locals>.extract_metadata.<locals>.<listcomp>-data-sjs>({.*?ScheduledServerJS.*?})</script>).require...__bboxrn   ...ro   resultdataexpected_type.attachmentsc                    s$   | dko"t |d  ko"|d dkS )Nmediar    
__typenameVideo)strkvrj   ra   rb   <lambda>  s    zHFacebookIE._extract_from_url.<locals>.extract_metadata.<locals>.<lambda>)r"   text)creation_storycomet_sectionsmessagestoryr   r~   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"   contentrL   )r#   zog:descriptionztwitter:descriptionr#   rR   ownervideor   ru   c                 S   s   | dko|d S Nr   namera   ry   ra   ra   rb   r}   *  rl   c                 S   s   | dko|d S r   ra   ry   ra   ra   rb   r}   +  rl   nodeZactorseventZevent_creatorshort_form_video_contextvideo_ownerr   ZfbPhotoPageAuthorNamezownerName\s*:\s*"([^"]+)"r$   Frd   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   )..rt   .ru   ZliveViewerCount)r#   r$   r(   r'   r&   r*   r+   c                    s    |d v S )Nr-   ra   _r{   r|   ra   rb   r}   H  rl   ZfeedbackZlikerscountZtotal_comment_countZshare_count_reduced)
like_countcomment_countrepost_countget_allz\s*\|\s*Facebook$r2   
 Facebook video #)rX   findallr   dictr   rZ   Z_meta_regex_html_search_metagetr	   r   rV   Z_og_regexesr   rY   r   intZ_search_json_ldsubreplacer   )webpage	post_datapostru   r"   r#   Z
page_titleZuploader_datar$   r'   r&   r.   Zinfo_json_ldri   ra   rb   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   ra   xra   ra   rb   r}   Y  rl   zJFacebookIE._extract_from_url.<locals>.extract_video_data.<locals>.<lambda>ZVideoConfigr   r   rj   Z	videoData)r   r   append)	instances
video_dataitemZ
video_itemra   ra   rb   extract_video_dataV  s    
z8FacebookIE._extract_from_url.<locals>.extract_video_dataz handleServerJS\(({.+})(?:\);|,")z\bs\.handle\(({.+?})\);zserver js dataz{}rR   Frd   r   c                    s    | r t | dd tpg S d S )Nc                 S   s   | d d S )NZjsmodsr   ra   r   ra   ra   rb   r}   i  rl   zUFacebookIE._extract_from_url.<locals>.extract_from_jsmods_instances.<locals>.<lambda>)r   list)Zjs_data)r   ra   rb   extract_from_jsmods_instancesf  s    
zCFacebookIE._extract_from_url.<locals>.extract_from_jsmods_instancesc                    sJ   t | ddddtd}|rF| jttj|t| 	dp>|d d S )Ndash_manifestplaylistZdash_manifest_xml_stringmanifest_xmlrr   Zdash_manifest_urlmpd_url)
r   rx   extendZ_parse_mpd_formatsr   urllibparseunquote_plusr   r   )Zvid_dataformatsr   r   r\   ra   rb   extract_dash_manifestk  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fra   ra   rb   process_formatss  s    z5FacebookIE._extract_from_url.<locals>.process_formatsc                 3   s4   t d|  dD ]} j|ddp*i V  qd S )Nzdata-sjs>({.*?z.*?})</script>Frd   )rX   r   rf   )_filter
relay_data)r\   rj   r   ra   rb   yield_all_relay_data}  s    z:FacebookIE._extract_from_url.<locals>.yield_all_relay_datac                    s   t td  | i S N)rG   filter)r   r   ra   rb   extract_relay_data  s    z8FacebookIE._extract_from_url.<locals>.extract_relay_datac                    sH   d} d ur fdd}t | ddddd dddd	|thf
d
dpFi S )Nrq   c                    s"   | dko t  fddtD S )Nrq   c                 3   s   | ]}| v V  qd S r   ra   )rg   targetr{   ra   rb   	<genexpr>  rl   hFacebookIE._extract_from_url.<locals>.extract_relay_prefetched_data.<locals>.<lambda>.<locals>.<genexpr>)anyr   ry   target_keysr   rb   r}     rl   zUFacebookIE._extract_from_url.<locals>.extract_relay_prefetched_data.<locals>.<lambda>.rn   )N)...ro   rn   c                 S   s   t dd |D S )Nc                 s   s   | ]}| d V  qdS )ZRelayPrefetchedStreamCacheN
startswith)rg   keyra   ra   rb   r     rl   r   )r   r   ra   ra   rb   r}     rl   ro   rp   Fr   )r   r   )r   r   pathr   r   rb   extract_relay_prefetched_data  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)?))r   r   nodesr   mediasetr   c              
      s  |  dp|  dp}t| dddthf}|rP| d } t| d| d< | | g }tdd	g}t| d
thfpr| }dD ]V\}}| |}|sqxt|dkr|j|dd qx||||d |d qx|| t| d}t|dddt	hf}	t|ddd f}
t
|
D ]\}}||t|	|d q|
sZ|	D ]}|j|dd q<t|ddd fD ]8}t|ddtjhf}||||d |d d qlt|dddt	hfD ] }|j|d dd!d" q|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.s`|rx||d/ g | n||d/ g | qt| d)t	hf}|r|s|sjd0d1gd/d2d,}d3|ig|r|n||< ||t| d4d5t| ddthft| d6d7td8t|  d9d:p,t|  d;||d<}| t| d=d }|  d>}|rn|||d? n|p|d@| |dA<  | d S )BNZvideoIdr    r   r   Zplayback_video)r   r   r   sdhdZvideoDeliveryLegacyFields))playable_urlr   )Zplayable_url_quality_hdr   )Zplayable_url_dashr2   )Zbrowser_native_hd_urlr   )Zbrowser_native_sd_urlr   ZmpdFrd   r:   )	format_idqualityr-   )ZvideoDeliveryResponseFragmentZvideoDeliveryResponseResultZdash_manifest_urls.Zmanifest_urldash_manifestsc                 S   s   |d S )Nr   ra   r   ra   ra   rb   r}     rl   zKFacebookIE._extract_from_url.<locals>.parse_graphql_video.<locals>.<lambda>r   Zprogressive_urlsc                 S   s   |d S )Nprogressive_urlra   r   ra   ra   rb   r}     rl   metadatar   r   Zhls_playlist_urlsZhls_playlist_urlr   Zhls)re   Zm3u8_idZis_video_broadcastZ video_available_captions_localesc                 S   s   t | dd dS )Nc                 S   s   | d S )Nr?   ra   )cra   ra   rb   r}     rl   z]FacebookIE._extract_from_url.<locals>.parse_graphql_video.<locals>.<lambda>.<locals>.<lambda>r   )sortedr   ra   ra   rb   r}     rl   c                 S   s   t |d S )Ncaptions_url)r   r   ra   ra   rb   r}     rl   Zlocalized_languageZundr   Zlocalized_countryz (%s)rR   )r-   r   Zlocalized_creation_methodr?   z	og:localeztwitter:localer@   r-   )ZthumbnailImageuri)Zpreferred_thumbnailimager   Zpublish_timecreation_timerr   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_descriptionr~   ra   r   ra   ra   rb   r}     rl   r   r"   r#   r   r"   )r   r   r   updater   r
   r   Z_extract_mpd_formatsr   r   	enumeraterx   lowerZ_extract_m3u8_formatsboolr   r   r   r   r   r   r   )r   v_idZ	reel_infor   qZfmt_datar   r   r   Zmpd_urlsr   idxr   r   Zprog_fmtZm3u8_urlr   r   Zis_broadcastcaptionlangsubsr   r?   r   r#   r"   )entriesr   r   r\   rj   r   ra   rb   parse_graphql_video  s    










z9FacebookIE._extract_from_url.<locals>.parse_graphql_videoru   c                    s(   |  |pi }| ddkr$ |S d S )Nrv   rw   )r   )
attachmentr   ru   )r   ra   rb   parse_attachment  s    z6FacebookIE._extract_from_url.<locals>.parse_attachmentr   r   .r   r   r   )NZattached_storyrt   )stylesZstyle_type_renderer)ZthrowbackStylesZattachment_target_rendererr   Zall_subattachmentsr   r   c                 S   s   | d d d S )Nr   Z	currMediaedgesra   r   ra   ra   rb   r}     rl   z.FacebookIE._extract_from_url.<locals>.<lambda>r   )r   Zcover_media_rendererZcover_videor   rr   c                 S   s   | d d S )Nr   rt   ra   r   ra   ra   rb   r}     rl   c                 S   s   | d d S )Nr   rt   ra   r   ra   ra   rb   r}     rl   r   r   r    r)   r&   z8class="[^"]*uiInterstitialContent[^"]*"><div>(.*?)</div>z,The video is not available, Facebook said: ""TrO   c                 3   s   | ]}| v V  qd S r   ra   )rg   p)r   ra   rb   r   5  rl   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_datarA   ra   r   ra   ra   rb   r}   E  rl   valuer   z!\[\s*"RelayAPIConfigDefaults"\s*,defineZRelayAPIConfigDefaultsr   r>   )rq   rq   living_roomc                 S   s   | d d d S )NZrecapZwatched_contentr   ra   r   ra   ra   rb   r}   S  rl   c                 S   s   | d d S )Nr   r   ra   r   ra   ra   rb   r}   T  rl   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__revrQ   rJ   rI   )rq   rW   zfor\s+\(\s*;\s*;\s*\)\s*;(.+)ztahoe js datar,   	video_urlrj   Zstream_type)r   r   )srcZsrc_no_ratelimitr   Zprogressiveir   i  )r   r-   r   heightsubtitles_srcenr-   )r    r   r   )N)N)ru   )$rU   r   rf   rV   r   _SUPPORTED_PAGLETS_REGEXr   r   r   r   r   r   lenZplaylist_resultr   rX   rY   r   rN   r   Zraise_login_requiredjsondumps_api_configZ_download_jsonr   r   rx   r   
url_result_VIDEO_PAGE_TEMPLATEie_key_VIDEO_PAGE_TAHOE_TEMPLATE
isinstancer   r   )+r\   r-   rj   r   r   Zserver_js_datar   r   r   rq   r   r   rt   r   nsnr   Zedger   Z
video_infoZwebpage_infoZm_msgr   Zprefetched_datarA   r   r   r   r   Z
tahoe_dataZtahoe_js_datar{   r   r   r   r   r   r   Zsrc_typer   Z
preferencer   r.   ra   )	r   r   r   r   r   r\   rj   r   r   rb   _extract_from_url  s   =	
	f








zFacebookIE._extract_from_urlc                 C   s.   |  |}|dr| j| n|}| ||S )Nz	facebook:)	_match_idr   r  r
  )r\   r-   rj   Zreal_urlra   ra   rb   _real_extract  s    
zFacebookIE._real_extractN)__name__
__module____qualname__
_VALID_URLZ_EMBED_REGEXrT   r[   Z_NETRC_MACHINEIE_NAMEr  r  r   _TESTSZ_WEBPAGE_TESTSr   r  rc   r
  r  ra   ra   ra   rb   r   "   s  		
	
    Z2;   r   c                   @   sT   e Zd ZdZdddddeddd	d
dddedd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 af83aeae1d595f377c6e47a450828155Z10154383743583686r   zWhat to do during the haze?z$md5:81839c0979803a014b20798df255ed0bg!rhEP@r   iWZ20160826zgov.sgZ100064718678925r=   r,   r<   zrhttps://www.facebook.com/plugins/video.php?href=https%3A%2F%2Fwww.facebook.com%2Fvideo.php%3Fv%3D10204634152394104Tr8   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  )r\   r-   ra   ra   rb   r    s    z$FacebookPluginsVideoIE._real_extractN)r  r  r  r  r   r  r  ra   ra   ra   rb   r    s4   r  c                   @   sX   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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_livezre:https?://i\.ytimg\.com/vi/.+z8https://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*   r   zYoutube video is now privater6   c                 C   s4   t t|dd gd }|s*tddd| |S )NuzInvalid facebook redirect URLTrO   )r   r   r   r   r  )r\   r-   Zredirect_urlra   ra   rb   r    s    z#FacebookRedirectURLIE._real_extractN)r  r  r  ZIE_DESCr  r   r  r  ra   ra   ra   rb   r    s8   r  c                   @   sD   e Zd ZdZdZddddddd	d
ddddee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 aeb0153ecb2eaacdf2dc2bf88f593fefZ1195289147628387r   u   9.7K views · 352 reactions | When your trying to help your partner out with an arrest and #FAAFO games begin. Let the “Slapathon” commence!! 👊👋 | Beast Camp Trainingz$md5:5a767dc7e78718667b150a7facc4a34fz9.7K views &#xb7; 352 reactions | When your trying to help your partner out with an arrest and #FAAFO games begin. Let the &#x201c;Slapathon&#x201d; commence!! &#x1f44a;&#x1f44b; | Beast Camp TrainingZ100040874179269g r(#@r   iNaZ20211121)r    r!   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   )r\   r-   rj   ra   ra   rb   r    s    
zFacebookReelIE._real_extractN)r  r  r  r  r  r   r  r  ra   ra   ra   rb   r    s&   r  c                   @   s   e 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eddddddd d!d"d#ed$d%dd&d'd(d)d*d(d)gZd+d,d-d.d/Zd0d1 Zd2d3 Z	d4S )5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$md5:0822724069e3aca97cbed5dabbab282eZKandaoZ774114102743284zhttps://facebook.com/KandaoVRijzer   Z20231214)r    r!   r"   r#   r$   r(   r  r'   r&   r%   r   r5   r6   z8https://www.facebook.com/ads/library/?id=501152689226254Z501152689226254zvideo by mat.nawrockiz$md5:02a446ace7ff8c3c37a2892922492490zmat.nawrockiZ148586968341456z)https://www.instagram.com/_u/mat.nawrockii˹fZ20240812)r    r!   r"   r#   r$   r(   r  r&   r'   r%   r   r7   z8https://www.facebook.com/ads/library/?id=893637265423481Z893637265423481u@   Jusqu’à -25% sur une sélection de vins pétillants italiens zEataly Paris MaraisZ2086668958314152z&https://facebook.com/EatalyParisMaraisiIpeZ20231226)r    r"   r$   r(   r  r'   r%   r   r:   r;   z:https://es-la.facebook.com/ads/library/?id=901230958115569Tr8   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 v ot|d S )Nr   r   )_FORMATS_MAPr   r   r   ra   rb   r}   \  rl   z0FacebookAdsIE._extract_formats.<locals>.<lambda>r   r   r   )r   Zformat_noter-   r!   r   )r   r   itemsr   r  r   tuple)r\   Z
video_dictr   Z
format_keyZ
format_urlra   r   rb   _extract_formatsY  s    
zFacebookAdsIE._extract_formatsc                    s   |}||}ttd|dtjhf}t|dddddddddddddthf}|sdt	d	|
d
}|rz|dkrtddd|d}t|ddthf t|ddddddd fddddthdd htf}t||pd dt|d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 ]Z\}
}|	| d"|
 |
d
pf|t|ddp||
d#t|
d$|d% q@t|	d!kr||	d&  n(t|	d!kr||	d& d
 |	d'd( ||d)< |S )*Nrm   .rn   ro   ZentryPointRootZ
otherPropsZdeeplinkAdCardZsnapshotzUnable to extract ad datar"   z{{product.name}}Zdisplay_formatZ	page_namez by )delim	from_dictbodyZ__mmarkupc                    s   |d   S )Nr   r   r   )	markup_idra   rb   r}   x  rl   z-FacebookAdsIE._real_extract.<locals>.<lambda>Z__htmlc                 S   s   |  d o| S Nz
{{product.r   r   ra   ra   rb   r}   y  rl   r   Zlink_descriptionc                 S   s   |  ds| S d S r'  r   r   ra   ra   rb   r}     rl   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   r   )rg   r   r   ra   rb   r     rl   z@FacebookAdsIE._real_extract.<locals>.<lambda>.<locals>.<genexpr>)r   r  r   r   r   rb   r}     rl   r   r   r#   Zvideo_preview_image_url)r    r"   r#   r&   r   r   r   )r"   r   _typer    )r  rU   r   rX   r   r   loadsr   r   r   r   r   rx   r	   r   r   r   r   r   r   r   r!  r   r   )r\   r-   rj   r   r   rq   r"   r%  r.   r   r   entryra   )r&  r\   rb   r  g  sn    


zFacebookAdsIE._real_extractN)
r  r  r  r  r  r   r  r  r!  r  ra   ra   ra   rb   r    st   
7r  )'r   rX   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  ra   ra   ra   rb   <module>   s&   \       "&