pythondjangoapihacker-news-api

HackerNews API extraction error - TypeError: list indices must be integers or slices, not str


Trying to run this code to get the topstories from hacker news is giving me this error 'TypeError: list indices must be integers or slices, not str', the error is generated at

story = data['story']

from multiprocessing import context
from django.shortcuts import render
import requests

# Create your views here.
def index(request):
    #make an api call and save response
    url = f'https://hacker-news.firebaseio.com/v0/topstories.json'
    response = requests.get(url)
    data = response.json()
    story = data['story']
    context = {
        'story': story
    }
    return render(request, 'SyncNews/index.html', context)

What can I do to correct this error as I'm following a video showing a similar project but this error was not seen, I've also tried removing the '' but receive an error 'UnboundLocalError at / local variable 'story' referenced before assignment'

story = data['story']


Solution

  • Your 'data' is a list of numbers, not a dictionary. Depending on whether you want to have one or more numbers from that list you can do one of such options:

    # first number:
    def index(request):
        ...
        data = response.json()
        story = data[0]
        context = {
            'story': story
        }
        return render(request, 'SyncNews/index.html', context)
    
    # list of numbers:
    def index(request):
        ...
        data = response.json()
        context = {
            'story': data
        }
        return render(request, 'SyncNews/index.html', context)