3
b`R                 @   s   d dl mZ d dlZd dlZddlmZ ddlmZmZm	Z	m
Z
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 G dd	 d	eZG d
d deZdS )    )unicode_literalsN   )InfoExtractor   )compat_etree_fromstringcompat_http_clientcompat_urllib_errorcompat_urllib_parse_unquote compat_urllib_parse_unquote_plus)
clean_htmlerror_to_compat_strExtractorErrorget_element_by_idint_or_none
js_to_jsonlimit_lengthparse_countsanitized_Requesttry_geturlencode_postdatac               @   s  e Zd ZdZdZdZdZdZdZdZ	dZ
dd	d
ddddddddddddddddddgddddd dd!d"d#d$ddd%d&d'd(dd)d*d+d,dd-d.d/dd0d1d+d,dd2d3d4d5dd6dd7d8d9d:d;d<d=d>dd?d@dAdBdedCdDdEdFddGdHdIdJdKdLdMidNdOdPddQdRdSdTddUdLdMidNdVdWddXdYdZd[dKdLdMidNd\dMd]d^dMd]d_dMd]d`dMd]dadMd]dbdMd]dcdMd]dddMd]dedfddgdhd+dLdMidNgZedidj Zdkdl Zdmdn ZdtdodpZdqdr ZdsS )u
FacebookIEa  (?x)
                (?:
                    https?://
                        (?:[\w-]+\.)?(?:facebook\.com|facebookcorewwwi\.onion)/
                        (?:[^#]*?\#!/)?
                        (?:
                            (?:
                                video/video\.php|
                                photo\.php|
                                video\.php|
                                video/embed|
                                story\.php
                            )\?(?:.*?)(?:v|video_id|story_fbid)=|
                            [^/]+/videos/(?:[^/]+/)?|
                            [^/]+/posts/|
                            groups/[^/]+/permalink/
                        )|
                    facebook:
                )
                (?P<id>[0-9]+)
                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facebookzhMozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36z-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/video.php?v=637842556329505&fref=nfZ 6a40d33c0eccbb1af76cf0485a052659Z637842556329505mp4zOre:Did you know Kei Nishikori is the first Asian man to ever reach a Grand SlamzTennis on FacebookZ20140908iT)idexttitleuploaderupload_date	timestampzRequires logging in)urlmd5	info_dictskipz4https://www.facebook.com/video.php?v=274175099429670Z274175099429670z"re:^Asif Nawab Butt posted a videozAsif Nawab ButtZ20140506iV"iSzre:^https?://.*)r   r   r   r   r   r   	thumbnailr   )r   r!   expected_warningsz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   r    r!   r"   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   )r%   r   r    r!   z6https://www.facebook.com/cnn/videos/10155529876156509/Z 9571fae53d4165bbbadb17a94651dcdcZ10155529876156509uT   She survived the holocaust — and years later, she’s getting her citizenship s...iXZ20161030ZCNN)r   r   r   r   r   r   r#   
view_count)r   r    r!   zAhttps://www.facebook.com/yaroslav.korpan/videos/1417995061575415/Z1417995061575415z$md5:1db063d6a8c13faa8da727817339c857isXZ20170209zYaroslav Korpan)r   r   r   r   r   r   skip_downloadT)r   r!   paramsz>https://www.facebook.com/LaGuiaDelVaron/posts/1072691702860471Z1072691702860471z$md5:ae2d22a93fbb12dad20dc393a869739diX20161024u   La Guía Del Varón)r   r   r   r   r   r   r#   zLhttps://www.facebook.com/groups/1024490957622648/permalink/1396382447100162/Z1396382447100162z$md5:19a428bbde91364e3de815383b54a235i&XZ20170202zElisabeth Ahtnz6https://www.facebook.com/video.php?v=10204634152394104)r   only_matchingzAhttps://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/z>https://www.facebookcorewwwi.onion/video.php?v=274175099429670zIhttps://www.facebook.com/onlycleverentertainment/videos/1947995502095005/z<https://www.facebook.com/WatchESLOne/videos/359649331226507/Z359649331226507z?#ESLOne VoD - Birmingham Finals Day#1 Fnatic vs. @Evil GeniuseszESL One Dota 2c             C   sT   g }x$t jd| D ]}|j|jd qW x$t jd| D ]}|j|jd q8W |S )Nzd<iframe[^>]+?src=(["\'])(?P<url>https?://www\.facebook\.com/(?:video/embed|plugins/video\.php).+?)\1r   z(?x)<div[^>]+
                class=(?P<q1>[\'"])[^\'"]*\bfb-(?:video|post)\b[^\'"]*(?P=q1)[^>]+
                data-href=(?P<q2>[\'"])(?P<url>(?:https?:)?//(?:www\.)?facebook.com/.+?)(?P=q2))refinditerappendgroup)webpageurlsmobj r2   IC:\Users\Broad\Desktop\All-Down\binaries\youtube_dl\extractor\facebook.py_extract_urls   s    
zFacebookIE._extract_urlsc             C   s  | j  \}}|d krd S t| j}| jddd | j|d ddd}| jd|d}| jd	|d
}||||dddddd	}t| jt|}|jdd y| j|d ddd}	tj	d|	d k	r| j
d|	dd dd}
|
rtd|
 dd| jjd d S | jd|	dd d}| jd |	d!d d}| s"| r&d S ||d"d#}t| jt|}|jdd | j|d d$d%}tj	d&|d k	r|| jjd' W nB tjtjtjfk
r } z| jjd(t|  d S d }~X nX d S ))Nzfacebook.comlocaleen_USzDownloading login pagezUnable to download login page)r%   errnotez/<input type="hidden" name="lsd" value="([^"]*)"lsdzname="lgnrnd" value="([^"]*?)"lgnrndzhttp://facebook.com/home.php01z-60)	emailpassr8   r9   nextZdefault_persistentZlegacy_returntimezoneZtrynumzContent-Typez!application/x-www-form-urlencodedz
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)defaultr.   z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)rA   z.name="h"\s+(?:\w+="[^"]+"\s+)*?value="([^"]+)"hZ	dont_save)rC   rD   Zname_action_selectedzConfirming login)r%   zid="checkpointSubmitButton"zSUnable to confirm login, you have to login in your browser and authorize the login.zunable to log in: %s)_get_login_infor   
_LOGIN_URL_set_cookie_download_webpage_search_regexr   
add_headerr+   search_html_search_regexr   _downloaderreport_warning_CHECKPOINT_URLr   URLErrorr   HTTPExceptionsocketr@   r   )selfZ	useremailpasswordZlogin_page_req
login_pager8   r9   
login_formrequestZlogin_resultsr@   rC   rD   Z
check_formZ	check_reqZcheck_responseerrr2   r2   r3   _login   sh    

zFacebookIE._loginc             C   s   | j   d S )N)rY   )rS   r2   r2   r3   _real_initialize1  s    zFacebookIE._real_initializec                s  t |}|jd| j | j||}d }dd  | j| jd|ddd|dd	}|r` |jd
g } fdd}|s| j| jd|ddd|tdd}||}|s`|s|dfS tj	d|}	|	d k	rt
d|	jd ddnd|kr| j  | j| j| |td| jd|ddd| jd|ddd| jd|ddddd d!id"}
| j| jd#|
d$dd|dd	}||}|snt
d%i }g }x|D ]}|d& }|rt|tr|g}| s~t|t rq~xzdJD ]r}xjdKD ]b}|d+ jd,||f }|r|d-krdLnd+}|d(kr|d/7 }|jd0|||f ||d1 qW qW |d+ jd2}|rf|j| jtt| |d+ jd3}|r~|jd4g jd5|i q~W |st
d6x|D ]}d7|jd8i d< qW | j| | jd9|d:d d}|s| jd;|d<d d}|s| jd=|d:d d}|r"t|d>}nd?| }ttd@|pZ| jdA|dBd dpZ| j|dd	}t| jdC|dDd d}| jdEdFg|}t | jdG|dHd d}||||||||dI}||fS )MNz
User-Agentc             S   s@   x:| D ]2}|d d dkr|d d }|j dr|d S qW d S )Nr   r   ZVideoConfigr   video_idZ	videoData)get)	instancesitemZ
video_itemr2   r2   r3   extract_video_data;  s
    

z8FacebookIE._extract_from_url.<locals>.extract_video_dataz handleServerJS\(({.+})(?:\);|,")zserver js dataz{})rA   F)fatalr]   c                s    | r t | dd tpg S d S )Nc             S   s   | d d S )NZjsmodsr]   r2   )xr2   r2   r3   <lambda>L  s    zUFacebookIE._extract_from_url.<locals>.extract_from_jsmods_instances.<locals>.<lambda>)r   list)Zjs_data)r_   r2   r3   extract_from_jsmods_instancesI  s    zCFacebookIE._extract_from_url.<locals>.extract_from_jsmods_instanceszbigPipe\.onPageletArrive\(({.+?})\)\s*;\s*}\s*\)\s*,\s*["\']onPageletArrive\s+(?:pagelet_group_mall|permalink_video_pagelet|hyperfeed_story_id_\d+)zjs data)transform_sourcer`   z8class="[^"]*uiInterstitialContent[^"]*"><div>(.*?)</div>z/The video is not available, Facebook said: "%s"r   T)rB   z>You must log in to continuez%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 token )Z__aZ__pcZ__revrC   zContent-Typez!application/x-www-form-urlencoded)dataheaderszfor\s+\(\s*;\s*;\s*\)\s*;(.+)ztahoe js datazCannot parse datastream_typesdhdsrcsrc_no_ratelimitr   z%s_%sprogressive
      z%s_%s_%s)	format_idr   
preferencedash_manifestsubtitles_srcenr   zCannot find video formatszfacebookexternalhit/1.1http_headersz2<h2\s+[^>]*class="uiHeaderTitle"[^>]*>([^<]*)</h2>r   zf(?s)<span class="fbPhotosPhotoCaption".*?id="fbPhotoPageCaption"><span class="hasCaption">(.*?)</span>zalternative titledescriptionP   zFacebook video #%sZfbPhotoPageAuthorNamezownerName\s*:\s*"([^"]+)"r   z<abbr[^>]+data-utime=["\'](\d+)r   zog:imageztwitter:imagez \bviewCount\s*:\s*["\']([\d,.]+)z
view count)r   r   formatsr   r   r#   r&   	subtitles)rj   rk   )rl   rm   i)!r   rJ   _CHROME_USER_AGENTrH   _parse_jsonrI   r\   r   r+   rK   r   r.   raise_login_required_VIDEO_PAGE_TAHOE_TEMPLATEr   
isinstancedictrc   r-   extend_parse_mpd_formatsr   r
   
setdefault_sort_formatsrL   _html_search_metar   r   r   _og_search_titler   r   )rS   r   r[   fatal_if_no_videoreqr/   
video_dataZserver_js_datard   Zm_msgZ
tahoe_dataZtahoe_js_datarz   ry   frq   qualitysrc_typerl   rr   rs   rt   video_titler   r   r#   r&   r!   r2   )r_   r3   _extract_from_url4  s    










zFacebookIE._extract_from_urlc                s    j |}|jdr j| n|} j||dd\}}|r>|S d|krz fdd j jd|dd	d
|D } j||S  j j| |dd\}}|S d S )Nz	facebook:F)r   z/posts/c                s    g | ]} j d | tj qS )zfacebook:%s)
url_resultr   ie_key).0vid)rS   r2   r3   
<listcomp>  s   z,FacebookIE._real_extract.<locals>.<listcomp>z)(["\'])video_ids\1\s*:\s*(?P<ids>\[.+?\])z	video idsids)r.   T)	_match_id
startswith_VIDEO_PAGE_TEMPLATEr   r|   rI   playlist_result)rS   r   r[   real_urlr/   r!   entries_r2   )rS   r3   _real_extract  s"    



zFacebookIE._real_extractN)T)__name__
__module____qualname__
_VALID_URLrF   rO   _NETRC_MACHINEIE_NAMEr{   r   r~   int_TESTSstaticmethodr4   rY   rZ   r   r   r2   r2   r2   r3   r      s   




?
 r   c            	   @   sL   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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20160826iW)r   r   r   r   r   r   )r   r    r!   add_iezrhttps://www.facebook.com/plugins/video.php?href=https%3A%2F%2Fwww.facebook.com%2Fvideo.php%3Fv%3D10204634152394104T)r   r*   zhttps://www.facebook.com/plugins/video.php?href=https://www.facebook.com/gov.sg/videos/10154383743583686/&show_text=0&width=560c             C   s   | j t| j|tj S )N)r   r	   r   r   r   )rS   r   r2   r2   r3   r     s    z$FacebookPluginsVideoIE._real_extractN)r   r   r   r   r   r   r   r   r2   r2   r2   r3   r     s   
r   )
__future__r   r+   rR   commonr   compatr   r   r   r	   r
   utilsr   r   r   r   r   r   r   r   r   r   r   r   r   r2   r2   r2   r3   <module>   s   4   J