
    yf                     h    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	  G d de      Z
 G d d	e
      Zy)
    N   )InfoExtractor   )ExtractorErrorOnDemandPagedListdetermine_extint_or_nonetry_getc                   L    e Zd ZdZdZddddddd	d
ddeeeg dddZddZd Zy)
MurrtubeIEFa)  (?x)
                        (?:
                            murrtube:|
                            https?://murrtube\.net/videos/(?P<slug>[a-z0-9\-]+)\-
                        )
                        (?P<id>[a-f0-9]{8}\-[a-f0-9]{4}\-[a-f0-9]{4}\-[a-f0-9]{4}\-[a-f0-9]{12})
                    zQhttps://murrtube.net/videos/inferno-x-skyler-148b6f2a-fdcc-4902-affe-9c0f41aaaca0 169f494812d9a90914b42978e73aa690z$148b6f2a-fdcc-4902-affe-9c0f41aaaca0mp4zInferno X Skylerz+Humping a very good slutty sheppy (roomate)zre:^https?://.*\.jpg$i  zInferno Wolf   )humpbreedFursuitmurrsuitbareback)idexttitledescription	thumbnaildurationuploader	age_limitcomment_count
view_count
like_counttags)urlmd5	info_dictNc           	          | j                  d||t        j                  |      j                         |ddi      }|d   S )Nzhttps://murrtube.net/graphqlzContent-Typezapplication/json)datafatalheadersr%   )_download_jsonjsondumpsencode)selfvideo_idopnoter&   results         ;/usr/lib/python3/dist-packages/yt_dlp/extractor/murrtube.py_download_gqlzMurrtubeIE._download_gql*   sI    $$*dB!6!6!8#%78 % : f~    c                 "   | j                  |      }| j                  |dd|idd      }|d   }d}||j                  dd      z   }||j                  d	d      z   }t        |      d
k(  r| j	                  ||ddd      }nd|ig}||j                  d      |j                  d      ||t        |j                  d            t        |d       |j                  d      |j                  d      |j                  d      |j                  d      ddS )NMediumr   zquery Medium($id: ID!) {
  medium(id: $id) {
    title
    description
    key
    duration
    commentsCount
    likesCount
    viewsCount
    thumbnailKey
    tagList
    user {
      name
      __typename
    }
    __typename
  }
}operationName	variablesquerymediumz&https://storage.murrtube.net/murrtube/key thumbnailKeym3u8r   m3u8_nativeF)entry_protocolr&   r!   r   r   r   c                     | d   d   S )Nusername )xs    r1   <lambda>z*MurrtubeIE._real_extract.<locals>.<lambda>^   s    &	&0A r3   
viewsCount
likesCountcommentsCounttagListr   )r   r   r   formatsr   r   r   r   r   r   r    r   )	_match_idr2   getr   _extract_m3u8_formatsr	   r
   )	r,   r!   r-   r%   metastorage_url
format_urlr   rK   s	            r1   _real_extractzMurrtubeIE._real_extract1   s-   >>#&!!(%h- 0 H~> 488E2#66
$((>2">>	$.00HeMQV 1 XG z*+G XXg&88M2"#DHHZ$89&AB((<0((<0!XXo6HHY'
 	
r3   )NT)	__name__
__module____qualname___WORKING
_VALID_URLint_TESTr2   rR   rD   r3   r1   r   r      sQ    HJ c18'H1& H
E&3
r3   r   c                   8    e Zd ZdZdZdZdddiddZd	Zd
 Zd Z	y)MurrtubeUserIEFzMurrtube user profilez%https?://murrtube\.net/(?P<id>[^/]+)$zhttps://murrtube.net/stormyr   stormy   )r!   r#   playlist_mincount
   c           	   #   D  K   | j                  |d| j                  || j                  z  d|ddddj                  |dz               }|t        d|dz          |d	   }|D ]:  }| j	                  d
j                  |d         t
        j                                < y w)NMedialatest)limitoffsetsortuserIdzquery Media($q: String, $sort: String, $userId: ID, $offset: Int!, $limit: Int!) {
  media(q: $q, sort: $sort, userId: $userId, offset: $offset, limit: $limit) {
    id
    __typename
  }
}r6   zDownloading page {0}r   z'Failed to retrieve video list for page mediazmurrtube:{0}r   )r2   
_PAGE_SIZEformatr   
url_resultr   ie_key)r,   usernameuser_idpager%   rg   entrys          r1   _fetch_pagezMurrtubeUserIE._fetch_paget   s     !!($0 !	- #))$(35  < #J4RS8*!UVVW 	[E//."7"7d"DjFWFWFYZZ	[s   BB c           	      &   | j                  |      }| j                  |dd|iddd      }|t        d      |d   }t        t	        j
                  | j                  ||j                  d            | j                        }| j                  ||      S )NUserr   zDquery User($id: ID!) {
  user(id: $id) {
    id
    __typename
  }
}r6   zDownloading user infozFailed to fetch user inforB   )
rL   r2   r   r   	functoolspartialrp   rM   rh   playlist_result)r,   r!   rl   r%   rB   entriess         r1   rR   zMurrtubeUserIE._real_extract   s    >>#&!!(#h- $% < !<==F|#I$5$5h%89=J ##GX66r3   N)
rS   rT   rU   rV   IE_DESCrW   rY   rh   rp   rR   rD   r3   r1   r[   r[   g   s<    H%G9J,(
  E J[27r3   r[   )rs   r)   commonr   utilsr   r   r   r	   r
   r   r[   rD   r3   r1   <module>rz      s3      ! V
 V
r=7Z =7r3   