U
    g                     @   sh   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 G dd deZG d	d
 d
eZdS )    N   )InfoExtractor)VimeoIE   )ExtractorErrorint_or_nonemerge_dictstry_getunescapeHTMLunified_timestampurljoinc                   @   s`   e Zd ZdZdddddddd	d
dd	ddde gdgddddgZedd Zdd Z	dS )RayWenderlichIEa(  (?x)
                    https?://
                        (?:
                            videos\.raywenderlich\.com/courses|
                            (?:www\.)?raywenderlich\.com
                        )/
                        (?P<course_id>[^/]+)/lessons/(?P<id>\d+)
                    z;https://www.raywenderlich.com/3530-testing-in-ios/lessons/1Z	248377018Zmp4ZIntroductionz$md5:804d031b3efa9fcb49777d512d74f722ie`<ZZ20171222   zRay WenderlichZuser3304672)	idexttitledescription	timestampZupload_datedurationZuploaderZuploader_idT)
noplaylistZskip_downloadzHTTP Error 403: Forbidden)url	info_dictparamsZadd_ieZexpected_warningszEhttps://videos.raywenderlich.com/courses/105-testing-in-ios/lessons/1)r   Zonly_matchingc                 C   s   | sd S t | dd tpg }|s$d S |D ]p}t|ts8q(t | dd tpJg }|D ]F}t|ts`qPt|d}||krxqP|d}|rPt|    S qPq(d S )Nc                 S   s   | d S )Ngroups xr   r   B/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/raywenderlich.py<lambda>6       z3RayWenderlichIE._extract_video_id.<locals>.<lambda>c                 S   s   | d S )Ncontentsr   r   r   r   r   r   <   r   ordinal
identifier)r	   list
isinstancedictr   getstr)data	lesson_idr   groupr    contentr!   video_idr   r   r   _extract_video_id2   s$    


z!RayWenderlichIE._extract_video_idc              
   C   s~  |  |}|dd\}}| d| }| ||}| j|d dpN| d|d}d|krdtdd	d
d|i}| jd|dd d}	|	sV| j| jd|dddd|tdd}
| 	|
|p| d|d}|dd}| jd|dd d}|r||d< | j
d| d||dd }|d d  d! }	|d"|d#|d$p6|d%t|d&t|d'd( t|| jtd)|	 |t |	d*S )+N	course_idr   /defaultztwitter:image	thumbnailz>Subscribe to unlockz.This content is only available for subscribersT)expectedzdata-vimeo-id=["\'](\d+)zvimeo idz(data-collection=(["\'])(?P<data>{.+?})\1zdata collectionz{}r(   )r1   r*   F)Ztransform_sourcefatalz/videos/(\d+)/zvideo idZXMLHttpRequest)ZRefererzX-Requested-Withz
csrf-tokenz
csrf tokenzX-CSRF-Tokenz/https://videos.raywenderlich.com/api/v1/videos/z.json)headersvideoZclipsr   Zprovider_idZurl_transparentnamer   Zmeta_descriptionr   Z
created_at)_typer   r   r   r   zhttps://player.vimeo.com/video/)ier,   )Z_match_valid_urlr*   _download_webpageZ_og_search_thumbnail_html_search_metar   Z_search_regexZ_parse_jsonr
   r-   Z_download_jsonupdater&   r   r   r   
url_resultr   Z_smuggle_referrerie_key)selfr   Zmobjr.   r)   Z
display_idwebpager2   infoZvimeo_idr(   r,   r5   Z
csrf_tokenr6   r   r   r   _real_extractG   s    
                  
 	  zRayWenderlichIE._real_extractN)
__name__
__module____qualname__
_VALID_URLr   r>   Z_TESTSstaticmethodr-   rB   r   r   r   r   r      s2   

r   c                       sD   e Zd ZdZddddddidd	Ze fd
dZdd Z  ZS )RayWenderlichCourseIEa  (?x)
                    https?://
                        (?:
                            videos\.raywenderlich\.com/courses|
                            (?:www\.)?raywenderlich\.com
                        )/
                        (?P<id>[^/]+)
                    z1https://www.raywenderlich.com/3530-testing-in-ioszTesting in iOSz3530-testing-in-ios)r   r   r   F   )r   r   r   Zplaylist_countc                    s   t |rdS t |S )NF)r   suitablesuper)clsr   	__class__r   r   rJ      s    zRayWenderlichCourseIE.suitablec                 C   s   |  |}| ||}g }t }td| d|D ]6}||krBq4|| || jt||t	
 d q4| j|d dp| jd|dd d}| |||S )Nz<a[^>]+\bhref=["\'](/z/lessons/\d+))r9   r0   ztwitter:titler   )Z	_match_idr:   setrefindalladdappendr=   r   r   r>   Z_og_search_titler;   Zplaylist_result)r?   r   r.   r@   entriesZlesson_urlsZ
lesson_urlr   r   r   r   rB      s6    

 
 
    z#RayWenderlichCourseIE._real_extract)	rC   rD   rE   rF   Z_TESTclassmethodrJ   rB   __classcell__r   r   rM   r   rH      s   
 rH   )rP   commonr   Zvimeor   utilsr   r   r   r	   r
   r   r   r   rH   r   r   r   r   <module>   s
   $r