a
    {Jh.P                     @   sb   d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZmZm	Z	 d dl
mZ G dd dZdS )    N)ListDictOptional)Configc                   @   s   e Zd ZdZdd Zdeeee dddZ	ee
e dd	d
Zee
e dddZdeeee dddZdeee
e dddZeedddZdS )ShazamServicezk
    Real Shazam HTTP API bilan ishlash uchun service klass
    Faqat real API, demo ma'lumotlar yo'q!
    c                 C   s    d| _ ddd| _td d S )Nzhttps://shazam.p.rapidapi.comzyour-real-api-key-herezshazam.p.rapidapi.com)zX-RapidAPI-KeyzX-RapidAPI-Hostu3   ✅ ShazamService real HTTP API bilan ishga tushdi!)base_urlheaderslogginginfo)self r   (/var/www/shaz/services/shazam_service.py__init__   s
    zShazamService.__init__
   )querylimitreturnc                    s  |r|  std g S zZtd| d| d | j d}|  ddt|d}t 4 I d	H }|j|| j	|d
d4 I d	H }|j
dkrP| I d	H }g }d|v rd|d v r|d d D ]}	|	ddkrq|	di }
|
dd  }|
dd  }|r|sq|	ddt| d| ||ddddddddd}|	di }|ddp|ddp|dd|d< |	di }d |v r|d  }|d!d|d"< || q|std#| d$ g W  d	  I d	H  W  d	  I d	H  W S td%| d&t| d' |W  d	  I d	H  W  d	  I d	H  W S |j
d(krtd) g W  d	  I d	H  W  d	  I d	H  W S |j
d*krtd+ g W  d	  I d	H  W  d	  I d	H  W S td,|j
  g W  d	  I d	H  W  d	  I d	H  W S W d	  I d	H  qF1 I d	H s<0    Y  W d	  I d	H  qt1 I d	H sj0    Y  W n\ tjy   td- g  Y S  ty } z td.|  g W  Y d	}~S d	}~0 0 d	S )/z<
        Qo'shiqlarni qidiruv - faqat real HTTP API
        zBo'sh qidiruv so'roviu   🔍 Real HTTP API qidiruv: 'z
' (limit: )z/searchen-US0)Ztermlocaleoffsetr   Nr   r   paramstimeout   trackshitstypeZMUSICheadingtitle subtitlekeyZtrack__r   )idr    artistalbumduration	cover_urlpreview_urldownload_url	file_sizegenreyearimagesdefaultZplayZblurredr)   storesZappleZ
previewurlr*   zReal HTTP API dan 'z' uchun natija topilmadiu   ✅ 'z' uchun z ta real natija topildi  u/   ❌ Real API key noto'g'ri yoki muddati tugagani  u   ❌ Real API limit tugaganu   ❌ Real HTTP API xatosi: u   ❌ Real HTTP API timeoutu"   ❌ Real HTTP API qidiruv xatosi: )stripr	   warningr
   r   straiohttpClientSessiongetr   statusjsonlenappenderrorasyncioTimeoutError	Exception)r   r   r   urlr   sessionresponsedatasongshitr   r    r&   	song_infor/   r1   Z
apple_dataer   r   r   search_songs   s    
 



..
.
.
zShazamService.search_songs)audio_file_pathr   c                    s  t j|s td|  dS z4td|  | j d}t|d4 I dH $}|	 I dH }W d  I dH  q1 I dH s0    Y  t
 }|jd|t j|d t
 4 I dH |}|j|| j|dd	4 I dH .}|jd
kr|| I dH }d|v rH|d }	|	ddt j| |	dd |	dd dddddddd
}
d|	v r|	d r|	d ddp|	d dd|
d< d|	v rd|	d v r|	d d D ]2}|ddkrd|v r|d |
d<  qq|
d rH|
d rHtd|
d  d|
d   |
W  d  I dH  W  d  I dH  W S td W d  I dH  W d  I dH  W dS |jd krtd! W d  I dH  W d  I dH  W dS td"|j  W d  I dH  W d  I dH  W dS W d  I dH  q&1 I dH s0    Y  W d  I dH  qT1 I dH sJ0    Y  W n8 ty } ztd"|  W Y d}~dS d}~0 0 dS )#z@
        Audio faylni tanib olish - faqat real HTTP API
        zAudio fayl topilmadi: Nu&   🎵 Real HTTP API audio tanib olish: z/songs/v2/detectrbZupload_file)filename   )r   rD   r   r   trackr#   Zrecognized_r    r!   r"   r   )
r%   r    r&   r'   r(   r)   r*   r+   r-   r.   r/   coverart
backgroundr)   hubactionsr   urir*   r&   u&   ✅ Real HTTP API audio tanib olindi:  - z Real HTTP API audio tanib olmadir2      ❌ Real API key noto'g'riu,   ❌ Real HTTP API audio tanib olish xatosi: )ospathexistsr	   r=   r
   r   aiofilesopenreadr6   FormData	add_fieldbasenamer7   postr   r9   r:   r8   r3   r4   r@   )r   rJ   rA   fZ
audio_datarD   rB   rC   resultZ
track_datarG   actionrH   r   r   r   recognize_audiov   sb    8 

.
*
*zShazamService.recognize_audio)song_idr   c                    s  |sdS z`t d|  | j d}|dd}t 4 I dH }|j|| j|dd4 I dH }|jdkr| I dH }|rV||d	d
	 |dd
	 d
dd
d
d
d
d
d
d
d}d|v r|d r|d dd
p|d dd
|d< d|v rHd|d v rH|d d D ]2}|ddkrd|v r|d |d<  qHqz| j d}	d|i}
|j|	| j|
dd4 I dH H}|jdkr| I dH }d|v r|d |d< W d  I dH  q1 I dH s0    Y  W n6 t
y } zt d|  W Y d}~n
d}~0 0 t d|d	   |W  d  I dH  W  d  I dH  W S t d|  W d  I dH  W d  I dH  W dS |jdkrt d W d  I dH  W d  I dH  W dS t d|j  W d  I dH  W d  I dH  W dS W d  I dH  q:1 I dH s00    Y  W d  I dH  qh1 I dH s^0    Y  W n8 t
y } zt d|  W Y d}~dS d}~0 0 dS ) zD
        Qo'shiq tafsilotlarini olish - faqat real HTTP API
        Nu!   📋 Real HTTP API song details: z/songs/get-detailsr   )r#   r   r   r   r   r    r!   r"   r   )r%   r    r&   r'   r(   r)   r*   r+   lyricsr-   r.   labelr/   rO   rP   r)   rQ   rR   r   rS   r*   z/songs/get-lyricsr#   re   zLyrics olishda xato: u'   ✅ Real HTTP API song details olindi: z&Real HTTP API song details topilmadi: r2   rU   u'   ❌ Real HTTP API song details xatosi: )r	   r
   r   r6   r7   r8   r   r9   r:   r3   r@   debugr4   r=   )r   rd   rA   r   rB   rC   Z
track_inforG   rb   Z
lyrics_urlZlyrics_paramsZlyrics_responseZlyrics_datarH   r   r   r   get_song_details   sn    
 

>&.*
*zShazamService.get_song_detailsPOP)r-   r   r   c                    s  z^t d| d| d g d}|D ]&}zt d|  | j d}dt|dd	}t 4 I d
H |}|j|| j|dd4 I d
H .}|j	dkr|
 I d
H }	g }
d|	v r|	d D ] }|dr|dsq|ddt|
 d| |dd |dd ddddd||d
}d|v rb|d rb|d ddp\|d dd|d< d|v rd|d v r|d d D ]2}|ddkrd|v r|d |d<  qq|
| q|
rt d t|
 d!| d |
W  d
  I d
H  W  d
  I d
H  W   W S n|j	d"krht d# g W  d
  I d
H  W  d
  I d
H  W   W S t d$| d%|j	  W d
  I d
H  W d
  I d
H  W q(W d
  I d
H  q1 I d
H s0    Y  W d
  I d
H  q1 I d
H s0    Y  W q( tyN } z.t d$| d&|  W Y d
}~q(W Y d
}~q(d
}~0 0 q(t d' g W S  ty } z t d(|  g W  Y d
}~S d
}~0 0 d
S ))z>
        Top qo'shiqlarni olish - faqat real HTTP API
        u   🏆 Real HTTP API top tracks: z	 (limit: r   )ZUSGBZUZZRUZDEZFRzTrying country: z/charts/trackr   r   )r   ZpageSizeZ	startFromNr   r   r   r   r    r"   r#   Ztop_r$   r!   r   )
r%   r    r&   r'   r(   r)   r*   r+   r-   countryr/   rO   rP   r)   rQ   rR   r   rS   r*   u   ✅ z ta real top track olindi (r2   rU   zCountry z failed: HTTP z	 failed: z-Hech bir mamlakatdan real top tracks olinmadiu%   ❌ Real HTTP API top tracks xatosi: )r	   r
   rg   r   r5   r6   r7   r8   r   r9   r:   r;   r3   r<   r=   r@   )r   r-   r   Z	countriesrk   rA   r   rB   rC   rD   rE   rN   rG   rb   rH   r   r   r   get_top_tracks  sr    
 

6
4$
zShazamService.get_top_tracks192)rG   qualityr   c                    s(  zt d|dd d| d | j d}|d |d}t 4 I d	H }|j|| j|d
d4 I d	H 2}|jdkr|d  d|d  d}| |}t	j
 | }tjt	j
dd t|d4 I d	H D}	|jd2 z3 d	H W }
|	|
I d	H  q6 W d	  I d	H  q.1 I d	H s$0    Y  tj|}|dk rt d| d t| W d	  I d	H  W d	  I d	H  W d	S t d| d| d |W  d	  I d	H  W  d	  I d	H  W S |jdkrt d W d	  I d	H  W d	  I d	H  W d	S |jdkrPt d W d	  I d	H  W d	  I d	H  W d	S t d|j  W d	  I d	H  W d	  I d	H  W d	S W d	  I d	H  q1 I d	H s0    Y  W d	  I d	H  q1 I d	H s0    Y  W n8 ty" } zt d|  W Y d	}~d	S d	}~0 0 d	S )z5
        Qo'shiqni yuklash - real API orqali
        u&   ⬇️ Real HTTP API qo'shiq yuklash: r    UnknownrT   Zkbpsz/songs/downloadr%   )r#   rn   N<   r   r   r&   z.mp3T)exist_okwbi    i  zYuklangan fayl juda kichik: z bytesu$   ✅ Real HTTP API qo'shiq yuklandi: z (z bytes)r2   rU   i  u%   ❌ Qo'shiq yuklash uchun mavjud emasu'   ❌ Real HTTP API yuklash xatosi: HTTP u*   ❌ Real HTTP API qo'shiq yuklash xatosi: )r	   r
   r8   r   r6   r7   r   r9   _clean_filenamer   TEMP_DIRrV   makedirsrY   rZ   contentiter_chunkedwriterW   getsizer=   remover@   )r   rG   rn   r+   r   rB   rC   rL   filepathr`   chunkr,   rH   r   r   r   download_songc  sD      
B

*.
*
*zShazamService.download_song)rL   r   c                 C   sj   ddl }|dd|}|ddd}|dd|}t|d	krbtj|\}}|dd
 | }|phdS )z&
        Fayl nomini tozalash
        r   Nz[<>:"/\\|?*]r!   asciiignorez\s+r$   d   `   zunknown_song.mp3)resubencodedecoder;   rV   rW   splitext)r   rL   r   nameextr   r   r   rs     s    zShazamService._clean_filenameN)r   )ri   r   )rm   )__name__
__module____qualname____doc__r   r5   intr   r   rI   r   rc   rh   rl   r}   rs   r   r   r   r   r   
   s   	]KNT6r   )r>   r	   r6   rY   rV   r:   typingr   r   r   configr   r   r   r   r   r   <module>   s   