مقدمه

به فصل «کار با APIها» خوش آمدید! در فصل‌های گذشته، ما با خواندن داده‌ها از فایل‌های محلی کار کردیم. اما بسیاری از داده‌های جالب و به‌روز در وب و از طریق «رابط‌های برنامه‌نویسی کاربردی» یا Application Programming Interfaces (APIs) در دسترس هستند. یک API وب، مجموعه‌ای از قوانین و تعاریف است که به برنامه‌های مختلف اجازه می‌دهد تا با یکدیگر ارتباط برقرار کرده و داده رد و بدل کنند.

در این فصل، ما یاد می‌گیریم که چگونه با ارسال درخواست‌های برنامه‌نویسی شده به یک API، داده‌ها را به صورت خودکار دریافت و پردازش کنیم. ما از API وب‌سایت GitHub به عنوان مثال استفاده خواهیم کرد تا اطلاعات مربوط به پروژه‌های برنامه‌نویسی محبوب را به دست آوریم. برای این کار، از کتابخانه قدرتمند requests استفاده خواهیم کرد.

نصب کتابخانه requests

requests یک کتابخانه خارجی است که کار ارسال درخواست‌های HTTP را در پایتون بسیار ساده می‌کند. برای نصب آن، از pip در محیط مجازی خود استفاده می‌کنیم.

(api_env) $ pip install requests
                    

ارسال یک درخواست API ساده

یک «فراخوانی API» یا API Call، یک درخواست است که به یک آدرس URL خاص روی سرور ارسال می‌شود. ما با ارسال یک درخواست GET به API گیت‌هاب، لیستی از محبوب‌ترین ریپازیتوری‌های پایتون را دریافت خواهیم کرد.

Copy Icon PYTHON
import requests

# Make an API call and store the response.
url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'
headers = {'Accept': 'application/vnd.github.v3+json'}
r = requests.get(url, headers=headers)
print(f"Status code: {r.status_code}")

# Store API response in a variable.
response_dict = r.json()

# Process results.
print(f"Total repositories: {response_dict['total_count']}")

در این کد، ما ابتدا آدرس URL مربوط به API گیت‌هاب را تعریف می‌کنیم. این URL شامل پارامترهایی برای جستجوی ریپازیتوری‌های پایتون و مرتب‌سازی آنها بر اساس تعداد ستاره‌هاست. ما همچنین یک هدر Accept را برای مشخص کردن نسخه API تنظیم می‌کنیم.

سپس، با استفاده از requests.get() یک درخواست GET به این آدرس ارسال می‌کنیم. شیء بازگشتی r که یک شیء Response است، حاوی اطلاعات پاسخ سرور می‌باشد. ما با بررسی اتریبیوت status_code، از موفقیت‌آمیز بودن درخواست (کد ۲۰۰) اطمینان حاصل می‌کنیم. در نهایت، با استفاده از متد json()، بدنه پاسخ را که در فرمت JSON است، به یک دیکشنری پایتون تبدیل کرده و آن را پردازش می‌کنیم.

پردازش دیکشنری پاسخ

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

Copy Icon PYTHON
# Explore information about the repositories.
repo_dicts = response_dict['items']
print(f"Repositories returned: {len(repo_dicts)}")

# Examine the first repository.
repo_dict = repo_dicts[0]
print(f"\nKeys: {len(repo_dict)}")
for key in sorted(repo_dict.keys()):
    print(key)

در این بخش، ما ابتدا به لیست دیکشنری‌های مربوط به هر ریپازیتوری (که در کلید items قرار دارد) دسترسی پیدا می‌کنیم. سپس، برای بررسی ساختار داده، کلیدهای موجود در دیکشنری اولین ریپازیتوری را چاپ می‌کنیم. این کار به ما کمک می‌کند تا بفهمیم چه اطلاعاتی در دسترس است.

با بررسی کلیدها، می‌توانیم اطلاعات مهمی مانند نام، مالک، تعداد ستاره‌ها، و آدرس URL هر ریپازیتوری را استخراج کرده و از آنها برای مصورسازی یا تحلیل‌های بعدی استفاده کنیم.

در این درس، با اصول اولیه کار با APIهای وب با استفاده از کتابخانه requests در پایتون آشنا شدیم. دیدیم که چگونه می‌توان با ارسال یک درخواست GET و پردازش پاسخ JSON، به حجم عظیمی از داده‌های موجود در وب دسترسی پیدا کرد. در درس بعدی، به «مصورسازی ریپازیتوری‌ها با استفاده از Plotly» خواهیم پرداخت و داده‌هایی را که از API گیت‌هاب دریافت کرده‌ایم، به صورت یک نمودار تعاملی و جذاب نمایش خواهیم داد.