U
    g                      @   s   d dl Z d dl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 ddlmZ G dd	 d	eZG d
d deZdS )    N   )InfoExtractor   )	HTTPError)	ExtractorErrorint_or_none	qualitiesremove_startsmuggle_urlunsmuggle_urlupdate_url_queryurl_or_noneurlencode_postdata)traverse_objc                       s   e Zd ZdZde Zde dg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idddddddd d!d"id#dgZd$ddd	d
ddd%gZd&Zd'Z	e
d/d)d*Ze fd+d,Zd-d. Z  ZS )0SproutVideoIEz://videos\.sproutvideo\.com/embed/(?P<id>[\da-f]+)/[\da-f]+zhttps?:z,<iframe [^>]*\bsrc=["\'](?P<url>(?:https?:)?z[^"\']*)["\']zHhttps://videos.sproutvideo.com/embed/4c9dddb01910e3c9c4/0fc24387c4f24ee3Z 1343ce1a6cb39d67889bfa07c7b02b0eZ4c9dddb01910e3c9c4mp4u5   Adrien Labaeye : Berlin, des communautés aux communsi@  ,re:https?://images\.sproutvideo\.com/.+\.jpgidexttitleduration	thumbnailurlmd5	info_dictzHhttps://videos.sproutvideo.com/embed/a79fdcb21f1be2c62e/93bf31e41e39ca27Z cebae5cf558cca83271917cf4ec03f26Za79fdcb21f1be2c62ez"HS_01_Live Stream 2023-01-14 10:00i  zHhttps://videos.sproutvideo.com/embed/119cd6bc1a18e6cd98/30751a1761ae5b90Z f368c78df07e78a749508b221528672cZ119cd6bc1a18e6cd98z 3. Updating your Partner details<   )r   r   r   r   r   formathd)r   r   r   paramszPhttps://videos.sproutvideo.com/embed/119dd8ba121ee0cc98/4ee50c88a343215d?type=hdZ 7f6798f037d7a3e3e07e67959de68fc6Z119dd8ba121ee0cc98z%Recipients Setup - Domestic Wire OnlyM   enzcount:1)r   r   r   r   r   	subtitleszZhttps://www.solidarum.org/vivre-ensemble/adrien-labaeye-berlin-des-communautes-aux-communs)r   r   zUhttps://{base}.videos.sproutvideo.com/{s3_user_hash}/{s3_video_hash}/video/index.m3u8)r   ZuhdsourceFc                 C   sP   i }| d |   D ]\}}||t|d< q| d |d< |rLtjj|ddS |S )NZ
signatureszCloudFront-Z	sessionIDT)doseq)itemsr	   urllibparse	urlencode)policyZsignature_key	as_stringquerykeyvalue r/   @/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/sproutvideo.py_policy_to_qsR   s
    zSproutVideoIE._policy_to_qsc                 #   s<   t  ||D ](}|dr&d| }t|d|iV  qd S )Nz//zhttps:referer)super_extract_embed_urls
startswithr
   )clsr   webpage	embed_url	__class__r/   r0   r4   Z   s    

z!SproutVideoIE._extract_embed_urlsc              
      s  t |i \}}| |}| j||t|ddid}| jd|d|dddd	 d
}g i  }}dd|d}t|dr| |d}	| j|ddd}
| j|ddd}|| j| jj	f ||dd||	d |D ] }|
t|d |	|
|d qt|dtjhdd	 f }r@t| j|ddkr"dnd  | fdd|D  t|dd d	 fD ](}||d!d"g d|d# i qR||||d$t|d%thfd&thfd'thfd(S ))NRefererr2   )headerszvar\s+dat\s*=\s*["\']dataz[A-Za-z0-9+/=]+z["\'];c                 S   s   t |  S )N)base64	b64decodedecode)xr/   r/   r0   <lambda>h       z-SproutVideoIE._real_extract.<locals>.<lambda>)Zcontains_patternZend_patternZtransform_sourcez*/*zhttps://videos.sproutvideo.com)AcceptZOriginr;   ZhlsmtT)r+   kr   )Zm3u8_idr<   r,   r   )r   Zextra_param_to_segment_urlZextra_param_to_key_url	downloadsc                 S   s   t |d S )Nr   r   _vr/   r/   r0   rB      rC   Z	has_audioFnonec                    s(   g | ] \}}t ||d | dqS )r   )	format_idr   r   qualityacodec)str).0rN   Z
format_urlrP   rO   r/   r0   
<listcomp>   s   z/SproutVideoIE._real_extract.<locals>.<listcomp>ZsubtitleDatac                 S   s   t |d S )NsrcrI   rJ   r/   r/   r0   rB      rC   Zsrclangr"   rU   )r   formatsr#   Zhttp_headersr   r   Zposterframe_url)r   r   r   )r   Z	_match_id_download_webpager   Z_search_jsonr1   extendZ_extract_m3u8_formats_M3U8_URL_TMPLr   updater   dictr&   r   
_QUALITIESget
setdefaultappendrQ   r   r   )selfr   Zsmuggled_datavideo_idr7   r=   rV   r#   r<   Zmanifest_queryZfragment_queryZ	key_queryfmtrH   Zsub_datar/   rS   r0   _real_extracta   sz    
       

    

 
zSproutVideoIE._real_extract)F)__name__
__module____qualname__Z_NO_SCHEME_RE
_VALID_URLZ_EMBED_REGEX_TESTSZ_WEBPAGE_TESTSrY   r\   staticmethodr1   classmethodr4   rc   __classcell__r/   r/   r9   r0   r      sr   
.
r   c                   @   s6   e Zd ZdZdZddddddd	d
dgZdd ZdS )VidsIoIEzvids.iozHhttps?://[\w-]+\.vids\.io/videos/(?P<id>[\da-f]+)/(?P<display_id>[\w-]+)zRhttps://how-to-video.vids.io/videos/799cd8b11c10efc1f0/how-to-video-live-streamingZ 9bbbb2c0c0739eb163b80f87b8d77c9eZ799cd8b11c10efc1f0r   zHow to Video: Live Streamingi
  r   r   r   c           	   
   C   s   |  |dd\}}| j||dd\}}|jdkr| d}|sNtdddz(| j||d	td
|i| |d}W nH tk
r } z*t	|j
tr|j
jdkrtddd W 5 d }~X Y nX tt||d  }r| |t|S tdd S )Nr   
display_idi  )Zexpected_statusZvideopasswordzAThis video is password-protected; use the --video-password optionT)expectedzSubmitting video passwordpassword)r=   zIncorrect passwordz+Unable to extract any SproutVideo embed url)Z_match_valid_urlgroupZ_download_webpage_handlestatus	get_paramr   rW   r   Z_hidden_inputs
isinstancecauser   nextr   r4   Z
url_result)	r`   r   ra   rm   r7   Zurlhro   er8   r/   r/   r0   rc      s8    

    
zVidsIoIE._real_extractN)rd   re   rf   ZIE_NAMErg   rh   rc   r/   r/   r/   r0   rl      s   rl   )r>   urllib.parser'   commonr   Znetworking.exceptionsr   utilsr   r   r   r	   r
   r   r   r   r   Zutils.traversalr   r   rl   r/   r/   r/   r0   <module>   s   , 