Ускоренный курс Python Глава 17- API Hacker News

#python #api #python-requests

#python #API #python-запросы

Вопрос:

 import requests
from operator import itemgetter

#make an API call and store the response
url = 'https://hacker-news.firebaseio.com/v0/item/9884165.json'
r = requests.get(url)
print('Status code:' , r.status_code)

#process info about each submission
submission_ids = r.json()
submission_dicts = []
for submission_id in submission_ids:
    #make separate API call for each submission
    url = ("https://hacker-news.firebaseio.com/v0/item/" 
             str(submission_id)  '.json')
submission_r = requests.get(url)
print(submission_r.status_code)
response_dict = submission_r.json()
submission_dict = {'title' : response_dict['title'],
                   "link" : 'https://hacker-news.firebaseio.com/v0/item?id='
                     str(submission_id)   '.json',
                   'comments': response_dict.get('descendants', 0),
                   }
submission_dicts.append(submission_dict)

submission_dicts = sorted(submission_dicts, key=itemgetter('comments'),
                          reverse=True)

for submission_dict in submission_dicts:
    print("nTitle:", submission_dict['title'])
    print("Discussion link:", submission_dict['link'])
    print("Comments:", submission_dict['comments']) 
  

когда я пытаюсь запустить свой код, я получаю сообщение об ошибке, в котором говорится, что объект ‘NoneType’ не вызывается

 submission_dict = {'title' : response_dict['title'],
TypeError: 'NoneType' object is not subscriptable
  

ожидаемым результатом должно быть название текущей топовой статьи в Hacker News вместе с количеством комментариев и ссылкой на статью.
может кто-нибудь сказать мне, какая часть моего кода пошла не так и как я могу это исправить?

Ответ №1:

Надеюсь, это просто ошибка.

 #process info about each submission
submission_ids = r.json()
print( type( submission_ids ))
  

—> dict — что означает submission_id в следующем цикле for — это ключ, вам нужно значение. Замените submission_id —> submission_ids[submission_id] вот так.

 for submission_id in submission_ids:
    
    #make separate API call for each submission
    url = ("https://hacker-news.firebaseio.com/v0/item/" 
             str(submission_ids[submission_id])  '.json')
  

Комментарии:

1. благодарим вас за это решение. я смог выяснить, что было не так с моим кодом, особенно с блоком for. submission_ids оказался словарем. ключом, который я искал, был ‘id’, но, тем не менее, этот ответ был действительно полезен