
    VGh!                         d dl Z d dlZd dl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 ddZddZ G d d	e      Z G d
 de      Zy)    N   )InfoExtractor   )ExtractorError
clean_htmlextract_attributesget_elements_by_classint_or_none
js_to_jsonsmuggle_urlunescapeHTMLc                     |d}|d}ndt        j                  |       d}|d}n|rt        j                  |      n|}d| d}g }t        j                  d| d| | d	|       D ]  }|j                  |        |S )
zVReturn the content of the tag with the specified attribute in the passed HTML documentz[a-zA-Z0-9:._-]+ z\s+(?P<attribute>)z=['"]?(?P<value>z)['"]?z(?xs)
        <(?P<tag>zV)
         (?:\s+[a-zA-Z0-9:._-]+(?:=[a-zA-Z0-9:._-]*|="[^"]*"|='[^']*'|))*?
         z
         (?:\s+[a-zA-Z0-9:._-]+(?:=[a-zA-Z0-9:._-]*|="[^"]*"|='[^']*'|))*?
        \s*>
        (?P<content>.*?)
        </\1>
    )reescapefinditerappend)htmltag	attributevalueescape_valueretlistms          `/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/duboku.py_get_elements_by_tag_and_attribr      s     { 	(9)=(>a@	}$0		% e#E7'2G[[  

UG  
 	 	q	 N    c                 2    t        | ||||      }|r|d   S d S )Nr   )r   )r   r   r   r   r   retvals         r   _get_element_by_tag_and_attribr!   0   s%    ,T3	5,WF6!9(D(r   c                   n    e Zd ZdZdZdZ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
ddd
ddidgZdZd Zy)DubokuIEdubokuzwww.duboku.iozE(?:https?://[^/]+\.duboku\.io/vodplay/)(?P<id>[0-9]+-[0-9-]+)\.html.*z)https://w.duboku.io/vodplay/1575-1-1.htmlz1575-1-1mp4   白色月光u   contains:白色月光r   zSeason 11z	Episode 1)
idextseriestitleseason_numberepisode_numberseason
episode_id	season_idepisodeskip_downloadzm3u8 download)url	info_dictparamsz)https://w.duboku.io/vodplay/1588-1-1.htmlz1588-1-1u   亲爱的自己u   contains:第1集)
r(   r)   r*   r+   r,   r-   r1   r.   r/   r0   z.player_data\s*=\s*(\{\s*(.*)})\s*;?\s*</scriptc           
         | j                  |      }|j                  d      }|d   }|d   }|d   }d| d}| j                  ||      }| j                  | j                  |d      }	| j                  |	|t              }	t        d|      }d }
d }|D ]  }t        j                  d	|      }|st        |j                  d            j                  d
      }|sHt        j                  d|      }|sa|j                  d      |k(  svt        |j                  d            }
t        j                  dd|
      }
t        |      }t        j                  dd|      } n |	j                  d      }|st        d      |	j                  d      }|dk(  r t         j"                  j%                  |      }nF|dk(  rAt         j"                  j%                  t'        j(                  |      j+                  d            }d|i}|	j                  d      dk(  r*dt-        |d|i      |||
t/        |      |t/        |      |d	S | j1                  ||d|      }|||
t/        |      |t/        |      |||d	S )N-r   r   r   zhttps://w.duboku.io/vodplay/.htmlplayer_datar+   z<a\s+.*>(.*)</a>hrefz/(\d+)\.htmlz[\s\r\n\t]+ r3   zCannot find url in player_dataencryptasciiRefererfromiframeurl_transparentreferer)	_typer3   r(   r+   r*   r,   r0   r-   r/   r%   )headers)	r(   r+   r*   r,   r0   r-   r/   formatshttp_headers)	_match_idsplit_download_webpage_search_regex_PLAYER_DATA_PATTERN_parse_jsonr   r	   r   searchr   groupgetr   subr   urllibparseunquotebase64	b64decodedecoder   r
   _extract_m3u8_formats)selfr3   video_idtemp	series_idr0   r/   webpage_urlwebpage_htmlr9   series_titler+   r   mobjr:   mobj1data_urlplayer_encryptrD   rE   s                       r   _real_extractzDubokuIE._real_extract`   so   >>#&~~c"G	G	!W
4XJeD--k8D ((%%|]D&&{HjI %Wl; 	D990$7D)$**Q-8<<VDIIot<EQ9!<'1$**Q-'@')vvnc<'P *4 0 "~sE B	 ??5) !ABB$3Q||++H5Hq ||++F,<,<X,F,M,Mg,VWH k*??6"h. +"8i-EF&!,Y!7&"-j"9(
 
 ,,XxPW,X "(3")*5$#

 
	
r   N)	__name__
__module____qualname__IE_NAMEIE_DESC
_VALID_URL_TESTSrK   rc    r   r   r#   r#   5   s    GGYJ:$, "
 _
$ ;''" 
 _
#"FH MH
r   r#   c                   B    e Zd ZdZdZdZdddddd	d
dddddgZd Zy)DubokuPlaylistIEzduboku:listzwww.duboku.io entire seriesz?(?:https?://[^/]+\.duboku\.io/voddetail/)(?P<id>[0-9]+)\.html.*z'https://w.duboku.io/voddetail/1575.htmlzstartswith:1575r&   )r(   r+      )r3   r4   playlist_countz'https://w.duboku.io/voddetail/1554.htmlzstartswith:1554u   以家人之名   )r3   r4   playlist_mincountc                    | j                  |      }|t        d|       |j                  d      }t        j                  j                  |      j                  }d| d}| j                  ||      }t        |ddd      }|rt        |j                  d            nd }|s| j                  d	|      }|s*t        |d      }|rt        |j                  d            nd }i }t        |dd
d      D ]  }	|	j                  d      }
g }t        |	j                  d      dddd      D ]F  }|j                  t        |j                  d            t        |j                  d            d       H |||
<    d }d }
|r|j                  |      }|}
n*t        t        |j!                               d       }|r|\  }
}|st        |r	d|       d      | j#                  |D cg c]X  }| j%                  t        j                  j'                  d|d         t(        j+                         |j                  d            Z c}|dz   |
z   |      S c c}w )NzInvalid URL: r(   zhttps://w.duboku.io/voddetail/r8   h1classr+   contentkeywordszplaylist\d+F)r   r   r   r   ar:   z[^'"]+?)r   r   )r:   r+   zCannot find zCannot extract playlistzhttps://w.duboku.io)ievideo_title#)_match_valid_urlr   rN   rQ   rR   urlparsefragmentrI   r!   r   _html_search_metar   r   rO   nextiteritemsplaylist_result
url_resulturljoinr#   ie_key)rX   r3   r_   r[   r}   r\   r]   r+   	playlistsdivplaylist_idplaylistrw   firstxs                  r   rc   zDubokuPlaylistIE._real_extract   sm   $$S)< =!677JJt$	<<((-666ykG--k9E /|T7GT8=U[[344**:|DE2<IE<ALY!78tE 	2NQVX 
	.C))G,KH4IIi(#vZV[] ()9:)!'')*<=!  &.Ik"
	.  }}X.H"Kioo/0$7E*/'h -5,xj)V V;TV V ## 	%  OO$$%:AfIF??$!%%.  B% !*C+ =u	F 	F %s   !AIN)rd   re   rf   rg   rh   ri   rj   rc   rk   r   r   rm   rm      sP    G+GSJ8##
  9#&
  F 6Fr   rm   )NNNT)rT   r   urllib.parserQ   commonr   utilsr   r   r   r	   r
   r   r   r   r   r!   r#   rm   rk   r   r   <module>r      sI     	  !	 	 	<)
s
} s
lKF} KFr   