Как искать трек по названию трека и исполнителю в Spotipy - PullRequest
0 голосов
/ 06 августа 2020

Мне нужно получить песню для пользователя на основе названия песни и имени исполнителя (чтобы я получил правильный вариант). Конечная цель - получить идентификатор трека. Вот код, который, как я думал, будет работать:

searchResults = spotifyObject.search(q="artist:" + artist + "track:" + searchQuery, type="track")

Где исполнитель - это имя исполнителя / группы, а searchQuery - это имя трека. Это должно вернуть блок JSON для указанной дорожки c, но вместо этого вернет:

{
"tracks": {
    "href": "https://api.spotify.com/v1/search?query=artist%3AHarry+Stylestrack%3AWatermelon+Sugar&type=track&offset=0&limit=10",
    "items": [],
    "limit": 10,
    "next": null,
    "offset": 0,
    "previous": null,
    "total": 0
}

}

Ответы [ 3 ]

0 голосов
/ 06 августа 2020

Вам не хватает пробела между исполнителем и тегом track:.

ДО

searchResults = spotifyObject.search(q="artist:" + artist + "track:" + searchQuery, type="track")

ПОСЛЕ

searchResults = spotifyObject.search(q="artist:" + artist + " track:" + searchQuery, type="track")
0 голосов
/ 12 августа 2020

Я не знаю, поможет ли это, но в определении функции spotipy по умолчанию используется тип track, поэтому, если вы передадите в запрос и имя исполнителя, и имя песни, вероятность 99% вы получаете то, что ищете. Вы можете попробовать что-то вроде этого:

searchQuery = track + ' ' + artist
searchResults = spotifyObject.search(q=searchQuery)

Получение этого в результате с использованием track="New Rules" и artist="Dua Lipa" (я включил параметры market="US" и limit=1 для целей этого примера):

{
  'tracks': {
    'href': 'https://api.spotify.com/v1/search?query=New+Rules+Dua+Lipa&type=track&market=US&offset=0&limit=1',
    'items': [{
      'album': {
        'album_type': 'album',
        'artists': [{
          'external_urls': {
            'spotify': 'https://open.spotify.com/artist/6M2wZ9GZgrQXHCFfjv46we'
          },
          'href': 'https://api.spotify.com/v1/artists/6M2wZ9GZgrQXHCFfjv46we',
          'id': '6M2wZ9GZgrQXHCFfjv46we',
          'name': 'Dua Lipa',
          'type': 'artist',
          'uri': 'spotify:artist:6M2wZ9GZgrQXHCFfjv46we'
        }],
        'external_urls': {
          'spotify': 'https://open.spotify.com/album/01sfgrNbnnPUEyz6GZYlt9'
        },
        'href': 'https://api.spotify.com/v1/albums/01sfgrNbnnPUEyz6GZYlt9',
        'id': '01sfgrNbnnPUEyz6GZYlt9',
        'images': [{
          'height': 640,
          'url': 'https://i.scdn.co/image/ab67616d0000b2736b915e407b70e121e06fe979',
          'width': 640
        }, {
          'height': 300,
          'url': 'https://i.scdn.co/image/ab67616d00001e026b915e407b70e121e06fe979',
          'width': 300
        }, {
          'height': 64,
          'url': 'https://i.scdn.co/image/ab67616d000048516b915e407b70e121e06fe979',
          'width': 64
        }],
        'name': 'Dua Lipa (Deluxe)',
        'release_date': '2017-06-02',
        'release_date_precision': 'day',
        'total_tracks': 17,
        'type': 'album',
        'uri': 'spotify:album:01sfgrNbnnPUEyz6GZYlt9'
      },
      'artists': [{
        'external_urls': {
          'spotify': 'https://open.spotify.com/artist/6M2wZ9GZgrQXHCFfjv46we'
        },
        'href': 'https://api.spotify.com/v1/artists/6M2wZ9GZgrQXHCFfjv46we',
        'id': '6M2wZ9GZgrQXHCFfjv46we',
        'name': 'Dua Lipa',
        'type': 'artist',
        'uri': 'spotify:artist:6M2wZ9GZgrQXHCFfjv46we'
      }],
      'disc_number': 1,
      'duration_ms': 209320,
      'explicit': False,
      'external_ids': {
        'isrc': 'GBAHT1600310'
      },
      'external_urls': {
        'spotify': 'https://open.spotify.com/track/2ekn2ttSfGqwhhate0LSR0'
      },
      'href': 'https://api.spotify.com/v1/tracks/2ekn2ttSfGqwhhate0LSR0',
      'id': '2ekn2ttSfGqwhhate0LSR0',
      'is_local': False,
      'is_playable': True,
      'name': 'New Rules',
      'popularity': 81,
      'preview_url': 'https://p.scdn.co/mp3-preview/75a1b521de23958a2db9acf4fc8151999ee54bd7?cid=aba114e12c4b474895556922ce1a572d',
      'track_number': 10,
      'type': 'track',
      'uri': 'spotify:track:2ekn2ttSfGqwhhate0LSR0'
    }],
    'limit': 1,
    'next': 'https://api.spotify.com/v1/search?query=New+Rules+Dua+Lipa&type=track&market=US&offset=1&limit=1',
    'offset': 0,
    'previous': None,
    'total': 53
  }
}
0 голосов
/ 06 августа 2020

Я бы порекомендовал попробовать использовать ссылки вызова API, предоставленные Spotify, просмотрите следующую документацию в Spotify Developers (https://developer.spotify.com/documentation/web-api/reference/search/search/). Не забудьте получить токен доступа после входа в свою учетную запись

import request
import pprint

url = "#link_created_through_spotify_api"
r = request.get(url)
dictionary = r.json() # Turn call info into dictionary
print("Status code:", r.status_code) # Print status code to see if the call was successful.

pprint(dictionary)

Модуль pprint позволит распечатать словарь в очень отформатированном и организованном виде. Код состояния 200 означает, что вызов был успешным. Надеюсь, это поможет.

...