"آن کس که نداند و بداند که نداند" هستم
آموزش گرفتن اطلاعات با API
تا حالا براتون سوال شده که مثلا چجوری سایت ها یا برنامه ها یک اطلاعاتی مثل قیمت دلار و ... رو میگیرن؟
حالا ما میخوایم متوجه بشیم که چگونه و از کجا این اطلاعات رو به ما نشان میدهند.
وب سرویس(API) چیست؟
وب سرویس(API) یک صفحه از یک سایت است که در آن اطلاعاتی در قالب فایل JSON ارائه میشود.
برنامه نویسان با همین فایل، اطلاعات مورد نظرشان را دریافت میکنند.
جیسون(JSON) چیست؟
جیسون معادل اختصاری عبارت JavaScript Object Notation به معنی «نمادگذاری اشیا در جاوا اسکریپت» است. جیسون یک قالب استاندارد باز است که امکان تبادل دادهها در وب با استفاده از جفتهای خصوصیت-کلید را ممکن ساخته است. این توضیح ممکن است تا حدودی پیچیده به نظر بیاید؛ پس در ادامه آن را اندکی بیشتر توضیح میدهیم.
فرض کنید که شخصی یک بالون دارد و شما آن را میخواهید. یکی از روشهای ارسال بالون این است که فرد دیگر عملاً آن را بستهبندی کند و از طریق پست برای شما ارسال نماید. اما یک روش دیگر آن است که فرد خصوصیات بالون خود را برای شما توضیح دهد تا شما بتوانید همان بالون را بدون دسترسی عملی فیزیکی به آن، به طور دقیق بازسازی نمایید.
بالون آن فرد میتواند خصوصیاتی از قبیل جنس، رنگ، قطر و گاز داشته باشد. این چهار جفت خصوصیت کلیدی برای این است بتوانید بالون را تجسم کنید.
جیسون نیز در زمان ارسال دادهها بر روی اینترنت به همین ترتیب عمل میکند.
مزیت جیسون چیست؟
جیسون نخستین قالبی نیست که از جفتهای خصوصیت-کلید برای تبادل دادهها بر روی اینترنت استفاده میکند. فناوریهای مختلفی در این زمینه وجود دارند که ممکن است حتی برخی از آنها مانند XML را نیز بشناسید. جیسون و ایکسامال تقریباً به روش مشابهی عمل میکنند. پس چرا باید جیسون را بر ایکسامال ترجیح بدهیم؟
در وب امروز بارگذاری asynchronous (غیر همزمان و یا در مواردی نامتقارن نامیده میشود) دادهها بسیار مهم است. به بیان دیگر صفحههای وب میخواهند قادر باشند تا دادهها را بدون نیاز به بارگذاری مجدد کل صفحه به کاربر ارسال نمایند. نتیجه چنین امکانی، ایجاد تجربه مرور روانتر و مطلوبتر برای کاربر است. جیسون برای ارسال و دریافت غیر همزمان دادهها عالی است، زیرا ساده است و استفاده از آن آسان است.
اما ایکسامال نیز همین کار را انجام میدهد! پس چرا برخی افراد جیسون را به آن ترجیح میدهند؟
یکی از پاسخهای ممکن به این سؤال شاید در نام جیسون نهفته باشد: نمادگذاری اشیای جاوا اسکریپت. جیسون معمولاً همراه با جاوا اسکریپت شناسایی میشود که یکی از رایجترین زبانهای برنامهنویسی دنیا است. از آنجا که جیسون زیرمجموعهای از جاوا اسکریپت است، برای کسانی که جاوا اسکریپت را میدانند نیاز به یادگیری موارد زیادی در زمان استفاده از جیسون وجود نخواهد داشت.
دلیل دیگر برای این محبوبیت جیسون آن است که خوانایی آن بالاتر از ایکسامال است. البته وقتی برای مدتی برای با ایکسامال کار کنید، استفاده از آن را نیز آسان خواهید یافت؛ اما نگاهی گذرا به فایل ایکسامال کاربر را با انبوهی از تگها و موارد توضیحی روبرو میکند. در مقابل جیسون تمیزتر است و افراد مبتدی آن راحتتر درک میکنند. از طرف دیگر با انواع دادههای مقدماتی خود تا حدودی انعطافپذیری بیشتری ارائه میکند.
ظاهر جیسون چگونه است؟
جیسون تنها یک سری از جفتهای خصوصیت است که میتوان در صورت لزوم آنها را به صورت تو در تو نوشت. برای مثال اگر دادههای ما در مورد یک شخص باشند، این شخص را میتوان به وسیله دادههای جیسون زیر نمایش داد:
هر خط با یک خصوصیت آغاز میشود و با علامت دو نقطه (:) ادامه مییابد، سپس مقدار خصوصیت ذکر میشود. این مقدار همان طور که در مورد خصوصیت شماره تلفن در مثال فوق مشاهده میکنید، میتواند یک آرایه باشد. همچنین مقدار یک خصوصیت همان طور که در مورد خصوصیت آدرس در مثال فوق میبینید، میتواند خود جفتهایی دیگر از خصوصیت-کلید باشد. این حالت یک شیء نامیده میشود.
برای مقایسه در ادامه همان دادهها با استفاده از زبان XML تنظیم شدهاند:
همانطور که میبینیم، فایل XML شباهت زیادی به HTML دارد و در مقایسه با JSON، خوانایی کمتری دارد.
چطور از یک API، اطلاعات یک فایل JSON را بگیریم؟
وبسرویس های(API) زیادی وجود دارند که میتوان از آن ها اطلاعات گرفت. ما برای شروع به کار، وبسرویس قیمت دلار را انتخاب کردیم.
وبسرویس قیمت دلار: https://api.tgju.online/v1/data/sana/json
وارد لینک بالا شوید. بعد از اینکه وارد لینک بالا شدید، با یک فایل JSON مواجه میشود:
حالا نوبت اینه که از این فایل جیسون، اطلاعات لازممون رو استخراج کنیم.
import requests
r = requests.get('https://api.tgju.online/v1/data/sana/json')
print(r.json())
اگر کد بالا را اجرا کنید، همان اطلاعات عکس بالا برای شما نمایش داده میشود. حالا به نوبت توی فایل جیسون جلو میرویم. یعنی ابتدا وارد "sana_buy_usd" میشویم. سپس وارد "p" میشویم و مقدار "p" را چاپ میکنیم. یعنی "122889" را چاپ میکنیم.
import requests
r = requests.get('https://api.tgju.online/v1/data/sana/json')
print(r.json()['sana']['data'][0]['p'])
مطلبی دیگر از این انتشارات
آموزش سوکت در پایتون
مطلبی دیگر از این انتشارات
واقعا فقط فریمورک بزرگ تر ها خوبن؟!
مطلبی دیگر از این انتشارات
نوشتن یک اسکریپت کوچولو با پایتون