Я могу сделать успешный запрос в Spotify, ищущий исполнителя. Моя проблема в том, что я хочу вытащить URL-адрес изображения исполнителя из ответа JSON.

Каждый раз, когда я пытаюсь получить URL, я получаю сообщение об ошибке

TypeError: list indices must be integers or slices, not str

Мой код выглядит следующим образом:

import requests
import pyCiscoSpark
import json
import sys

def _url(path):
    return 'https://api.spotify.com/v1/search' + path

artist = 'AC/DC'

spotifyR = requests.get(_url('?q={:s}&type=artist'.format(artist)))
spotifyJson = spotifyR.json()
req = spotifyJson['artists']['items']['images']['url']
print(req)

Мне нужен URL-адрес изображений в dict, чтобы я мог выбрать правильный размер изображения, которое есть в Spotify.

-2
Euan McGregor 4 Июн 2016 в 01:10
1
Очевидно, по крайней мере, один уровень ответа JSON представляет собой массив (который становится списком), а не объект (который становится словарем), поэтому вам нужно использовать числовой индекс, а не строковый ключ.
 – 
jonrsharpe
4 Июн 2016 в 01:12

2 ответа

Вы можете визуально взглянуть на объект,

from pprint import pprint
pprint(spotifyJson)

Действительно, как указал jonrsharpe, «items» - это список, поэтому вы либо перебираете его, либо выбираете один элемент. «Изображения» - это тоже список.

images = spotifyJson['artists']['items'][0]['images']
for img in images:
  print(img['width'])
  print(img['height'])
  print(img['url'])
1
Abdullah Barrak 4 Июн 2016 в 01:22
Спасибо, ваше предложение помогло!
 – 
Euan McGregor
4 Июн 2016 в 22:45

Значение ключа 'items' в ответе json - это список словарей. Вы можете сделать что-то вроде:

   images = spotifyJson['artists']['items'][0]['images']
   for img in images:
       print img

Это напечатает информационный словарь для всех изображений. Затем вы можете обработать, какой из URL-адресов вы хотите оттуда :)

0
mng 4 Июн 2016 в 01:23