U
    y^#c                     @   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 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
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mp4m3u8_nativehlsF)m3u8_idfatal)bitrateZbit_rate  httpz-%d )r   	format_idtbr)get_extract_m3u8_formatsr   r
   _search_dimensions_in_video_url)selfvariantvideo_idvariant_urlr!   f r*   OC:\Users\TaGoRe\Desktop\beinconnect-dl\binaries\youtube_dl\extractor\twitter.py_extract_variant_formats$   s&    
    z&TwitterBaseIE._extract_variant_formatsc                 C   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)	_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_url6   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r7   r8   )researchupdateintgroup)a_formatr5   mr*   r*   r+   r$   E   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)rD   queryi  errorsr   messageT)expected)_GUEST_TOKEN_download_json	_API_BASEr   
isinstancecauser   code_parse_jsonreaddecode)r%   pathr'   rE   rD   er*   r*   r+   	_call_apiN   sH       
   zTwitterBaseIE._call_api)__name__
__module____qualname__rK   _BASE_REGEXrI   r,   r6   staticmethodr$   rT   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>@iT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)r^   r_   r`   ra   rb   rc   rf   rg   r   md5ri   z5https://twitter.com/i/cards/tfw/v1/654001591733886977Z b6d9683dd3f48e340ded81c0e917ad46Zdq4Oj5quskIzUbuntu 11.10 Overviewz$md5:a831e97fa384863d6e26ce48d1c43376Z20111013zOMG! UBUNTU!Z	omgubuntu)r^   r_   r`   ra   rg   rb   rc   Youtuber   rk   ri   add_iez5https://twitter.com/i/cards/tfw/v1/665289828897005568Z 6dabeaca9e68cbb71c99c322a4b42a11ZiBb2x00UVlv20151113Z1189339351084113920ZArsenalTerjezVine by ArsenalTerjeiZFV)r^   r_   rg   rc   rb   r`   rf   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   rk   ri   skipz/https://twitter.com/i/videos/752274308186120192Tr   only_matchingc                 C   s    |  |}| d| t |S )Nzhttps://twitter.com/statuses/)	_match_id
url_result	TwitterIEie_key)r%   r   Z	status_idr*   r*   r+   _real_extract   s    
 zTwitterCardIE._real_extractN	rU   rV   rW   IE_NAMEr   rX   
_VALID_URL_TESTSr   r*   r*   r*   r+   rZ   c   s   
		
NrZ   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dedfddgddhdidjdkdldmdn
d/d0id1dodpddqddrdsdtdudvdwdn
d/d0id1dxdyddzdd{d|d|d}d~ddn
dddddddddgdZdd0ddd0dgZdd ZdS )r}   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!r\   z>FTN supporters on Hollywood Blvd today! http://t.co/c7jHH749xJzFREE THE NIPPLEZfreethenipplegMb)@imUZ20150913   )r^   r_   r`   rd   ra   rb   rc   re   rf   rg   	age_limitrh   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)r^   r_   r`   ra   rd   rb   rc   r8   r7   zAccount suspended)r   rk   ri   expected_warningsrx   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 WarsiEVro   )r^   r_   r`   ra   rc   rb   rf   rg   z<https://twitter.com/BTNBrentYarina/status/705235433198714880rq   rr   rs   ru   rt   rv   rw   skip_downloadT)r   ri   paramsz8https://twitter.com/jaydingeer/status/700207533655363584Z700207533655363584z/simon vetugo - BEAT PROD: @suhmeduh #DamndanielzQBEAT PROD: @suhmeduh  https://t.co/HBrQ4AfpvZ #Damndaniel https://t.co/byBooq2ejZzsimon vetugoZsimonvertugog      >@ifVZ20160218)
r^   r_   r`   ra   rd   rb   rc   re   rf   rg   z7https://twitter.com/Filmdrunk/status/713801302971588609Z 89a15ed345d13b86e9a5a5e051fa308aZMIOxnrUteUdu@   Dr.Pepperの飲み方 #japanese #バカ #ドクペ #電動ガンZTAKUMAZ1004126642786242560ioSZ20140615)r^   r_   r`   rb   rc   rf   rg   rp   rm   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)	r^   r_   r`   ra   rc   rb   re   rf   rg   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)r^   r_   r`   rg   rc   rb   rf   	Periscope)r   ri   rn   z9https://twitter.com/news_al3alm/status/852138619213144067Z852138619213144067u   عالم الأخبار - كلمة تاريخية بجلسة الجناسي التاريخية.. النائب خالد مؤنس العتيبي للمعارضين : اتقوا الله .. الظلم ظلمات يوم القيامةu   كلمة تاريخية بجلسة الجناسي التاريخية.. النائب خالد مؤنس العتيبي للمعارضين : اتقوا الله .. الظلم ظلمات يوم القيامة   https://t.co/xg6OhpyKfNu   عالم الأخبارZnews_al3almgfffffVq@iX20170412)	r^   r_   r`   ra   rb   rc   re   rf   rg   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)
r^   r_   r`   rd   ra   rb   rc   re   rf   rg   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:6dfd341a3310fb97d80d2bf7145df976r[   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)r^   r_   r`   rb   rc   ZTwitterBroadcastz5https://twitter.com/GunB1g/status/1163218564784017422ry   c                    s  |  |}| 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}t|dd }|r
|ddkr
|dpHi }g }|dg D ]}|| || qZ| | g |d p|d!rfd"d#}|d$i  D ]\}}||| q|d%|d&pi  ||t|d'd(d) n|d*}|r|d+   fd,d-}|d d.d/ }|d0kr0|d1k}|r`|d2n|d3}|d4|rv|nd5 }| ||p|}| | g d6D ]p}|d7| pi }|d8}|rd9|kr֐q|r|dd  nd:|t
|d;t
|d<d= q||t
|d>d) n~|d5krP|d8|d?d@ n^|dAkr|d8|d8pp|d?t dB n.|dCkr|d8|dDt dB ntdEn,t|dFd }|stdG|d8|d@ |S )HNz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>  rB   z)TwitterIE._real_extract.<locals>.<lambda>text
created_atzhttps://twitter.com/Zfavorite_countZretweet_countZreply_countZpossibly_sensitiver   )r^   r`   ra   rb   rf   rc   uploader_url
like_countrepost_countcomment_countr   tagsc                 S   s   | d d d S )NZextended_entitiesmediar   r*   r   r*   r*   r+   r     rB   typephoto
video_infovariantsZmedia_url_https	media_urlc              	      sJ    | t d| it|dp&|dt|dp<|dd d S )Nr   wr7   hr8   r^   r   r7   r8   )r0   r   r   r"   )r   size)r   
thumbnailsr*   r+   add_thumbnail  s    z.TwitterIE._real_extract.<locals>.add_thumbnailsizesorigZoriginal_infoZduration_millisr   )r3   r   re   cardbinding_valuesc                    s     | pi }t|dd S )Nc                 S   s   | | d   d  S )Nr   _value)lowerr   r*   r*   r+   r     rB   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:)amplifyZpromo_video_websiter   Zamplify_url_vmapZplayer_stream_urlz%s_content_idplayer)Z_smallr   Z_largeZ_x_largeZ	_originalZplayer_imager   z/player-placeholdermediumr7   r8   r   Zcontent_duration_seconds
player_url)_typer   Zperiscope_broadcast)r   r   r~   	broadcastbroadcast_urlzUnsupported Twitter Card.c                 S   s   | d d d d S )Nr   r4   r   expanded_urlr*   r   r*   r*   r+   r     rB   zThere's no video in this tweet.)r{   rT   replacer:   subr"   r   listr0   r   r   r1   r,   _sort_formatsitemsr<   r   splitr6   r   r~   TwitterBroadcastIEr   )r%   r   Ztwidstatusr`   ra   r   rb   rc   r   hashtagZhashtag_textinfor   r   r3   r&   r   r   r   r   r   Z	card_nameZ
is_amplifyr2   
content_idsuffiximage	image_urlr   r*   )r   r   r   r+   r     s    
 	















zTwitterIE._real_extractNr   r*   r*   r*   r+   r}      sd  
	 		    Cr}   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?://.*)r^   r_   r`   rd   rj   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:srcrd   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%   webpager*   r+   _find_dimension$  s        z7TwitterAmplifyIE._real_extract.<locals>._find_dimensionr   )r   r7   r8   r   r   r9   r   )r^   r`   r3   r   )r{   _download_webpager   r6   r0   r<   )r%   r   r'   r2   r3   r   rd   r   Zthumbnail_wZthumbnail_hZvideo_wZvideo_hr*   r   r+   r     sB    
     zTwitterAmplifyIE._real_extractN)rU   rV   rW   r   r   _TESTr   r*   r*   r*   r+   r   	  s   r   c                   @   s"   e Zd ZdZejd Zdd ZdS )r   ztwitter:broadcastz$i/broadcasts/(?P<id>[0-9a-zA-Z]{13})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ids
broadcasts	media_keyzlive_video_stream/status/sourceZnoRedirectPlaybackUrllocationz/live_video_stream/geoblocked/r   r   r3   )
r{   rT   _parse_broadcast_datar"   raise_geo_restrictedr   r	   rE   _extract_common_format_info_extract_pscp_m3u8_formats)r%   r   broadcast_idr   r   r   r   m3u8_urlr   stater7   r8   r*   r*   r+   r   E  sN    
        z TwitterBroadcastIE._real_extractN)rU   rV   rW   r   r   rX   r   r   r*   r*   r*   r+   r   A  s   
r   )
__future__r   r:   commonr   compatr   r   r   r	   utilsr
   r   r   r   r   r   r   r   r   	periscoper   r   r   rZ   r}   r   r   r*   r*   r*   r+   <module>   s   ,DX  P8