مقدمه

در این درس، ما با یک API دیگر، یعنی API وب‌سایت Hacker News، کار خواهیم کرد. Hacker News یک وب‌سایت اخبار اجتماعی است که بر روی علوم کامپیوتر و کارآفرینی تمرکز دارد. API آن به ما اجازه می‌دهد تا به صورت برنامه‌نویسی به مقالات پرطرفدار و اطلاعات مربوط به آنها دسترسی پیدا کنیم. این پروژه به ما کمک می‌کند تا مهارت‌های خود در ارسال درخواست‌های API و پردازش پاسخ‌های JSON را تقویت کنیم.

دریافت شناسه‌های مقالات پرطرفدار

اولین فراخوانی API ما، لیستی از شناسه‌ها (IDs) مربوط به پرطرفدارترین مقالات فعلی را برمی‌گرداند.

Copy Icon PYTHON
import requests
import json

# Make an API call to get top stories.
url = 'https://hacker-news.firebaseio.com/v0/topstories.json'
r = requests.get(url)
print(f"Status code: {r.status_code}")

# Process the list of submission IDs.
submission_ids = r.json()

این کد یک درخواست GET به اندپوینت topstories ارسال کرده و لیستی از شناسه‌های عددی را در متغیر submission_ids ذخیره می‌کند.

دریافت جزئیات هر مقاله

اکنون که شناسه‌ها را در اختیار داریم، باید برای هر شناسه، یک درخواست API جداگانه ارسال کنیم تا جزئیات مربوط به آن مقاله (مانند عنوان، لینک و امتیاز) را دریافت کنیم.

Copy Icon PYTHON
submission_dicts = []
for submission_id in submission_ids[:30]:
    # Make a separate API call for each submission.
    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()
    
    # Build a dictionary for each article.
    submission_dict = {
        'title': response_dict['title'],
        'hn_link': f"http://news.ycombinator.com/item?id={submission_id}",
        'comments': response_dict['descendants'],
    }
    submission_dicts.append(submission_dict)

submission_dicts = sorted(submission_dicts, key=lambda item: item['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']}")

در این کد، ما روی ۳۰ شناسه اول حلقه زده و برای هر کدام یک درخواست API جدید ارسال می‌کنیم. سپس، از پاسخ دریافت شده، یک دیکشنری با اطلاعات مورد نیاز خود می‌سازیم.

در نهایت، ما لیست دیکشنری‌ها را بر اساس تعداد کامنت‌ها (descendants) به صورت نزولی مرتب کرده و اطلاعات مقالات پربحث را در ترمینال چاپ می‌کنیم.

در این درس، ما با کار بر روی یک پروژه عملی دیگر، مهارت‌های خود در استفاده از APIهای وب را تقویت کردیم. با این درس، فصل «کار با APIها» به پایان می‌رسد. شما اکنون می‌توانید به صورت برنامه‌نویسی داده‌ها را از منابع مختلف وب دریافت، پردازش و مصورسازی کنید. در فصل بعدی، به سراغ یکی از محبوب‌ترین حوزه‌های کاربردی پایتون، یعنی «شروع به کار با Django» خواهیم رفت و اولین قدم‌ها را برای ساخت وب اپلیکیشن‌های کامل برخواهیم داشت.