
    V|h                     t    S SK r SSKJr  SSKJr  SSKJrJrJrJ	r	J
r
JrJr   " S S\5      r " S	 S
\5      rg)    N   )InfoExtractor)VimeoIE   )ExtractorErrorint_or_nonemerge_dictstry_getunescapeHTMLunified_timestampurljoinc                       \ rS rSrSrSSSSSSS	S
SSS.	SSS.\R                  " 5       /S/S.SSS./r\S 5       r	S r
Srg)RayWenderlichIE   a(  (?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                    U (       d  g [        U S [        5      =(       d    / nU(       d  g U H  n[        U[        5      (       d  M  [        U S [        5      =(       d    / nU Hb  n[        U[        5      (       d  M  [	        UR                  S5      5      nXa:w  a  M;  UR                  S5      nU(       d  MU  [        U5      s  s  $    M     g )Nc                     U S   $ )Ngroups xs    X/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/raywenderlich.py<lambda>3RayWenderlichIE._extract_video_id.<locals>.<lambda>6   s    8    c                     U S   $ )Ncontentsr+   r,   s    r.   r/   r0   <   s    q}r1   ordinal
identifier)r
   list
isinstancedictr   getstr)data	lesson_idr*   groupr3   contentr4   video_ids           r.   _extract_video_id!RayWenderlichIE._extract_video_id2   s    4d;ArEeT**t%<dCIrH#!'400%gkk)&<='";;|48x=( $	 r1   c                    U R                  U5      nUR                  SS5      u  p4U SU 3nU R                  X5      nU R                  US S9=(       d    U R	                  SUS5      nSU;   a
  [        SS	S
9eSU0nU R                  SUSS S9n	U	(       Gd  U R                  U R                  SUSSSS9U[        SS9n
U R                  X5      =(       d    U R                  SUS5      nUSS.nU R	                  SUSS S9nU(       a  XS'   U R                  SU S3X\S9S   nUS   S    S!   n	UR                  S"UR                  S#5      UR                  S$5      =(       d    UR                  S%5      [        UR                  S&5      5      [        UR                  S'5      5      S(.5        [        XR!                  ["        R$                  " S)U	 3U5      ["        R&                  " 5       U	S*95      $ )+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;   )rF   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updater9   r   r   r	   
url_resultr   _smuggle_referrerie_key)selfr"   mobjrC   r<   
display_idwebpagerG   infovimeo_idr;   r?   rM   
csrf_tokenrN   s                  r.   _real_extractRayWenderlichIE._real_extractG   sa   $$S)#zz+t<	!{!I;/
((9--T . # 3&*&<&<Wk'3 	 "W, @ 
 
 %%'*d & L ##""?%t6 # C \	 $ HD
 --! :$($6$6!9j%:  $4G //g|T 0 CJ*4'''A(5Q ( --46E W~a(7HKK*6*$yy7  (599&<('		*(=>.uyy/FG  4%%1(<cC~~( "1 "4 5 	5r1   r+   N)__name__
__module____qualname____firstlineno__
_VALID_URLr   ra   _TESTSstaticmethodr@   ri   __static_attributes__r+   r1   r.   r   r      s    J M#A#%((

 !
 >>#$9:%( W'F0 ) )(85r1   r   c                   T   ^  \ rS rSrSrSSSS.SS0S	S
.r\U 4S j5       rS rSr	U =r
$ )RayWenderlichCourseIE   a  (?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                 Z   > [         R                  U5      (       a  S$ [        TU ]  U5      $ )NF)r   suitablesuper)clsr"   	__class__s     r.   ry   RayWenderlichCourseIE.suitable   s(    '0055uP57;KC;PPr1   c           	         U R                  U5      nU R                  X5      n/ n[        5       n[        R                  " SU S3U5       HU  nXe;   a  M
  UR                  U5        UR                  U R                  [        X5      [        R                  5       S95        MW     U R                  US S9=(       d    U R                  SUSS S9nU R                  XBU5      $ )Nz<a[^>]+\bhref=["\'](/z/lessons/\d+))rV   rE   ztwitter:titler   )	_match_idrX   setrefindalladdappendr_   r   r   ra   _og_search_titlerZ   playlist_result)rb   r"   rC   re   entrieslesson_urls
lesson_urlr   s           r.   ri   #RayWenderlichCourseIE._real_extract   s    NN3'	((8e**(=A7LJ(OOJ'NN4??(_-C-C-E + G HL %%T & # =&*&<&<Wgt '= '= 	 ##G>>r1   r+   )rk   rl   rm   rn   ro   _TESTclassmethodry   ri   rr   __classcell__)r|   s   @r.   rt   rt      sS    J C%'

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