o
    i                     @   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/1	248377018mp4Introductionz$md5:804d031b3efa9fcb49777d512d74f722ie`<Z20171222   zRay Wenderlichuser3304672)	idexttitledescription	timestampupload_datedurationuploaderuploader_idT)
noplaylistskip_downloadzHTTP Error 403: Forbidden)url	info_dictparamsadd_ieexpected_warningszEhttps://videos.raywenderlich.com/courses/105-testing-in-ios/lessons/1)r   only_matchingc                 C   s   | sd S t | dd tpg }|sd S |D ]8}t|tsqt | dd tp%g }|D ]#}t|ts0q(t|d}||kr<q(|d}|rKt|    S q(qd S )Nc                 S      | d S )Ngroups xr'   r'   R/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/raywenderlich.py<lambda>6       z3RayWenderlichIE._extract_video_id.<locals>.<lambda>c                 S   r%   )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   sz  |  |}|dd\}}| d| }| ||}| j|d dp'| d|d}d|v r2tdd	d
d|i}| jd|dd d}	|	s| j| jd|dddd|tdd}
| 	|
|p^| d|d}|dd}| jd|dd d}|rs||d< | j
d| d||dd }|d d  d! }	|d"|d#|d$p|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{}r5   )r>   r7   F)transform_sourcefatalz/videos/(\d+)/zvideo idXMLHttpRequest)RefererzX-Requested-Withz
csrf-tokenz
csrf tokenzX-CSRF-Tokenz/https://videos.raywenderlich.com/api/v1/videos/z.json)headersvideoclipsr   provider_idurl_transparentnamer   meta_descriptionr   
created_at)_typer   r   r   r   zhttps://player.vimeo.com/video/)ier9   )_match_valid_urlr7   _download_webpage_og_search_thumbnail_html_search_metar   _search_regex_parse_jsonr
   r:   _download_jsonupdater3   r   r   r   
url_resultr   _smuggle_referrerie_key)selfr   mobjr;   r6   
display_idwebpager?   infovimeo_idr5   r9   rE   
csrf_tokenrF   r'   r'   r*   _real_extractG   s   

	
zRayWenderlichIE._real_extractN)
__name__
__module____qualname__
_VALID_URLr   rY   _TESTSstaticmethodr:   ra   r'   r'   r'   r*   r      s4    

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!   playlist_countc                    s   t |rdS t |S )NF)r   suitablesuper)clsr   	__class__r'   r*   rk      s   zRayWenderlichCourseIE.suitablec                 C   s   |  |}| ||}g }t }td| d|D ]}||v r!q|| || jt||t	
 d q| j|d dpE| jd|dd d}| |||S )Nz<a[^>]+\bhref=["\'](/z/lessons/\d+))rN   r=   ztwitter:titler   )	_match_idrP   setrefindalladdappendrW   r   r   rY   _og_search_titlerR   playlist_result)rZ   r   r;   r]   entrieslesson_urls
lesson_urlr   r'   r'   r*   ra      s*   


z#RayWenderlichCourseIE._real_extract)	rb   rc   rd   re   _TESTclassmethodrk   ra   __classcell__r'   r'   rn   r*   rh      s    
rh   )rr   commonr   vimeor   utilsr   r   r   r	   r
   r   r   r   rh   r'   r'   r'   r*   <module>   s    $r