a
    hy                     @   sd   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mZ G dd deZG dd	 d	eZdS )
    N   )InfoExtractor   )	ExtractorErrordetermine_extmerge_dictsparse_durationparse_resolution
str_to_inturl_or_noneurlencode_postdataurljoinc                   @   s|   e Zd ZdZdddddddd	d
dddd
dddddddddddddddddddddddddg	Zdd ZdS )SpankBangIEa0  (?x)
                    https?://
                        (?:[^/]+\.)?spankbang\.com/
                        (?:
                            (?P<id>[\da-z]+)/(?:video|play|embed)\b|
                            [\da-z]+-(?P<id_2>[\da-z]+)/playlist/[^/?#&]+
                        )
                    z4https://spankbang.com/56b3d/video/the+slut+maker+hmvZ 2D13903DE4ECC7895B5D55930741650AZ56b3dmp4zThe Slut Maker HMVz)Girls getting converted into cock slaves.zre:^https?://.*\.jpg$ZMindselfZmindselfiD"c`Z20210330   )
idexttitledescription	thumbnailuploaderuploader_id	timestampZupload_date	age_limit)urlmd5	info_dictz0http://spankbang.com/1vt0/video/solvane+gangbangT)r   Zonly_matchingzAhttp://spankbang.com/lklg/video/sex+with+anyone+wedding+edition+2z:http://m.spankbang.com/1o2de/video/can+t+remember+her+namez3https://spankbang.com/1vwqx/video/jade+kush+solo+4kz4https://m.spankbang.com/3vvn/play/fantasy+solo/480p/z!https://m.spankbang.com/3vvn/playz"https://spankbang.com/2y3td/embed/z8https://spankbang.com/2v7ik-7ecbgu/playlist/latina+bootyc                    s   |}|dp|ddp*d}dd|  j|d dd d	d
d}td|rt	d dd
dg   fdd}d}t
| d|D ]}||dd q s:jd|ddd}jddt|dd|ddd}| D ].\}	}
|
r,t|
tr,|
d }
||	|
 q
j|i d }jd!|d"d d }jd#|d$d d }j|d d }jd%|d&d d }jd'|d(d d }tjd)|d*d d }tjd+|d,d d }|}t|p|||||| |d-
|S ).Nr   Zid_2Zgeo_bypass_countryZUSz.spankbang.comcountry/z/embedz/videoT)Zimpersonatez'<[^>]+\b(?:id|class)=["\']video_removedzVideo z is not available)expectedc              
      s   t |}|sd S t| }t|}| ds2|dkrP j|ddddd nb| dsb|dkr| j|ddd	 n6|dks|d
s|dr||| d  	| d S )NZm3u8r   Zm3u8_nativeZhlsF)Zentry_protocolZm3u8_idfatalZmpdZdash)Zmpd_idr    widthheight)r   	format_id)
r   r	   r   
startswithextendZ_extract_m3u8_formatsZ_extract_mpd_formatsgetupdateappend)r#   
format_urlZf_urlfr   formatsselfvideo_id O/mnt/pikpak/tmp/myenv/lib/python3.9/site-packages/yt_dlp/extractor/spankbang.pyextract_formatV   s(    

z1SpankBangIE._real_extract.<locals>.extract_formatZstream_url_z4(?P<id>[^\s=]+)\s*=\s*(["\'])(?P<url>(?:(?!\2).)+)\2r   z5data-streamkey\s*=\s*(["\'])(?P<value>(?:(?!\1).)+)\1z
stream keyvalue)groupz'https://spankbang.com/api/videos/streamzDownloading stream JSONr   )r   dataZXMLHttpRequest)ZRefererzX-Requested-With)r4   headers)defaultz&(?s)<h1[^>]+\btitle=["\']([^"]+)["\']>r   z><div[^>]+\bclass=["\']bottom[^>]+>\s*<p>[^<]*</p>\s*<p>([^<]+)r   z8<svg[^>]+\bclass="(?:[^"]*?user[^"]*?)">.*?</svg>([^<]+)r   z<a[^>]+href="/profile/([^"]+)"r   z6<div[^>]+\bclass=["\']right_side[^>]+>\s*<span>([^<]+)durationz([\d,.]+)\s+playsz
view count)
r   r   r   r   r   r   r7   
view_countr,   r   )_match_valid_urlr3   	get_paramZ_set_cookieupper_download_webpagereplaceresearchr   finditerZ_search_regexZ_download_jsonr   items
isinstancelistZ_search_json_ld_html_search_regexZ_og_search_thumbnailr   r
   Z_rta_searchr   )r-   r   mobjr   webpager1   ZSTREAM_URL_PREFIXZ
stream_keystreamr#   r)   infor   r   r   r   r   r7   r8   r   r/   r+   r0   _real_extractG   s    



zSpankBangIE._real_extractN)__name__
__module____qualname__
_VALID_URLZ_TESTSrI   r/   r/   r/   r0   r      sR   	-r   c                   @   s*   e Zd ZdZddddddZdd	 Zd
S )SpankBangPlaylistIEzShttps?://(?:[^/]+\.)?spankbang\.com/(?P<id>[\da-z]+)/playlist/(?P<display_id>[^/]+)z3https://spankbang.com/ug0k/playlist/big+ass+tittiesZug0kzBig Ass Titties)r   r   (   )r   r   Zplaylist_mincountc                    sd     }|d} j|ddid} fddtd|D } jd|d	d
d} |||S )Nr   Cookiezcountry=US; mobile=on)r5   c                    s2   g | ]*} j t|d t |ddqS )pathr   )Zier.   )Z
url_resultr   r3   r   Zie_key).0rE   r-   r   r/   r0   
<listcomp>   s
   z5SpankBangPlaylistIE._real_extract.<locals>.<listcomp>zX<a[^>]+\bhref=(["\'])(?P<path>/?[\da-z]+-(?P<id>[\da-z]+)/playlist/[^"\'](?:(?!\1).)*)\1z<em>([^<]+)</em>\s+playlist\s*<zplaylist titleF)r    )r9   r3   r<   r>   r@   rD   Zplaylist_result)r-   r   rE   Zplaylist_idrF   entriesr   r/   rS   r0   rI      s     


z!SpankBangPlaylistIE._real_extractN)rJ   rK   rL   rM   Z_TESTrI   r/   r/   r/   r0   rN      s   	rN   )r>   commonr   utilsr   r   r   r   r	   r
   r   r   r   r   rN   r/   r/   r/   r0   <module>   s
   , 