U
    g                     @   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j|d dd dddid}td	|rjt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_2/z/embedz/videoCookiez
country=USheadersz'<[^>]+\b(?:id|class)=["\']video_removedzVideo z is not availableT)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 >/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/spankbang.pyextract_formatT   s6        
   
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)r6   r    )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   r8   
view_countr.   r   )_match_valid_urlr5   _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   mobjwebpager3   ZSTREAM_URL_PREFIXZ
stream_keystreamr%   r+   infor   r   r   r   r   r8   r9   r   r1   r-   r2   _real_extractG   s    
 
      
                
zSpankBangIE._real_extractN)__name__
__module____qualname__
_VALID_URLZ_TESTSrH   r1   r1   r1   r2   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   r   zcountry=US; mobile=onr   c                    s2   g | ]*} j t|d t |ddqS )pathr   )Zier0   )Z
url_resultr   r5   r   Zie_key).0rD   r/   r   r1   r2   
<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"   )r:   r5   r;   r=   r?   rC   Zplaylist_result)r/   r   rD   Zplaylist_idrE   entriesr   r1   rQ   r2   rH      s(    

    z!SpankBangPlaylistIE._real_extractN)rI   rJ   rK   rL   Z_TESTrH   r1   r1   r1   r2   rM      s   	rM   )r=   commonr   utilsr   r   r   r   r	   r
   r   r   r   r   rM   r1   r1   r1   r2   <module>   s
   , 