
    VGh                     t    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e      Z G d	 d
e      Zy)    N   )InfoExtractor)VimeoIE   )ExtractorErrorint_or_nonemerge_dictstry_getunescapeHTMLunified_timestampurljoinc                   |    e Zd ZdZdddddddd	d
dd	ddd ej
                         gdgddddgZed        Zd Z	y)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                 L   | sy t        | d t              xs g }|sy |D ]  }t        |t              st        | d t              xs g }|D ]U  }t        |t              st	        |j                  d            }||k7  r4|j                  d      }|sHt        |      c c S   y )Nc                     | d   S )Ngroups xs    g/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/raywenderlich.py<lambda>z3RayWenderlichIE._extract_video_id.<locals>.<lambda>6   s
    8     c                     | d   S )Ncontentsr*   r+   s    r-   r.   z3RayWenderlichIE._extract_video_id.<locals>.<lambda><   s
    q} r/   ordinal
identifier)r
   list
isinstancedictr   getstr)data	lesson_idr)   groupr1   contentr2   video_ids           r-   _extract_video_idz!RayWenderlichIE._extract_video_id2   s    4d;Ar 	)EeT*t%<dCIrH# )!'40%gkk)&<=i'";;|4x=()		)r/   c                    | j                  |      }|j                  dd      \  }}| d| }| j                  ||      }| j                  |d       xs | j	                  d|d      }d|v rt        dd	
      d|i}| j                  d|dd       }	|	s| j                  | j                  d|ddd      |t        d      }
| j                  |
|      xs | j                  d|d      }|dd}| j	                  d|dd       }|r||d<   | j                  d| d||      d   }|d   d    d!   }	|j                  d"|j                  d#      |j                  d$      xs |j                  d%      t        |j                  d&            t        |j                  d'            d(       t        || j!                  t#        j$                  d)|	 |      t#        j&                         |	*            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{}r9   )rC   r;   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/)ier=   )_match_valid_urlr;   _download_webpage_og_search_thumbnail_html_search_metar   _search_regex_parse_jsonr   r>   _download_jsonupdater7   r   r   r	   
url_resultr   _smuggle_referrerie_key)selfr!   mobjr@   r:   
display_idwebpagerD   infovimeo_idr9   r=   rJ   
csrf_tokenrK   s                  r-   _real_extractzRayWenderlichIE._real_extractG   sm   $$S)#zz+t<	9!{!I;/
((j9--T . # 3&*&<&<Wk'3 	 "W, @ 
 
 %%'*d & L ##""?%t6 # C \	 $ HD
 --i! :$($6$6!9j%:  $4G //g|T 0 CJ*4'''A(5QG ( --46E W~a(7HKK*6*$yy7  (599&<('		*(=>.uyy/FG  4%%1(<cC~~( "1 "4 5 	5r/   N)
__name__
__module____qualname__
_VALID_URLr   r^   _TESTSstaticmethodr>   rf   r*   r/   r-   r   r      s    J M#A#%((

 !
 "7>>#$9:%( W'F0 ) )(85r/   r   c                   J     e Zd ZdZddddddidd	Ze fd
       Zd Z x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                 P    t         j                  |      rdS t        |   |      S )NF)r   suitablesuper)clsr!   	__class__s     r-   rr   zRayWenderlichCourseIE.suitable   s%    '005uP57;KC;PPr/   c           	         | j                  |      }| j                  ||      }g }t               }t        j                  d| d|      D ]V  }||v r|j                  |       |j                  | j                  t        ||      t        j                                      X | j                  |d       xs | j                  d|dd       }| j                  |||      S )Nz<a[^>]+\bhref=["\'](/z/lessons/\d+))rS   rB   ztwitter:titler   )	_match_idrU   setrefindalladdappendr\   r   r   r^   _og_search_titlerW   playlist_result)r_   r!   r@   rb   entrieslesson_urls
lesson_urlr   s           r-   rf   z#RayWenderlichCourseIE._real_extract   s    NN3'	((i8e**(=A7L 	HJ[(OOJ'NN4??Z(_-C-C-E + G H	H %%T & # =&*&<&<Wgt '= '= 	 ##GY>>r/   )	rg   rh   ri   rj   _TESTclassmethodrr   rf   __classcell__)ru   s   @r-   rn   rn      sN    J C%'

 %
 
E Q Q?r/   rn   )ry   commonr   vimeor   utilsr   r   r	   r
   r   r   r   r   rn   r*   r/   r-   <module>r      s8    	 !   o5m o5d-?M -?r/   