
    VGhC                     T    d dl mZ ddlmZmZmZmZ  G d de      Z G d de      Zy)	   )InfoExtractor   )ExtractorErrormimetype2extparse_iso8601try_getc                   |    e Zd ZdZdZdZdddiddd	d
deeddd	ddddgZdZdZ	dZ
ddddZd Zd ZdefdZd Zy)FancodeVodIEFzfancode:vodz6https?://(?:www\.)?fancode\.com/video/(?P<id>[0-9]+)\bz8https://fancode.com/video/15043/match-preview-pbks-vs-miskip_downloadT6249806281001mp4zMatch Preview: PBKS vs MIzre:^https?://.*\.jpg$iv9`202104226008340455001)	idexttitle	thumbnail	timestamp
view_count
like_countupload_dateuploader_id)urlparams	info_dictzhttps://fancode.com/video/15043r   only_matchingNfancodezRUse "--username refresh --password <refresh_token>" to login using a refresh tokenzapplication/jsonzhttps://fancode.com)zcontent-typeoriginrefererc                 N   |dk7  r| j                  d| j                          | j                          d|z  }| j                  d|d      }t	        |d       | _        | j
                  | j                  d       y | j                  j                  dd	| j
                   i       y )
Nrefreshz>Login using username and password is not currently supported. a
  {
            "query":"mutation RefreshToken($refreshToken: String\u0021) { refreshToken(refreshToken: $refreshToken) { accessToken }}",
            "variables":{
                "refreshToken":"%s"
            },
            "operationName":"RefreshToken"
        }zrefresh tokenzGetting the Access tokenc                     | d   d   d   S )NdatarefreshTokenaccessToken xs    a/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/fancode.py<lambda>z-FancodeVodIE._perform_login.<locals>.<lambda>:   s    1V9^;TUb;c     zFailed to get Access tokenAuthorizationzBearer )report_warning_LOGIN_HINTreport_logindownload_gqlr   _ACCESS_TOKENheadersupdate)selfusernamepasswordr$   
token_jsons        r*   _perform_loginzFancodeVodIE._perform_login+   s    y "`aeaqaq`r st  &&>XY
$Z1cd% <=LLGD<N<N;O2P QRr,   c                     d }|r| j                   d| j                   }n|s| j                   d}|r| j                  |dd        y y )Nz3This video is only available for registered users. z;This video isn't available to the current logged in accountT)metadata_availablemethod)r2   r/   raise_login_required)r5   is_available
is_premiummsgs       r*   _check_login_requiredz"FancodeVodIE._check_login_required@   sX    $,,4GHXHXGYZC$"4"4"@PC%%cd4%P r,   c                 L    | j                  d||j                         |||      S )Nzhttps://www.fancode.com/graphql)r$   noter3   fatal)_download_jsonencode)r5   variabler$   rC   rD   r3   s         r*   r1   zFancodeVodIE.download_gqlI   s/    ""-xT5 # * 	*r,   c                     d}| j                  |      }d}d|z  }| j                  ||d      }t        |d t              xs i }t        |d t              }|t        d      |j                  d	      }	| j                  |j                  d
      |	       d|||fz  d||d   |j                  d      |j                  d      |j                  d      t        |j                  d            | j                  |	      d
S )NzGhttps://players.brightcove.net/%s/default_default/index.html?videoId=%sr   a  {
            "query":"query Video($id: Int\u0021, $filter: SegmentFilter) { media(id: $id, filter: $filter) { id contentId title contentId publishedTime totalViews totalUpvotes provider thumbnail { src } mediaSource {brightcove } duration isPremium isUserEntitled tags duration }}",
            "variables":{
                "id":%s,
                "filter":{
                    "contentDataType":"DEFAULT"
                }
            },
            "operationName":"Video"
        }zDownloading metadata)rC   c                     | d   d   S )Nr$   mediar'   r(   s    r*   r+   z,FancodeVodIE._real_extract.<locals>.<lambda>b   s    671C r,   c                     | d   d   S )NmediaSource
brightcover'   r(   s    r*   r+   z,FancodeVodIE._real_extract.<locals>.<lambda>c   s    q7G7U r,   z%Unable to extract brightcove Video ID	isPremiumisUserEntitledurl_transparentBrightcoveNewr   totalUpvotes
totalViewstagspublishedTime)needs_premium)
_typer   ie_keyr   r   r   r   rT   release_timestampavailability)
	_match_idr1   r   dictstrr   getrA   r   _availability)
r5   r   BRIGHTCOVE_URL_TEMPLATEvideo_idbrightcove_user_idr$   metadata_jsonrJ   brightcove_video_idr?   s
             r*   _real_extractzFancodeVodIE._real_extractO   s   "k>>#&,	 	 ))(D?U)V'CTJPb%e-UWZ[& !HIIYY{+
""599-=#>
K '*.@BU-VV%7^))N3))L1IIf%!.uyy/I!J ..Z.H
 	
r,   )__name__
__module____qualname___WORKINGIE_NAME
_VALID_URLint_TESTSr2   _NETRC_MACHINEr/   r3   r9   rA   r1   re   r'   r,   r*   r
   r
      s    HGJJ JT
 "01#%*

" 1!F* MNfK +'(GS*Q 8=g *(
r,   r
   c                   J    e Zd ZdZdZdZdddddd	d
ddddd	ddd	dgZd Zy)FancodeLiveIEFzfancode:livez4https?://(www\.)?fancode\.com/match/(?P<id>[0-9]+).+z[https://fancode.com/match/35328/cricket-fancode-ecs-hungary-2021-bub-vs-blb?slug=commentary35328r   z
BUB vs BLBips`T20210628)r   r   r   r   is_liver   Ended)r   r   skipz https://fancode.com/match/35328/r   z.https://fancode.com/match/35567?slug=scorecardc           
         | j                  |      }d|z  }| j                  ||d      }t        |d       }|j                  d      dk7  rt	        dd      | j                  |j                  d	      d       ||j                  d
      | j                  t        |d       |      t        t        |d             dt        |j                  d            dS )Na  {
            "query":"query MatchResponse($id: Int\u0021, $isLoggedIn: Boolean\u0021) { match: matchWithScores(id: $id) { id matchDesc mediaId videoStreamId videoStreamUrl { ...VideoSource } liveStreams { videoStreamId videoStreamUrl { ...VideoSource } contentId } name startTime streamingStatus isPremium isUserEntitled @include(if: $isLoggedIn) status metaTags bgImage { src } sport { name slug } tour { id name } squads { name shortName } liveStreams { contentId } mediaId }}fragment VideoSource on VideoSource { title description posterUrl url deliveryType playerType}",
            "variables":{
                "id":%s,
                "isLoggedIn":true
            },
            "operationName":"MatchResponse"
        }z	Info jsonc                     | d   d   S )Nr$   matchr'   r(   s    r*   r+   z-FancodeLiveIE._real_extract.<locals>.<lambda>   s    !F)G2D r,   streamingStatusSTARTEDzThe stream can't be accessedT)expectedrO   namec                     | d   d   S )NvideoStreamUrlr   r'   r(   s    r*   r+   z-FancodeLiveIE._real_extract.<locals>.<lambda>   s    RSTdRefkRl r,   c                     | d   d   S )Nr~   deliveryTyper'   r(   s    r*   r+   z-FancodeLiveIE._real_extract.<locals>.<lambda>   s    a@P>QR`>a r,   	startTime)r   r   formatsr   rs   rY   )	r[   r1   r   r^   r   rA   _extract_akamai_formatsr   r   )r5   r   ra   r$   	info_json
match_infos         r*   re   zFancodeLiveIE._real_extract   s    >>#&  %%hkB	Y(DE
>>+,	9 !@4PP"":>>2B#CTJ ^^F+33GJHl4mowx
4a bc!.z~~k/J!K
 	
r,   N)rf   rg   rh   ri   rj   rk   rm   re   r'   r,   r*   rp   rp   z   s_    HGHJ m!#%
  2 @F&
r,   rp   N)	commonr   utilsr   r   r   r   r
   rp   r'   r,   r*   <module>r      s)    ! H Hr
= r
j4
L 4
r,   