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Y’V)Ú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:1db063d6a8c13faa8da727817339c857i™sœXZ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   úNC:\Users\Broad\Desktop\BeinConnetFix\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�}
|
rÞt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	rÖt
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& }|�r¤t|tƒ�r¤|g}| �s~t|tƒ �r¾�q~xzdJD ]r}xjdKD ]b}|d+ jd,||f ƒ}|�rÎ|d-k�rüdLnd+}|d(k�r|d/7 }|jd0|||f ||d1œƒ �qÎW �qÄW |d+ jd2ƒ}|�rf|j| jtt|ƒƒƒƒ |d+ jd3ƒ}|�r~|jd4g ƒjd5|iƒ �q~W |�s¤t
d6ƒ‚x|D ]}d7|jd8i ƒd< �qªW | 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_instancesz“bigPipe\.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ÚdescriptionéP   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.+)z�https://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20160826ièÁ¿W)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