
     i)                         d dl mZmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
mZmZ d dlmZ d dlmZ d dlmZ  G d	 d
          Z G d d          ZdS )    )AnyDict)AudioSegment)
GenreMusic)SignatureGenerator)BadCityNameBadCountryNameBadParseData)HTTPClientInterface)	ShazamUrl)CountryCodec                   n    e Zd ZdefdZdedefdZdededefdZde	defd	Z
defd
Zdede	defdZdS )
GeoServiceclientc                     || _         d S )N)r   )selfr   s     Z/root/.openclaw/workspace/.venvs/songid/lib/python3.11/site-packages/shazamio/converter.py__init__zGeoService.__init__   s        countryreturnc                    K   | j                             dt          j        d           d{V }|d         D ]}||d         k    r
|d         c S t	          d          )z
        Return Country playlistID from country name
            :param country: - Country code, format: ISO 3166-3 alpha-2 code. Example: RU,NL,UA
            :return: City ID
        GETapplication/jsonN	countriesidlistidz"Country not found, check city name)r   requestr   	LOCATIONSr	   )r   r   dataresponse_countrys       r   get_country_playlistzGeoService.get_country_playlist   s       [((	0CEWXXXXXXXX $[ 1 	2 	2*4000'1111 1ABBBr   cityc                    K   | j                             dt          j        d           d{V }|d         D ]1}||d         k    r#|d         D ]}||d         k    r|d         c c S 2t	          d	          )
z
        Return playlistID from country name and city name.
            :param country: - Country name
            :param city: - City name
            :return: City ID
        r   r   Nr   r   citiesnamer   zCity not found, check city name)r   r   r   r   r   )r   r   r#   r    r!   response_citys         r   get_city_playlistzGeoService.get_city_playlist   s       [((	0CEWXXXXXXXX $[ 1 	7 	7*4000%5h%? 7 7M}V444,X666666 5;<<<r   genrec                 T  K   | j                             dt          j        d           d{V }|                    d          }|st          d          |                    d          }|st          d          |D ]}|j        |d         k    r
|d	         c S t          d
          )z
        Return Global Genre playlistID from country name and city name.
            :param genre: - Genre urlName from https://www.shazam.com/services/charts/locations
            :return: City ID
        r   r   Nglobal(Global key not found in shazam locationsgenres(Genres key not found in shazam locationsurlNamer   !Genre not found, check genre namer   r   r   r   getr
   valuer   )r   r)   r    global_dataglobal_genresresponse_genres         r   	get_genrezGeoService.get_genre.   s       [((	0CEWXXXXXXXXhhx(( 	KIJJJ#11 	KIJJJ+ 	0 	0N{nY777%h//// 8 =>>>r   c                   K   | j                             dt          j        d           d {V }|                    d          }|st          d          |                    d          }|st          d          |d         S )Nr   r   r+   r,   topz%Top key not found in shazam locationsr   )r   r   r   r   r2   r
   )r   r    r4   r9   s       r   get_topzGeoService.get_topD   s      [((	0CEWXXXXXXXXhhx(( 	KIJJJooe$$ 	HFGGG8}r   c                 :  K   | j                             dt          j        d           d{V }|d         D ]V}||d         k    rH|                    d          }|st          d          |D ]}|j        |d         k    r|d	         c c S  Wt          d
          )af  
        Return Global Genre playlistID from country name and genre urlName from https://www.shazam.com/services/charts/locations
            :param country: - Country code, format: ISO 3166-3 alpha-2 code. Example: RU,NL,UA
            :param genre: - Genre urlName from https://www.shazam.com/services/charts/locations
            :return: City ID
        r   r   Nr   r   r-   r.   r/   r   r0   r1   )r   r   r)   r    r!   r5   r6   s          r   get_genre_from_countryz!GeoService.get_genre_from_countryO   s       [((	0CEWXXXXXXXX $[ 1 	8 	8*4000 0 4 4X > >$ S&'QRRR&3 8 8N{nY&???-h777777 @ =>>>r   N)__name__
__module____qualname__r   r   r   strr"   r(   r   r7   r:   r<    r   r   r   r      s        2    C+ C# C C C C={ =# =# = = = = ?Z ?C ? ? ? ?,	s 	 	 	 	?K ?
 ?WZ ? ? ? ? ? ?r   r   c                       e Zd Zedededededeeef         f
d            Zede	de	fd            Z
ede	defd	            Zd
S )	Convertertimezoneurisamplems	timestampr   c                     | ||d|i i dS )N)rE   rF   )rD   	signaturerG   contextgeolocationrA   )rD   rE   rF   rG   s       r   data_searchzConverter.data_searchf   s*     !!$(;;"
 
 	
r   audioc                     |                      d          } |                     d          } |                     d          } | S )N   >     )set_sample_widthset_frame_rateset_channels)rM   s    r   normalize_audio_datazConverter.normalize_audio_datap   s@    &&q))$$U++""1%%r   c                     t                      }|                    |                                            d|_        | j        dk    r+|xj        dt          | j        dz            dz
  z  z  c_        |S )N   $   rP   rO      )r   
feed_inputget_array_of_samplesMAX_TIME_SECONDSduration_secondssamples_processedint)rM   signature_generators     r   create_signature_generatorz$Converter.create_signature_generatorx   s{    022&&u'A'A'C'CDDD/1,!F**11Uc%BX[\B\>]>]`a>a5bb11""r   N)r=   r>   r?   staticmethodr@   r_   r   r   rL   r   rU   r   ra   rA   r   r   rC   rC   e   s        
c 
 
s 
s 
tTWY\T\~ 
 
 
 \
 L \    \ #, #;M # # # \# # #r   rC   N)typingr   r   pydubr   shazamio.enumsr   shazamio.algorithmr   shazamio.exceptionsr   r	   r
   shazamio.interfaces.clientr   shazamio.miscr   shazamio.typehintsr   r   rC   rA   r   r   <module>rk      s
                 % % % % % % 1 1 1 1 1 1 I I I I I I I I I I : : : : : : # # # # # # * * * * * *U? U? U? U? U? U? U? U?p# # # # # # # # # #r   