代码如下:
from operator import itemgetter
import requests
# 执行API调用并存储响应。
url = 'https://hacker-news.firebaseio.com/v0/topstories.json'
r = requests.get(url)
print(f"Status code: {r.status_code}")
# 处理有关每篇文章的信息。
submission_ids = r.json()
submission_dicts = []
for submission_id in submission_ids[:30]:
# 对于每篇文章,都执行一个API调用。
url = f"https://hacker-news.firebaseio.com/v0/item/{submission_id}.json"
r = requests.get(url)
print(f"id: {submission_id}\tstatus: {r.status_code}")
response_dict = r.json()
# 对于每篇文章,都创建一个字典。
submission_dict = {
'title': response_dict['title'],
'hn_link': f"http://news.ycombinator.com/item?id={submission_id}",
'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(f"\nTitle:{submission_dict['title']}")
print(f"Discussion link:{submission_dict['hn_link']}")
print(f"Comments:{submission_dict['comments']}")
输出结果如下:
Status code: 200
id: 39658310 status: 200
id: 39656657 status: 200
id: 39658408 status: 200
id: 39657088 status: 200
id: 39658742 status: 200
--snip--
Title:BuildZoom (better way to build custom homes) Is hiring a Growth Associate
Discussion link:http://news.ycombinator.com/item?id=39658497
Comments:0
Title:Iris (Infra-Red, in Situ) Silicon Verification Project Updates
Discussion link:http://news.ycombinator.com/item?id=39657936
Comments:0
Title:SQLite on macOS: Not ACID compliant with the bundled version (2022)
Discussion link:http://news.ycombinator.com/item?id=39657397
Comments:0
Title:Tales of the Catfish God: Earthquakes in Japanese Woodblock Prints (1855)
Discussion link:http://news.ycombinator.com/item?id=39654232
Comments:0
Title:Open Data Description Language
Discussion link:http://news.ycombinator.com/item?id=39656393
Comments:0
Process finished with exit code 0
学习中遇到的困难:
按照书本编写代码,运行到 'comments': response_dict['descendants']这一行代码时就报错并停止运行了,运用断点查看bug原因,为第6个数据的字典里没有descendants这个key所以报错,因此要使其在没有该键时进行容错处理,修改为以下代码:
'comments': response_dict.get('descendants', 0),
以便在键不存在时返回默认值。