U
    $Pfm                     @   s   d dl mZ d dlZddlmZ ddl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 ddl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eZdS )    )unicode_literalsN   )InfoExtractor   )compat_HTTPErrorcompat_parse_qscompat_urllib_parse_unquotecompat_urllib_parse_urlparse)
dict_getExtractorErrorfloat_or_noneint_or_nonetry_getstrip_or_noneunified_timestampupdate_url_queryurl_or_none
xpath_text)PeriscopeBaseIEPeriscopeIEc                   @   s@   e Zd ZdZdZdZdd Zdd Zedd	 Z	i fd
dZ
dS )TwitterBaseIEzhttps://api.twitter.com/1.1/z0https?://(?:(?:www|m(?:obile)?)\.)?twitter\.com/Nc                 C   sv   | d}|sg S d|kr0| j||dddddS tt|dd	pBd }|d
|rTd| nd |d}| || |gS d S )Nurlz.m3u8mp4Zm3u8_nativeZhlsF)m3u8_idfatal)ZbitrateZbit_rate  httpz-%d )r   Z	format_idtbr)getZ_extract_m3u8_formatsr   r
   _search_dimensions_in_video_url)selfvariantvideo_idZvariant_urlr   f r%   @/tmp/pip-unpacked-wheel-7zdooeg3/youtube_dl/extractor/twitter.py_extract_variant_formats%   s&    
    z&TwitterBaseIE._extract_variant_formatsc                 C   s   t |}|sg S | ||}g }g }|dD ]<}t|jd |jd< ||jd  || |j| q.tt	|d}||kr|| d|i| |S )Nz:.//{http://twitter.com/schema/videoVMapV2.xsd}videoVariantr   z.//MediaFile)
r   Z_download_xmlfindallr   attribappendextendr'   r   r   )r!   vmap_urlr#   Z	vmap_dataformatsurlsZvideo_variant	video_urlr%   r%   r&   _extract_formats_from_vmap_url7   s&    
 z,TwitterBaseIE._extract_formats_from_vmap_urlc                 C   s8   t d|}|r4| t|dt|dd d S )Nz /(?P<width>\d+)x(?P<height>\d+)/widthheightr1   r2   )researchupdateintgroup)Za_formatr/   mr%   r%   r&   r    I   s    z-TwitterBaseIE._search_dimensions_in_video_urlc              
   C   s   ddi}| j s.| j| jd |dd|dd | _ | j |d< z| j| j| |||d	W S  tk
r } zHt|jtr|jjd
krt| |j	 
 |d d d dd W 5 d }~X Y nX d S )NAuthorizationzyBearer AAAAAAAAAAAAAAAAAAAAAPYXBAAAAAAACLXUNDekMxqa8h%2F40K4moUkGsoc%3DTYfbDKbT3jJPCEVnMYqilB28NHfOPqkca3qaAxGfsyKCs0wRbwzguest/activate.jsonzDownloading guest token    )dataheadersZguest_tokenzx-guest-token)r=   queryi  errorsr   messageT)expected)_GUEST_TOKENZ_download_json	_API_BASEr   
isinstancecauser   code_parse_jsonreaddecode)r!   pathr#   r>   r=   er%   r%   r&   	_call_apiR   sH       
   zTwitterBaseIE._call_api)__name__
__module____qualname__rC   _BASE_REGEXrB   r'   r0   staticmethodr    rL   r%   r%   r%   r&   r       s   
r   c                   @   s   e Zd ZdZejd Z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dddddddd d!d"gd#d$d%d&dd'd(d)d*d+d,d-gd#d.d/d0dd1d2d3d4d5d6dd7d8d9d:d;gZd<d= Zd>S )?TwitterCardIEztwitter:cardz0i/(?:cards/tfw/v1|videos(?:/tweet)?)/(?P<id>\d+)z5https://twitter.com/i/cards/tfw/v1/560070183650213889Z560070183650213889r   zwTwitter - You can now shoot, edit and share video on Twitter. Capture life's most moving moments from your perspective.z$md5:18d3e24bb4f6e5007487dd546e53bd96Twitterre:^https?://.*\.jpgg r>@iTZ20150127)
idexttitledescriptionuploaderuploader_id	thumbnailduration	timestampupload_dater   	info_dictz5https://twitter.com/i/cards/tfw/v1/623160978427936768Z 7137eca597f72b9abbe61e5ae0161399Z623160978427936768zjNASA - Fly over Pluto's icy Norgay Mountains and Sputnik Plain in this @NASANewHorizons #PlutoFlyby video.z{Fly over Pluto's icy Norgay Mountains and Sputnik Plain in this @NASANewHorizons #PlutoFlyby video. https://t.co/BJYgOjSeGAZNASAiUZ20150720)rU   rV   rW   rX   rY   rZ   r]   r^   r   md5r`   z5https://twitter.com/i/cards/tfw/v1/654001591733886977Z b6d9683dd3f48e340ded81c0e917ad46Zdq4Oj5quskIzUbuntu 11.10 Overviewz$md5:a831e97fa384863d6e26ce48d1c43376Z20111013zOMG! UBUNTU!Z	omgubuntu)rU   rV   rW   rX   r^   rY   rZ   ZYoutuber   rb   r`   add_iez5https://twitter.com/i/cards/tfw/v1/665289828897005568Z 6dabeaca9e68cbb71c99c322a4b42a11ZiBb2x00UVlv20151113Z1189339351084113920ZArsenalTerjezVine by ArsenalTerjeiZFV)rU   rV   r^   rZ   rY   rW   r]   Vinez5https://twitter.com/i/videos/tweet/705235433198714880Z 884812a2adc8aaf6fe52b15ccbfa3b88705235433198714880aBrent Yarina - Khalil Iverson's missed highlight dunk. And made highlight dunk. In one highlight.jKhalil Iverson's missed highlight dunk. And made highlight dunk. In one highlight. https://t.co/OrxcJ28BnsBrent YarinaBTNBrentYarinaLV20160303z$This content is no longer available.)r   rb   r`   skipz/https://twitter.com/i/videos/752274308186120192Tr   Zonly_matchingc                 C   s    |  |}| d| t |S )Nzhttps://twitter.com/statuses/)	_match_idZ
url_result	TwitterIEie_key)r!   r   Z	status_idr%   r%   r&   _real_extract   s    
 zTwitterCardIE._real_extractN	rM   rN   rO   IE_NAMEr   rP   
_VALID_URLZ_TESTSrs   r%   r%   r%   r&   rR   g   s   
		
NrR   c                   @   s  e Zd ZdZejd Z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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/d0id1d2d3dd4d5dd6d7d8d9d:d;
dd<d=d>dd?d@dAdBdCdDdEgdFdGdHddIdJdKdLdMdNdOdP	ddQdRddSdTdUdVdWdXdYgdZd[d\dd]d^d_d`dadbdcdd	ddedfdgddhddidjdkdldmdndo
d/d0id1dpdqddrddsdtdudvdwdxdo
d/d0id1dydzdd{dd|d}d}d~dddo
dddddddddgdZddddddddddddo
d/d0id1dd0ddd0ddd0ddd0ddd0ddd0ddd0ddd0dgZdd ZdS )rq   Ztwitterz/(?:(?:i/web|[^/]+)/status|statuses)/(?P<id>\d+)z;https://twitter.com/freethenipple/status/643211948184596480Z643211948184596480r   z9FREE THE NIPPLE - FTN supporters on Hollywood Blvd today!rT   z>FTN supporters on Hollywood Blvd today! http://t.co/c7jHH749xJzFREE THE NIPPLEZfreethenipplegMb)@imUZ20150913   )rU   rV   rW   r[   rX   rY   rZ   r\   r]   r^   	age_limitr_   z;https://twitter.com/giphz/status/657991469417025536/photo/1Z f36dcd5fb92bf7057f155e7d927eeb42Z657991469417025536z=Gifs - tu vai cai tu vai cai tu nao eh capaz disso tu vai caizaGifs on Twitter: "tu vai cai tu vai cai tu nao eh capaz disso tu vai cai https://t.co/tM46VHFlO5"zre:^https?://.*\.pngZGifsZgiphz)rU   rV   rW   rX   r[   rY   rZ   r2   r1   zAccount suspended)r   rb   r`   Zexpected_warningsrn   z6https://twitter.com/starwars/status/665052190608723968Z665052190608723968zyStar Wars - A new beginning is coming December 18. Watch the official 60 second #TV spot for #StarWars: #TheForceAwakens.zA new beginning is coming December 18. Watch the official 60 second #TV spot for #StarWars: #TheForceAwakens. https://t.co/OkSqT2fjWJZstarwarsz	Star WarsiEVre   )rU   rV   rW   rX   rZ   rY   r]   r^   z<https://twitter.com/BTNBrentYarina/status/705235433198714880rg   rh   ri   rk   rj   rl   rm   Zskip_downloadT)r   r`   paramsz8https://twitter.com/jaydingeer/status/700207533655363584Z700207533655363584z0simon vertugo - BEAT PROD: @suhmeduh #DamndanielzQBEAT PROD: @suhmeduh  https://t.co/HBrQ4AfpvZ #Damndaniel https://t.co/byBooq2ejZzsimon vertugoZsimonvertugog      >@ifVZ20160218)
rU   rV   rW   rX   r[   rY   rZ   r\   r]   r^   z7https://twitter.com/Filmdrunk/status/713801302971588609Z 89a15ed345d13b86e9a5a5e051fa308aZMIOxnrUteUdu@   Dr.Pepperの飲み方 #japanese #バカ #ドクペ #電動ガンZTAKUMAZ1004126642786242560ioSZ20140615)rU   rV   rW   rY   rZ   r]   r^   rf   rc   z<https://twitter.com/captainamerica/status/719944021058060289Z719944021058060289z[Captain America - @King0fNerd Are you sure you made the right choice? Find out in theaters.za@King0fNerd Are you sure you made the right choice? Find out in theaters. https://t.co/GpgYi9xMJIZCaptainAmericazCaptain Americag\(\	@i3WZ20160412)	rU   rV   rW   rX   rZ   rY   r\   r]   r^   z5https://twitter.com/OPP_HSD/status/779210622571536384Z1zqKVVlkqLaKBzqSgt Kerry Schmidt - Ontario Provincial Police - Road rage, mischief, assault, rollover and fire in one occurrenceZ20160923Z1PmKqpJdOJQoYz-Sgt Kerry Schmidt - Ontario Provincial PoliceiW)rU   rV   rW   r^   rZ   rY   r]   Z	Periscope)r   r`   rd   z9https://twitter.com/news_al3alm/status/852138619213144067Z852138619213144067u   عالم الأخبار - كلمة تاريخية بجلسة الجناسي التاريخية.. النائب خالد مؤنس العتيبي للمعارضين : اتقوا الله .. الظلم ظلمات يوم القيامةu   كلمة تاريخية بجلسة الجناسي التاريخية.. النائب خالد مؤنس العتيبي للمعارضين : اتقوا الله .. الظلم ظلمات يوم القيامة   https://t.co/xg6OhpyKfNu   عالم الأخبارZnews_al3almgfffffVq@iXZ20170412)	rU   rV   rW   rX   rY   rZ   r\   r]   r^   )r   r`   rn   z3https://twitter.com/i/web/status/910031516746514432Z910031516746514432u   Préfet de Guadeloupe - [Direct] #Maria Le centre se trouve actuellement au sud de Basse-Terre. Restez confinés. Réfugiez-vous dans la pièce la + sûre.u   [Direct] #Maria Le centre se trouve actuellement au sud de Basse-Terre. Restez confinés. Réfugiez-vous dans la pièce la + sûre. https://t.co/mwx01Rs4lou   Préfet de GuadeloupeZ	Prefet971g=
ףpG@iYZ20170919)
rU   rV   rW   r[   rX   rY   rZ   r\   r]   r^   z8https://twitter.com/LisPower1/status/1001551623938805763Z1001551623938805763z re:.*?Shep is on a roll today.*?z$md5:37b9f2ff31720cef23b2bd42ee8a0f09z	Lis PowerZ	LisPower1go[@iA[Z20180529z5https://twitter.com/foobar/status/1087791357756956680Z1087791357756956680zTwitter - A new is coming.  Some of you got an opt-in to try it now. Check out the emoji button, quick keyboard shortcuts, upgraded trends, advanced search, and more. Let us know your thoughts!z$md5:6dfd341a3310fb97d80d2bf7145df976rS   gjtN@iDlG\Z20190122z<https://twitter.com/ViviEducation/status/1136534865145286656Z1vOGwqejwoWxBzjVivi - Vivi founder @lior_rauchy announcing our new student feedback tool live at @EduTECH_AU #EduTECH2019ZViviZ1eVjYOLGkGrQLrU   rV   rW   rY   rZ   ZTwitterBroadcastz@https://twitter.com/BrooklynNets/status/1349794411333394432?s=20Z1349794411333394432z$md5:d1c4941658e4caaa6cb579260d85dcbaz$md5:71ead15ec44cee55071547d6447c6a3ezBrooklyn NetsZBrooklynNetsg9vGt@i `Z20210114z5https://twitter.com/GunB1g/status/1163218564784017422ro   z9https://twitter.com/poco_dandy/status/1047395834013384704z9https://twitter.com/poco_dandy/status/1150646424461176832z7https://twitter.com/qarev001/status/1348948114569269251z9https://twitter.com/CAF_Online/status/1349365911120195585z>https://twitter.com/SamsungMobileSA/status/1348609186725289984z<https://twitter.com/SouthamptonFC/status/1347577658079641604c                    st   |d dddddd}|d dd	 }}td
d|}|dpVi }|d}|rrd||f }|d}g }t|dd tpg D ]}	|	d}
|
sq||
 q|||t	|d||rd| nd t
|dt
|dt
|d|drdnd|dfdd}t|dd }|rV|ddkrV|| n|d }|rD|d!   fd"d#}|d d$d% }|d&krd'|d(d) qp|d*krd'|d'p|d(t d+ qp|d,krd'|d-t d+ qp|d.kr*d'|d/d) qp|d0kr^|d0d1 }|tt|  n|d2k}|rt|d3n|d4}|d5|r|nd& }||p}| g }d6D ]p}|d7| pi }|d'}|rd8|krq||r |dd  nd9|t
|d:t
|d;d< q||t
|d=d> n,t|d?d }|s`td@d'|d) S )ANzstatuses/show/%s.jsonzWeb-12r   r   extended)Zcards_platformZinclude_cardsZinclude_reply_countZinclude_user_entitiesZ
tweet_modeZ	full_text
 z\s+(https?://[^ ]+)r   usernamez%s - %sZscreen_namec                 S   s   | d d S )NentitiesZhashtagsr%   xr%   r%   r&   <lambda>  r;   z)TwitterIE._real_extract.<locals>.<lambda>textZ
created_atzhttps://twitter.com/Zfavorite_countZretweet_countZreply_countZpossibly_sensitiverw   )rU   rW   rX   rY   r]   rZ   Zuploader_urlZ
like_countZrepost_countZcomment_countrx   tagsc                    s   |  dpi }g }| dg D ]}|| q| g |  dpV|  d  r fdd}|  di  D ]\}}||| qz|d|  d	pi  |t| d
dd d S )N
video_infovariantsZmedia_url_https	media_urlc              	      sJ    | t d| it|dp&|dt|dp<|dd d S )Nr   wr1   hr2   rU   r   r1   r2   )r*   r   r   r   )r   sizer   
thumbnailsr%   r&   add_thumbnail  s    zOTwitterIE._real_extract.<locals>.extract_from_video_info.<locals>.add_thumbnailZsizesorigZoriginal_infoZduration_millisr   r-   r   r\   )r   r+   r'   _sort_formatsitemsr6   r   )mediar   r-   r"   r   r   r   )infor!   twidr   r&   extract_from_video_info  s"    
z8TwitterIE._real_extract.<locals>.extract_from_video_infoc                 S   s   | d d d S )NZextended_entitiesr   r   r%   r   r%   r%   r&   r     r;   typeZphotocardbinding_valuesc                    s     | pi }t|dd S )Nc                 S   s   | | d   d  S )Nr   _value)lowerr   r%   r%   r&   r      r;   zDTwitterIE._real_extract.<locals>.get_binding_value.<locals>.<lambda>)r   r   )ko)r   r%   r&   get_binding_value  s    z2TwitterIE._real_extract.<locals>.get_binding_value:playerr   Z
player_url)_typer   Zperiscope_broadcast)r   r   rr   	broadcastZbroadcast_urlsummaryZcard_urlZunified_cardmedia_entitiesZamplifyZamplify_url_vmapZplayer_stream_urlz%s_content_id)Z_smallr   Z_largeZ_x_largeZ	_originalZplayer_imagez/player-placeholderZmediumr1   r2   r   Zcontent_duration_secondsr   c                 S   s   | d d d d S )Nr   r.   r   expanded_urlr%   r   r%   r%   r&   r   :  r;   zThere's no video in this tweet.)rp   rL   replacer4   subr   r   listr*   r   r   splitr6   r   rr   TwitterBroadcastIErG   nextitervaluesr0   r   r   )r!   r   statusrW   rX   r~   rY   rZ   r   ZhashtagZhashtag_textr   r   r   r   Z	card_namer   Z
is_amplifyr,   Z
content_idr-   r   suffiximageZ	image_urlr   r%   )r   r   r!   r   r&   rs     s    
 	











zTwitterIE._real_extractNrt   r%   r%   r%   r&   rq      s  
	 		     nrq   c                   @   s2   e Zd ZdZdZddddddd	d
Zdd ZdS )TwitterAmplifyIEztwitter:amplifyz1https?://amp\.twimg\.com/v/(?P<id>[0-9a-f\-]{36})z<https://amp.twimg.com/v/0ba0c3c7-0af3-4c0a-bed5-7efd1ffa2951Z 7df102d0b9fd7066b86f3159f8e81bf6z$0ba0c3c7-0af3-4c0a-bed5-7efd1ffa2951r   Twitter Videozre:^https?://.*)rU   rV   rW   r[   ra   c                    s     |} || dd} ||}g } jdddd} fdd}|rv|d	\}}	||||	d
 |d\}
}|d |
|d |d||dS )Nztwitter:amplify:vmapzvmap urlztwitter:image:srcr[   Fr   c                    s8   t  jd|  dd}t  jd|  dd}||fS )Nztwitter:%s:widthFr   ztwitter:%s:height)r   _html_search_meta)targetr   r   r!   Zwebpager%   r&   _find_dimension_  s        z7TwitterAmplifyIE._real_extract.<locals>._find_dimensionr   )r   r1   r2   r   r   r3   r   )rU   rW   r-   r   )rp   Z_download_webpager   r0   r*   r6   )r!   r   r#   r,   r-   r   r[   r   Zthumbnail_wZthumbnail_hZvideo_wZvideo_hr%   r   r&   rs   S  sB    
     zTwitterAmplifyIE._real_extractN)rM   rN   rO   ru   rv   _TESTrs   r%   r%   r%   r&   r   D  s   r   c                   @   s8   e Zd ZdZejd Zddddddd	d
Zdd ZdS )r   ztwitter:broadcastz$i/broadcasts/(?P<id>[0-9a-zA-Z]{13})z.https://twitter.com/i/broadcasts/1yNGaQLWpejGjZ1yNGaQLWpejGjr   z(Andrea May Sahouri - Periscope BroadcastzAndrea May SahouriZ1PXEdBZWpGwKerz   r_   c                 C   s   |  |}| d|d|id | }| ||}|d }| d| |d }|dp\|d }d	|krn|   tt|jd
d gd }| |\}	}
}| 	||||	|
||d< |S )Nzbroadcasts/show.jsonidsZ
broadcasts	media_keyzlive_video_stream/status/sourceZnoRedirectPlaybackUrllocationz/live_video_stream/geoblocked/r   r   r-   )
rp   rL   Z_parse_broadcast_datar   Zraise_geo_restrictedr   r	   r>   Z_extract_common_format_infoZ_extract_pscp_m3u8_formats)r!   r   Zbroadcast_idr   r   r   r   Zm3u8_urlr   stater1   r2   r%   r%   r&   rs     sN    
        z TwitterBroadcastIE._real_extractN)	rM   rN   rO   ru   r   rP   rv   r   rs   r%   r%   r%   r&   r   |  s   
r   )
__future__r   r4   commonr   compatr   r   r   r	   utilsr
   r   r   r   r   r   r   r   r   r   Z	periscoper   r   r   rR   rq   r   r   r%   r%   r%   r&   <module>   s   0GX   8