Exemple #1
0
 def get_api_token(self) -> str:
     if self.api_token:
         return self.api_token
     for script in extract_scripts_from_main_page(
             get_request_sync("https://soundcloud.com")):
         script_src = get_request_sync(script)
         api_token = extract_token_from_script(script_src)
         if not api_token:
             continue
         self.api_token = api_token
         return self.api_token
Exemple #2
0
 def search(self,
            search_term: str,
            search_type: SearchTypes,
            search_results=30):
     url = build_search_url(search_term=search_term,
                            search_type=search_type,
                            client_id=self.get_api_token(),
                            search_results=search_results)
     api_response: str = get_request_sync(url=url,
                                          extra_headers=COMMON_HEADERS)
     if search_type in [SearchTypes.GO_TRACK, SearchTypes.TRACK]:
         return parse_search_result_track(api_response)
     if search_type == SearchTypes.ARTIST:
         return parse_search_result_artist(api_response)
     if search_type == SearchTypes.ALBUM:
         return parse_search_result_album(api_response)
     if search_type == SearchTypes.ALL:
         try:
             return parse_search_result_track(api_response)
         except:
             try:
                 return parse_search_result_artist(api_response)
             except:
                 try:
                     return parse_search_result_album(api_response)
                 except:
                     pass
     return None
Exemple #3
0
def get_album_tracks(album_id: int) -> List:
    return [
        genius.Lyrics.from_api_response(json.dumps(x))
        for x in json.loads(
            get_request_sync(get_album_tracks_url(album_id), build_header())
        )["response"]["tracks"]
    ]
Exemple #4
0
 def get_albums_by_id(artist_id: str, token: str):
     url: str = f"https://api.spotify.com/v1/artists/{artist_id}/albums"
     parsed_response: dict = json.loads(
         get_request_sync(url, extra_headers=build_auth_header(token)))
     return [
         spotify.Album.from_api_response(json.dumps(x))
         for x in parsed_response["items"]
     ]
Exemple #5
0
    def from_id(playlist_id: str, token: str):
        url = f"https://api.spotify.com/v1/playlists/{playlist_id}"
        response: str = get_request_sync(
            url=url, extra_headers=build_auth_header(token=token))
        parsed_response: dict = json.loads(response)
        copied_parsed_response: dict = dict(parsed_response)

        while (copied_parsed_response["tracks"]["next"] if "tracks"
               in copied_parsed_response else copied_parsed_response["next"]):
            response: str = get_request_sync(
                url=copied_parsed_response["tracks"]["next"] if "tracks"
                in copied_parsed_response else copied_parsed_response["next"],
                extra_headers=build_auth_header(token=token),
            )
            copied_parsed_response = json.loads(response)
            parsed_response["tracks"]["items"].extend(
                copied_parsed_response["items"])

        return Playlist.from_api_response(json.dumps(parsed_response))
Exemple #6
0
 def get_top_tracks_by_id(artist_id: str, token: str, country="us"):
     url = (f"https://api.spotify.com/v1/artists/"
            f"{artist_id}/top-tracks?country={country}")
     parsed_response: dict = json.loads(
         get_request_sync(url,
                          extra_headers=build_auth_header(token=token)))
     return [
         spotify.Track.from_api_response(json.dumps(x))
         for x in parsed_response["tracks"]
     ]
Exemple #7
0
def search(
    search_term: str,
    token: str,
    search_result_count: int = 5,
    search_type: Type[SearchType] = SearchType.TRACK,
) -> List[typing.Union["spotify.Album", "spotify.Artist", "spotify.Playlist",
                       "spotify.Track", ]]:
    if search_type in [SearchType.SHOW, SearchType.EPISODE]:
        raise NotImplemented
    response: dict = json.loads(
        get_request_sync(
            url=BASE_URL.format(
                urllib.parse.quote(search_term),
                search_type,
                search_result_count,
            ),
            extra_headers=build_auth_header(token),
        ))
    return _parse_search_response(response, search_type)
Exemple #8
0
 def from_id(artist_id: str, token: str):
     url = f"https://api.spotify.com/v1/artists/{artist_id}"
     return Artist.from_api_response(
         get_request_sync(url=url,
                          extra_headers=build_auth_header(token=token)))
Exemple #9
0
 def search_genius(search_term: str):
     return prepare_search_results(
         get_request_sync(
             build_search_url(search_term=search_term), extra_headers=HEADERS
         )
     )
Exemple #10
0
 def resolve_url(url: str) -> str:
     return get_request_sync(
         get_lookup_url(url), extra_headers=build_header()
     )
Exemple #11
0
 def from_id(track_id: str, token: str) -> "Track":
     return Track.from_api_response(
         get_request_sync(
             url=f"https://api.spotify.com/v1/tracks/{track_id}",
             extra_headers=build_auth_header(token=token),
         ))
Exemple #12
0
 def from_id(album_id: str, token: str) -> "Album":
     url = f"https://api.spotify.com/v1/albums/{album_id}"
     return Album.from_api_response(
         get_request_sync(url=url,
                          extra_headers=build_auth_header(token=token)))
Exemple #13
0
def request_referents(referent_list: List[str]) -> str:
    return get_request_sync(
        url=f"https://genius.com/api/referents/multi?ids="
            f"{quote(','.join(referent_list))}",
        extra_headers=REFERENCE_HEADERS,
    ).replace("\xa0", " ")
Exemple #14
0
def request_id(song_id: str) -> str:
    return get_request_sync(
        url=build_url(song_id=song_id), extra_headers=build_header()
    ).replace("\xa0", " ")