مقدمه
به فصل «کار با 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 گیتهاب، لیستی از محبوبترین ریپازیتوریهای پایتون
را دریافت خواهیم کرد.
PYTHON
import requests
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}")
response_dict = r.json()
print(f"Total repositories: {response_dict['total_count']}")
در این کد، ما ابتدا آدرس URL مربوط به API گیتهاب را تعریف میکنیم. این URL شامل پارامترهایی
برای جستجوی ریپازیتوریهای پایتون و مرتبسازی آنها بر اساس تعداد ستارههاست. ما همچنین یک هدر
Accept را برای مشخص کردن نسخه API تنظیم میکنیم.
سپس، با استفاده از requests.get() یک درخواست GET به این آدرس ارسال میکنیم. شیء بازگشتی
r که یک شیء Response است، حاوی اطلاعات پاسخ سرور میباشد. ما با بررسی اتریبیوت
status_code، از موفقیتآمیز بودن درخواست (کد ۲۰۰) اطمینان حاصل میکنیم. در نهایت، با
استفاده از متد json()، بدنه پاسخ را که در فرمت JSON است، به یک دیکشنری پایتون تبدیل
کرده و آن را پردازش میکنیم.
پردازش دیکشنری پاسخ
اکنون که دادهها را در قالب یک دیکشنری پایتون در اختیار داریم، میتوانیم به راحتی به اطلاعات
مورد نیاز خود دسترسی پیدا کنیم.
PYTHON
repo_dicts = response_dict['items']
print(f"Repositories returned: {len(repo_dicts)}")
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 گیتهاب دریافت کردهایم، به صورت یک نمودار تعاملی
و جذاب نمایش خواهیم داد.