
    yf                     "   d dl Z d dlZd dlZddlmZ ddlmZmZ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#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)y)    N   )InfoExtractor   )compat_etree_fromstring
compat_strcompat_urllib_parse_unquote)Request)network_exceptions)ExtractorError
clean_htmldetermine_exterror_to_compat_str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                   <   e Zd ZdZddgZdZdZdZdZdZ	dZ
g 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ZdZddiZdτ ZdЄ Zdф Zy)
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=1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/3676516585958356mp4zdr Adam Przygodaz$md5:34675bda53336b1d16400265c2bb9b3bzRADIO KICKS FM20230818i/'dre:^https?://.*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=nf 6a40d33c0eccbb1af76cf0485a052659637842556329505zOre:Did you know Kei Nishikori is the first Asian man to ever reach a Grand SlamzTennis on Facebook20140908iTr)   r*   r+   r-   r.   r/   zRequires logging in)r6   md5r7   skipz4https://www.facebook.com/video.php?v=274175099429670274175099429670Asif zAsif Nawab Butt20140506iV"iSHpfbid028wxorhX2ErLFJ578N6P3crHD3PHmXTCqCvfBpsnbSLmbokwSY75p5hWBjHGkG4zxlg)\``@)r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r4   zVideo with DASH manifestz4https://www.facebook.com/video.php?v=957955867617029 b2c28d528273b323abe5c6ab59f0f030957955867617029zPWhen you post epic content on instagram.com/433 8 million followers, this is ...zDemy de Zeeuw20160110iYV)noter6   r<   r7   r=   z8https://www.facebook.com/maxlayn/posts/10153807558977570 037b1fa7f3c2d02b7a0d7bc16031ecc6544765982287235z)"What are you doing running in the snow?"FailArmy)r)   r*   r+   r-   z
Video gonezOhttps://m.facebook.com/story.php?story_fbid=1035862816472149&id=116132035111903 1deb90b6ac27f7efcf6d747c8a27f5e31035862816472149z;What the Flock Is Going On In New Zealand  Credit: ViralHogzS. Saintzswf params escapedz<https://www.facebook.com/barackobama/posts/10153664894881749 97ba073838964d12c70566e0085c2b9110153664894881749zPAverage time to confirm recent Supreme Court nominees: 67 days Longest it's t...i,V20160223zBarack Obama)r)   r*   r+   r0   r/   r.   r-   zGif on giphy.com gonez6https://www.facebook.com/cnn/videos/10155529876156509/ ca63897a90c9452efee5f8c40d080e25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X20161030CNN100059479812265gw/=F@)r)   r*   r+   r,   r/   r.   r-   r0   r3   r1   r4   r2   r6   r<   r7   zAhttps://www.facebook.com/yaroslav.korpan/videos/1417995061575415/1417995061575415u@   Довгоочікуване відео | By Yaroslav - Facebooku'   Довгоочікуване відеоisX20170209zYaroslav KorpanGpfbid06AScABAWcW91qpiuGrLt99Ef9tvwHoXP6t8KeFYEqkSfreMtfa9nTveh8b2ZEVSWlg+9@)r)   r*   r+   r,   r/   r.   r-   r1   r4   r0   r3   r2   skip_downloadT)r6   r7   paramsz>https://www.facebook.com/LaGuiaDelVaron/posts/10726917028604711072691702860471z$md5:ae2d22a93fbb12dad20dc393a869739diX20161024u   La Guía Del Varón)r)   r*   r+   r/   r.   r-   r0   )r6   r7   r=   zLhttps://www.facebook.com/groups/1024490957622648/permalink/1396382447100162/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X20170202zElisabeth Ahtn100013949973717)r)   r*   r+   r,   r/   r.   r-   r1   zHhttps://www.facebook.com/groups/1645456212344334/posts/3737828833107051/1569199726448814zPence MUST GO!zVickie Gentry shared a memory.ideZ20171124zVickie GentryGpfbid0FuZhHCeWDAxWxEbr3yKPFaRstXvRxgsp9uCPG6GjD4J2AitB35NUAuJ4Q75KcjiDlgRb@)
r)   r*   r+   r,   r/   r.   r-   r1   r0   r2   zkhttps://www.facebook.com/attn/posts/pfbid0j1Czf2gGDVqeQ8KiMLFm3pWN8GxsQmeRrVhimWDzMuKQoR8r4b1knNsejELmUgyhl6968553779868435z$md5:2f2fcf93e97ac00244fe64521bbdb0cbzATTN:20231207g`@100064451419378i^re)r)   r*   r,   r-   r.   r+   r2   r1   r3   r0   r/   zhttps://www.facebook.com/permalink.php?story_fbid=pfbid0fqQuVEQyXRa9Dp4RcaTR14KHU3uULHV1EK7eckNXSH63JMuoALsAvVCJ97zAGitil&id=100068861234290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...Gpfbid0shZJipuigyy5mqrUJn9ub5LJFWNHvan5prtyi3LrDuuuJ4NwrURgnQHYR9fywBepl20231228iegd;Ox@)r)   r*   r+   r,   r0   r-   r1   r.   r/   r2   r3   zhttps://www.facebook.com/story.php?story_fbid=pfbid0Fnzhm8UuzjBYpPMNFzaSpFE9UmLdU4fJN8qTANi1Dmtj5q7DNrL5NERXfsAzDEV7l&id=100073071055552r6   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/359649331226507zBFnatic vs. EG - Group A - Opening Match - ESL One Birmingham Day 1z?#ESLOne VoD - Birmingham Finals Day#1 Fnatic vs. @Evil Geniusesit[20180523zESL One Dota 2100066514874195gʡE6@)r)   r*   r+   r,   r/   r.   r-   r1   r2   r3   r0   r4   z@https://www.facebook.com/100033620354545/videos/106560053808006/106560053808006JosefGpfbid0cibUN6tV7DYgdbJdsUFN46wc4jKpVSPAvJQhFofGqBGmVn3V3JtAs2tfUwziw2hUliX\gM@zJosef Novak20190204)r)   r*   r+   r0   r4   r1   r/   r2   r-   r,   r.   z1https://www.facebook.com/watch/?v=647537299265662zAhttps://www.facebook.com/PankajShahLondon/posts/10157667649866271r)   10157667649866271   )r6   r7   playlist_countr=   zHhttps://m.facebook.com/Alliance.Police.Department/posts/4048563708499330117576630041613zFacebook video #11757663004161318939301441643820201123i_)r)   r*   r+   r1   r.   r/   zMhttps://www.facebook.com/groups/ateistiskselskab/permalink/10154930137678856/211567722618337zFacebook video #21156772261833712787522765425420161122i3XzNo videoz7https://www.facebook.com/watch/live/?v=1823658634322275z3https://www.facebook.com/watchparty/211641140192478211641140192478r   z.https://m.facebook.com/events/1509582499515440637246984455045z;ANALISI IN CAMPO OSCURO " Coaguli nel sangue dei vaccinati"zDOther event by Comitato Liberi Pensatori on Tuesday, October 18 2022zComitato Liberi Pensatori100065709540881)r)   r*   r+   r,   r0   r-   r1   zK(?:pagelet_group_mall|permalink_video_pagelet|hyperfeed_story_id_[0-9a-f]+)graphURIz/api/graphql/c           
         t        | j                        }| j                  ddd       | j                  |d dd      }| j	                  d|d      }| j	                  d	|d
      }||||dddddd	}t        | j                  t        |            }d|j                  d<   	 | j                  |d dd      }	t        j                  d|	      :| j                  d|	dd d      }
|
rt        d|
z  d      | j                  d       y | j	                  d|	dd       }| j	                  d |	d!d       }|r|sy ||d"d#}t        | j                  t        |            }d|j                  d<   | j                  |d d$%      }t        j                  d&|      | j                  d'       y y # t        $ r'}| j                  d(t        |      z         Y d }~y d }~ww xY w))Nzfacebook.comlocaleen_USzDownloading login pagezUnable to download login page)rF   errnotez/<input type="hidden" name="lsd" value="([^"]*)"lsdzname="lgnrnd" value="([^"]*?)"lgnrndzhttp://facebook.com/home.php01z-60)	emailpassr   r   nextdefault_persistentlegacy_returntimezone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: %sT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r   z.name="h"\s+(?:\w+="[^"]+"\s+)*?value="([^"]+)"h	dont_save)r   r   name_action_selectedzConfirming login)rF   zid="checkpointSubmitButton"zSUnable to confirm login, you have to login in your browser and authorize the login.zunable to log in: %s)r	   
_LOGIN_URL_set_cookie_download_webpage_search_regexr   headersresearch_html_search_regexr   report_warning_CHECKPOINT_URLr
   r   )selfusernamepasswordlogin_page_req
login_pager   r   
login_formrequestlogin_resultsr   r   r   
check_form	check_reqcheck_responseerrs                    ;/usr/lib/python3/dist-packages/yt_dlp/extractor/facebook.py_perform_loginzFacebookIE._perform_login  s@    17;++ND1I4S , U
   > ##$EzS[\ 2"% 


 $//+=j+IJ*M'!	 227D8DNj 3 lMyy<mLX//!=$g 0 O ()>)FQUVV##  %Q  R((/	SW ) YG""A=RU_c # eA ! #(3J
   4 46H6TUI0SIn-!33It9K 4 MNyy7HT##$yz U! 	 69LS9Q QR	s&   A$F$ .F$ 3A/F$ $	G-GGc                    *+,-./0  j                  |j                  dd            0 fd}d }d - j                   j                  ddg0dd	      d
      }|r -|j	                  dg             }-fd} fd+d / 0fd,,fd}|sO j                   j                  d j
                  z   d j
                  z  g0dd	      t        d
      } ||      }|st |d      }|rig **+/ 0fd.di.fd	}	t        t        |dd      xs g       }
t        |
dddddddd d!t        hf
      }|D ]:  }t        |d"ddt        hfd#ddd$d!t        hf      }|D ]
  } |	|         |	|       < t        |d% t              xs g }|D ]  } |	|d&        t        |d'd(t        )      xs i }|r2t        |d* d+ gt              xs g }|D ]
  } |	|        *s .|       t        *      d,kD  r j                  *      S *r*d-   nd.i} |0      }|j	                  d/      r|d/   |d/<   |j	                  d0      r|d0   |d0<   t        ||      S |s[t        j                   d10      }|t#        d2|j%                  d,      z  d34      t'        0fd5d6D              r j)                          |s^d7|v rYd8t+        j,                  d9i      d:} |d;      }|rt        |d< t              }|r|d=   ||d>   <    ,d?      }|j	                  d@      xs g D ]  }|d-   dAk(  s|dB    _          j1                  t3        | j.                  dC         t5        |      D      dE   dF   }g *t        |dG       xs g D ]  }t        |dH       xs i }|j	                  d.      }|s(t7        |      }*j9                   j;                   j<                  |z   j?                         ||j	                  d>                     j                  *      S |s j                   j@                  z  t5        d, j                  dI0dJdK	       j                  dL0dMdN	       j                  dO0dPdQ	      dR      dSdTiU      } j                   j                  dV|dWd	      d
      } ||      }|st#        dX      t        |      d,kD  r~g *|D ]e  }|d-   j	                  dY      }|s*j9                   j;                  t3        ||       j?                         |d-   j	                  dZ                   g  j                  *      S |d-   }g } i }!|D ]  }"|"d[   }#|"rtC        |"t              r|"g}"|"rtC        |"t              s0d\D ]]  }$d]D ]V  }%|"d-   j	                  |$d^|%      }&|&s|#d_k(  rd`nda}'|$dbk(  r|'d,z  }'| j9                  |#d^|$d^|%|&|'|$dbk(  rdcnd dd       X _  +|"d-   |        |"d-   j	                  de      }(|(s|!jE                  dfg       j9                  dg|(i        | |!dh}) /|)       |)jG                   |0             |)S )jNz://m.facebook.com/z://www.facebook.com/c                 D   t        j                  d|       D cg c]  }j                  |d       }}t        |dt              xs g }t        |dddfdft              }t        |d	      }t        |d
      }|xs9 j                  ddj                  d      j                  d      df| dd d      }|xs j                  g d| dd       }t        |dt        hf      xsV t        |dddddd f      xsA t        |ddd f      xs/ t        |dddt        hf      xs t        |ddt        hf      xs i }|j                  d       xs? t        t        d!|             xs( j                  d"gj                  d      | d#d      }	t        j                  d$| d%d             }
j                  d&d'g| d(d       }|rt        j                  d)|      sd }||	|j                  d*      |
|t!        j                  d+| d,d             t        |d-d.t        hf      d/}j#                  | i       }t        j$                  d0d1|xs |j                  d      xs |xs d1      xs |xs d1j'                  d2d3      xs d4 |d<   t)        ||      S c c}w )5Nz-data-sjs>({.*?ScheduledServerJS.*?})</script>Ffatal).require...__bboxr   ...r   resultdataexpected_type.attachmentsc                 H    | dk(  xr t        |d         k(  xr |d   dk(  S )Nmediar)   
__typenameVideo)str)kvvideo_ids     r   <lambda>zHFacebookIE._extract_from_url.<locals>.extract_metadata.<locals>.<lambda>  s0    WXQtW!9XaoQX>X     )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+   contentr   )r,   zog:descriptionztwitter:descriptionr,   r   ownervideor   r   c                     | dk(  xr |d   S Nr   name r   r   s     r   r   zHFacebookIE._extract_from_url.<locals>.extract_metadata.<locals>.<lambda>  s%    ijnuiu  jDz{  }C  {D r   c                     | dk(  xr |d   S r   r   r   s     r   r   zHFacebookIE._extract_from_url.<locals>.extract_metadata.<locals>.<lambda>  s    qG|?YPQRXPY r   nodeactorseventevent_creatorr   fbPhotoPageAuthorNamezownerName\s*:\s*"([^"]+)"r-   z<abbr[^>]+data-utime=["\'](\d+)r/   zog:imageztwitter:imager0   z\.(?:jpg|png)r)   )z \bviewCount\s*:\s*["\']([\d,.]+)z!video_view_count["\']\s*:\s*(\d+)z
view count)r   )..r   .r   liveViewerCount)r,   r-   r1   r/   r0   r3   r4   z\s*\|\s*Facebook$r@   
 zFacebook video #)r   findall_parse_jsonr   dictr   r   _meta_regex_html_search_metagetr   r   r   _og_regexesr   r   r   _search_json_ldsubreplacer   )webpagej	post_datapostr   r+   r,   
page_titleuploader_datar-   r/   r0   r7   info_json_ldr   r   s                 r   extract_metadataz6FacebookIE._extract_from_url.<locals>.extract_metadata  s   MOZZ@'NK L))!XU)C LI L	 ,o CD J HJ  ]C BZ ([jnpEe%67E#E+vwK @$"9"9P E  ,d.>.>.OQs; Y	 #: #@J
 & 6)?)?H *@ *6K %'D6!23 MTG-=}cSZ  ]D  $E  FMTC2Y#Z[M TFHcD6#BCM TG_tf#EF	M KM  %((0 s,-DgNO r%%1ND4D4DW4MNPWYckp & r  $D$6$62GT %7 %+ ,I .._-wT / SI
 +;Y!G 	*$,006&&)$*<*<`\4 += +9 : *34FHY\g[h:j *kI  //2/NL%'VV,@"eF||O_O_`gOhF|lvF|z|%} &p)4):(C(CD#(N&pTdemdnRo !|Y77iLs   Jc                     g }| D ]A  }t        |d       dk(  s|d   d   }|j                  d      s.|j                  |d          C |S )Nc                     | d   d   S )Nr   r   r   xs    r   r   zJFacebookIE._extract_from_url.<locals>.extract_video_data.<locals>.<lambda>   s    1Q47 r   VideoConfigr   r   r   	videoData)r   r   append)	instances
video_dataitem
video_items       r   extract_video_dataz8FacebookIE._extract_from_url.<locals>.extract_video_data  s\    J! C4!23}D!%aJ!~~j1"))*[*AB	C
 r   z handleServerJS\(({.+})(?:\);|,")z\bs\.handle\(({.+?})\);zserver js data{}r   Fr   r   c                 B    | r t        | d t              xs g       S y )Nc                     | d   d   S )Njsmodsr   r   r   s    r   r   zUFacebookIE._extract_from_url.<locals>.extract_from_jsmods_instances.<locals>.<lambda>0  s    q{;'? r   )r   list)js_datar   s    r   extract_from_jsmods_instanceszCFacebookIE._extract_from_url.<locals>.extract_from_jsmods_instances-  s3    )'?+G +MJLN N r   c           	          | j                  d      }|rX|j                  j                  t        t        j
                  j                  |            | j                  d                   y y )Ndash_manifestdash_manifest_url)mpd_url)r   extend_parse_mpd_formatsr   urllibparseunquote_plus)r   formatsr  r   s      r   extract_dash_manifestz;FacebookIE._extract_from_url.<locals>.extract_dash_manifest2  s[    !IIo6Mt66+FLL,E,Em,TU!II&9:  7  < = r   c                 l    | d   D ],  }d|j                  di       d<   d|j                  di       d<   . y )Nr  zfacebookexternalhit/1.1http_headersz
User-Agenti  downloader_optionshttp_chunk_size)
setdefault)infofs     r   process_formatsz5FacebookIE._extract_from_url.<locals>.process_formats9  sI     )_ V B[^R0>LU1267HIVr   c                 `    j                  j                  d| z  dd      d      xs i S )Nzdata-sjs>({.*?%s.*?})</script>zreplay datar   r   Fr   )r   r   )_filterr   r   r   s    r   extract_relay_dataz8FacebookIE._extract_from_url.<locals>.extract_relay_dataC  sL    ##D$6$61G; %7 %67?u $ N TQSTr   c                 R    t         |       ddd dddddt        hf	d	      xs i S )
Nr   )N)...r   r   c                 &    t        d |D              S )Nc              3   >   K   | ]  }|j                  d         yw)RelayPrefetchedStreamCacheN)
startswith).0keys     r   	<genexpr>zhFacebookIE._extract_from_url.<locals>.extract_relay_prefetched_data.<locals>.<lambda>.<locals>.<genexpr>K  s      [RU0L!M [s   )any_r   s     r   r   zUFacebookIE._extract_from_url.<locals>.extract_relay_prefetched_data.<locals>.<lambda>K  s    S [YZ [[ r   .r   r   r   Fget_all)r   r   )r  r  s    r   extract_relay_prefetched_datazCFacebookIE._extract_from_url.<locals>.extract_relay_prefetched_dataH  sK     27 ;G[S(Hftf>> HMN T RTTr   zNbigPipe\.onPageletArrive\(({.+?})\)\s*;\s*}\s*\)\s*,\s*["\']onPageletArrive\s+z4bigPipe\.onPageletArrive\(({.*?id\s*:\s*"%s".*?})\);zjs dataz/"(?:dash_manifest|playable_url(?:_quality_hd)?)c           
      L   | j                  d      xs | j                  d      xs }t        | dddt        hf      }|r%| d   } t        | d      | d<   | j                  |       g }t	        dd	g      }d
D ]g  \  }}| j                  |      }|st        |      dk(  r"|j                  j                  |             J|j                  | ||      dz
  |d       i  | |       i i }	}t        | dt        hf      }
t        | dd hd f      D ]  }|j                  d      xs d}|d   t        |d| d|      d}|j                  d      s|
r%|j                  |d   g       j                  |       h|	j                  |d   g       j                  |        t        | dt        hf      }|r'|s%|	s#j                  ddgdd      }d|ig|
r|n|	|<   ||t        | dd       t        | ddt        hf      t        | d!d"t        #      t!        | j                  d$      d%      xs t!        | j                  d&            ||	d'} |       t#        | d(       }| j                  d)      }|r|j                  ||d*       n|xs d+|z  |d,<   j                  |       y )-NvideoIdr)   r   short_form_video_contextplayback_video)r(  video_ownerr   sdhd))playable_urlr+  )playable_url_quality_hdr,  )playable_url_dashr@   )browser_native_hd_urlr,  )browser_native_sd_urlr+  mpdrr   )	format_idqualityr6   is_video_broadcast video_available_captions_localesc                     t        | d       S )Nc                     | d   S )Nr   r   )cs    r   r   z]FacebookIE._extract_from_url.<locals>.parse_graphql_video.<locals>.<lambda>.<locals>.<lambda>z  s
    1X; r   r  )sortedr   s    r   r   zKFacebookIE._extract_from_url.<locals>.parse_graphql_video.<locals>.<lambda>z  s    6!1F#G r   c                     t        |d         S )Ncaptions_url)r   r!  s     r   r   zKFacebookIE._extract_from_url.<locals>.parse_graphql_video.<locals>.<lambda>{  s    [>1B%C r   localized_languageundr=  localized_countryz (%s)r   )r6   r   localized_creation_methodr   z	og:localeztwitter:localer   r6   )thumbnailImageuri)preferred_thumbnailimagerC  publish_timecreation_timer   playable_duration_in_msi  length_in_second)r)   r  r0   r1   r/   r2   automatic_captions	subtitlesc                     | d   d   S )Nsavable_descriptionr   r   r   s    r   r   zKFacebookIE._extract_from_url.<locals>.parse_graphql_video.<locals>.<lambda>  s    1=R;STZ;[ r   r   )r+   r,   zFacebook video #%sr+   )r   r   r   updater   r   r  _extract_mpd_formatsr   boolr   r  r   r   r   r   r   r   )r   v_id	reel_infor  qr  r3  r-  rJ  rK  is_broadcastcaptionlangsubsr=  r   r  r,   r+   entriesr  r  r   r   r   s                      r   parse_graphql_videoz9FacebookIE._extract_from_url.<locals>.parse_graphql_video[  s    99Y/N599T?NhD , 02LN^ae`fg!iI  %&6 7)5e=h)igY/ G!4,/A+L Y (-yy~+$(6%?#NN4+D+D\S[+\]#NN-6+,Y<!+;'3	,  *%946	&#/8Ltf7U#VL#/:GHC8 $ U
  '{{+?@IE#*>#:$0:MRVQWW\~gk$l  #;;'BC|.99'(:KRPWWX\]%001BBGNNtTU $07V#WL#,>y!%!7!7(*:;WhX_ "8 "aX]_kWlVm|+FS ##*%1!#<>e&g'3EGTK=;Y'Z%1%hs%t%2599=V3WY]%^ &U(5eii@R6S(T.@%.D $D)")%1["\K!IIf-E%*+6% 
 )4(R7Kd7RWNN4(r   c                 h    | j                  |      xs i }|j                  d      dk(  r |      S y )Nr   r   )r   )
attachmentr  r   rY  s      r   parse_attachmentz6FacebookIE._extract_from_url.<locals>.parse_attachment  s7    &NN3/52Eyy.'92599 :r   nodesr   .r   r   r   )Nattached_storyr   )stylesstyle_type_renderer)throwbackStylesattachment_target_rendererr[  all_subattachmentstargetr_  c                     | d   d   d   S )Nmediaset	currMediaedgesr   r   s    r   r   z.FacebookIE._extract_from_url.<locals>.<lambda>  s    *k0J70S r   r:  )r   cover_media_renderercover_videor   r   c                     | d   d   S )Nr   r   r   r   s    r   r   z.FacebookIE._extract_from_url.<locals>.<lambda>  s    !G*]"; r   c                     | d   d   S )Nr   r   r   r   s    r   r   z.FacebookIE._extract_from_url.<locals>.<lambda>  s    !$4"5m"D r   r   r   r)   r2   r0   z8class="[^"]*uiInterstitialContent[^"]*"><div>(.*?)</div>z/The video is not available, Facebook said: "%s"Tr   c              3   &   K   | ]  }|v  
 y wNr   )r  pr   s     r   r  z/FacebookIE._extract_from_url.<locals>.<genexpr>  s      )aQ'\ )s   )z>You must log in to continuezid="login_form"zid="loginbutton"z/watchparty/l   Ws/j livingRoomID)doc_id	variablesz"login_data"\s*:\s*{c                     | d   d   S )N
login_datar   r   r   s    r   r   z.FacebookIE._extract_from_url.<locals>.<lambda>  s    <9O r   valuer   z!\[\s*"RelayAPIConfigDefaults"\s*,defineRelayAPIConfigDefaultsr   r}   )r   r   living_roomc                     | d   d   d   S )Nrecapwatched_contentrh  r   r   s    r   r   z.FacebookIE._extract_from_url.<locals>.<lambda>  s    '
CT8UV]8^ r   c                     | d   d   S )Nr   r   r   r   s    r   r   z.FacebookIE._extract_from_url.<locals>.<lambda>  s    &	'0B r   z%pkg_cohort["\']\s*:\s*["\'](.+?)["\']z
pkg cohortzPHASED:DEFAULTz!client_revision["\']\s*:\s*(\d+),zclient revision3944515z>"DTSGInitialData"\s*,\s*\[\]\s*,\s*{\s*"token"\s*:\s*"([^"]+)"z
dtsg tokenr@   )__a__pc__revr   r   r   )r   r   zfor\s+\(\s*;\s*;\s*\)\s*;(.+)ztahoe js datazCannot parse data	video_urlr   stream_type)r+  r,  )srcsrc_no_ratelimitr"  progressiveir,  i  )r3  r6   r4  heightsubtitles_srcenr6   )r)   r  rK  )r   )$r   r   r   r   r   _SUPPORTED_PAGLETS_REGEXr   r    r   r   r   r   lenplaylist_resultr   r   r   r   r   r   raise_login_requiredjsondumps_api_config_download_jsonr   r   r   r   
url_result_VIDEO_PAGE_TEMPLATEie_key_VIDEO_PAGE_TAHOE_TEMPLATE
isinstancer  rN  )1r   r6   r   r   r   server_js_datar  r%  r   r\  r]  r   r[  nsnrh  edger   
video_infowebpage_infom_msgr   prefetched_datar   
relay_datarv  rx  rQ  
tahoe_datatahoe_js_datar   r  r  rK  r  r3  r4  src_typer  
preferencer  r7   rX  r  r  r   rY  r  r   s1   ` `                                       @@@@@@@r   _extract_from_urlzFacebookIE._extract_from_url  s   ((KK,.DExQ5	8n 
	 ))$*<*<02LM%t += +56>e * M +N,>,>{B,OPJ	N
	=	V	T
	T !--d.@.@adh  eB  eB  BG$JgJggB 	4 /A /1 3;JON 7~FJ0BDDG) G)R:
 !dGV!D!JK*5)9g?WYfm 4&3* + #. 1J%j3GRUX\W]2^'/X|^b]c&dfB ,(+,$Z01  &SUYZ`^`! 7D$Tv67 %T ,DEL\`b heg ")%;D2 # ## !#   '2 5
(45"+E2w<!#//BB+2WQZx8H
/8>>*-/9*/EL,>>+.0:;0GL-"<<<IIY[bcE $ETUV!# #  ) ,( ) ) ))+n3*!ZZ"H) I <<STOo/OQUV-0\Ic&k*+,PQJ%>>(39r 1!9 88'-ayD$1 --T--j9:H'	2 . 44:<<IKK G .^_ece =&BCIryy!$'t--4KKM46): < == '':: ////(:H' ..@'$.> / @ "//<g)9 0 >  $11Yr  2  ;)  #$G 0 J" !,,""4j#T # 3 	 - 'M
 7}EJ !455z?QG KaDHH[1	 tw0$%)[[]AaDHHZ4H J K	K ''::]
	 	NA-(IZ4(CJq$/'  ; HA$((gx#@AC -6,FSB
"d?&!OJ7@'8)T#&'1-4_c$	(  "!A$0aDHH_5M$$T2.55um6LM1	N6 "
	
 		")'23r   c                     | j                  |      }|j                  d      r| j                  |z  n|}| j                  ||      S )Nz	facebook:)	_match_idr  r  r  )r   r6   r   real_urls       r   _real_extractzFacebookIE._real_extractQ  sA    >>#&;>>>+;V4,,x7\_%%h99r   N)__name__
__module____qualname__
_VALID_URL_EMBED_REGEXr   r   _NETRC_MACHINEIE_NAMEr  r  int_TESTSr  r  r   r  r  r   r   r   r"   r"   '   s   J4 	p	cL pJuONGJ!}OO$'A(%#+, %&
 O" N1#f,%#
 &!O< F#)%#+e%(
9OZ +E1#g'%#
 &YOt J1#@"	
 
sOH a1$R"	
 
GO\ %M1%h+#%&
 ([O| H1%< g#%+,%(
wOb S$WD#%)d%(+!
 T
%]OJ P$;#%-+
 &GOd ^#H J#%(,	
 &aO@ Z$%;#%'d+
}O^ }$A%,+#
[O~ ^#! n+$d%#
{O\ Z[Ob HaOh SgOp tmOx *uO@ \}OH REOP xMOX [UO` N#Y\#%(, +%(
 T
#]OH R#+%(d#%%
EOh CeOr S%
 %	mOB	 Z#6,%#
 &O\	 _#6,%#
 Y	Ot	 Iq	Oz	 E#
 %y	OJ
 @#Ra+3,
G
OF`
  nOK9vob:r   r"   c            	       b    e Zd ZdZdddddddd	d
ej                         gdddddddgZd Zy)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=560 5954e92cdfe51fe5782ae9bda7058a0710154383743583686r%   zWhat to do during the haze?zGov.sg20160826iWr;   )r6   r<   r7   add_iezrhttps://www.facebook.com/plugins/video.php?href=https%3A%2F%2Fwww.facebook.com%2Fvideo.php%3Fv%3D10204634152394104Trh   zhttps://www.facebook.com/plugins/video.php?href=https://www.facebook.com/gov.sg/videos/10154383743583686/&show_text=0&width=560c                 z    | j                  t        | j                  |            t        j	                               S rn  )r  r   r  r"   r  )r   r6   s     r   r  z$FacebookPluginsVideoIE._real_extractp  s0    's(;<! 	!r   N)r  r  r  r  r"   r  r  r  r   r   r   r  r  X  se    eJ _1%2 %#
 $$&' D Q!F*!r   r  c                       e Zd ZdZdZdi dddddd	d
dddd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&eed'd(gd)d(id*gZd+ Zy,)-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=1r)   pO8h3EaFRdor*   r%   r+   z.Tripeo Boiler Room x Dekmantel Festival DJ Setr,   z$md5:2d713ccbb45b686a1888397b2c77ca6b
channel_idUCGBpxWJr9FNOcFYA5GkKrMgplayable_in_embedT
categoriesMusicchannelzBoiler Roomr1   brtvofficialr-   tagszcount:11r2   i  live_statusnot_liver0   z4https://i.ytimg.com/vi/pO8h3EaFRdo/maxresdefault.jpgchannel_urlz8https://www.youtube.com/channel/UCGBpxWJr9FNOcFYA5GkKrMgavailabilitypublicuploader_urlz(http://www.youtube.com/user/brtvofficial20150917r   )r.   	age_limitr3   
like_countYoutuberX   )r6   r7   r  rY   c                     t        t        |      j                  dd g      d         }|st        dd      | j	                  |      S )NuzInvalid facebook redirect URLTr   )r   r   r   r   r  )r   r6   redirect_urls      r   r  z#FacebookRedirectURLIE._real_extract  sD    "8C=#4#4S4&#A"#EF !@4PP|,,r   N)r  r  r  IE_DESCr  r  r  r  r   r   r   r  r  v  s   GDJ}
-
5
 E
 A	

 4
  
 7)
 }
 >
 
 J
 
 :
 O
 U
  H!
" F#
$ &+
. +"I.5 F:-r   r  c                   >    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 Zy)FacebookReelIEz4https?://(?:[\w-]+\.)?facebook\.com/reel/(?P<id>\d+)zfacebook:reelz.https://www.facebook.com/reel/1195289147628387 f13dd37f2633595982db5ed8765474d31195289147628387r%   z$md5:b05800b5b1ad56c0ca78bd3807b6a61ez$md5:22f03309b216ac84720183961441d8dbz$md5:723e6cb3091241160f20b3c5dc282af1100040874179269g r(#@iNa20211121r'   )
r)   r*   r+   r,   r-   r1   r2   r/   r.   r0   rT   c                 Z    | j                  |      }| j                  d| dt        |      S )Nz https://m.facebook.com/watch/?v=z&_rdr)r  r  r"   )r   r6   r   s      r   r  zFacebookReelIE._real_extract  s3    >>#&.xj>
HV 	Vr   N)r  r  r  r  r  r  r  r   r   r   r  r    sJ    HJG @1$;A>,#%+
 F"Vr   r  c                   |    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! Zd" Z	y#)$FacebookAdsIEzLhttps?://(?:[\w-]+\.)?facebook\.com/ads/library/?\?(?:[^#]+&)?id=(?P<id>\d+)zfacebook:adsz8https://www.facebook.com/ads/library/?id=899206155126718899206155126718r%   zvideo by KandaoKandao774114102743284r'   ijze20231214)
r)   r*   r+   r-   r1   r  r/   r0   r.   r  r5   z8https://www.facebook.com/ads/library/?id=893637265423481893637265423481u@   Jusqu’à -25% sur une sélection de vins pétillants italiens zEataly Paris Marais2086668958314152iIpe20231226)r)   r+   r-   r1   r  r/   r.   r  rr   )r6   r7   rs   z:https://es-la.facebook.com/ads/library/?id=901230958115569Trh   z6https://m.facebook.com/ads/library/?id=901230958115569)zsd-wmkzSD, watermarked)r+  N)zhd-wmkzHD, watermarked)r,  N)watermarked_video_sd_urlvideo_sd_urlwatermarked_video_hd_urlvideo_hd_urlc                     g }t        |t        j                  h fdf      D ]^  \  }}|j                   j                  |   d    j                  |   d   |d t        t         j                              |      d       ` |S )Nc                 F    |d   j                   v xr t        |d         S )Nr   r   )_FORMATS_MAPr   )r"  r   r   s     r   r   z0FacebookAdsIE._extract_formats.<locals>.<lambda>  s'    qtt/@/@'@'V[QRSTQUEV r   r   r   r%   )r3  format_noter6   r*   r4  )r   r   itemsr   r  r   tuple)r   
video_dictr  
format_key
format_urls   `    r   _extract_formatszFacebookAdsIE._extract_formats  s    &2:ZZLV@
 ' 		"J
 NN!..z:1=#00<Q?!>9U4+<+<%=>zJ 		 r   c                      j                  |      } j                  ||      }t        j                  d|      D cg c]  } j	                  ||d       }}t        |ddddddddt        hf	d	      }|st        d
      |j                  d      }|r|dk(  rt        ddd|      }t        |dt        h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f      d      D ]}  \  }
}|	j                  | d|
 |j                  d      xs ||j                  d      xs |j                  d      t        |j                  d             j!                  |      d        t#        |	      dk(  r|j%                  |	d          n)t#        |	      dkD  r|j%                  |	d   d   |	d d!       ||d"<   |S c c}w )#Nz!s\.handle\(({.*})\);requireLazy\(Fr   .r   propsdeeplinkAdCardsnapshotr#  zUnable to extract ad datar+   z{{product.name}}display_format	page_namez by )delim	from_dictlink_descriptionc                     | dk7  r| S d S )Nz{{product.description}}r   r   s    r   r   z-FacebookAdsIE._real_extract.<locals>.<lambda>  s    qLeGe! ko r   page_idpage_profile_urirG  page_like_count)r,   r-   r1   r  r/   r  )videoscardsc           	      l    t        j                  D cg c]  }t        ||          c}      S c c}w rn  )r   r  r   )r"  r   r  r   s      r   r   z-FacebookAdsIE._real_extract.<locals>.<lambda>  s+    SUYUfUf9gPQ+ad:K9g5h 9gs   1r   r"  r,   video_preview_image_url)r)   r+   r,   r0   r  r   playlist)r+   rX  _typer)   )r  r   r   r   r   r   r   r   r   r   r   r   r   r   	enumerater   r  r  rN  )r   r6   r   r   r   r   r   r+   r7   rX  idxentrys   `           r   r  zFacebookAdsIE._real_extract  s*   >>#&((h7 !jj)MwWY %%a%? Y	 YICc74DjSWRX(Zchj !<==!!33!"2KvY]^E .8o7pq$se,%}5/+?)K=9,{m<(
 	 #L&(hi%klm
 		JC NN!
!C5)7+4u$yy);<\	m@\(3L)MN007 		 w<1WQZ(\A G,"#  #	$YYs   GN)
r  r  r  r  r  r  r  r  r  r  r   r   r   r  r    s    `JG J#& ,.#+%
 J#f--.#%	
  L H=!FH %B$$A$	L0r   r  )*r  r   urllib.parser  commonr   compatr   r   r   
networkingr	   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>r     s     	  ! 
 ! 6     4n: n:b!] !<$-M $-NV] V6lM lr   