در این نوشته و دو نوشته پیش رو می خواهیم در لاراول کنترل گری تعریف کنیم که داده های وضعیت کنونی آب و هوا را از یک منبع وب به فرمت JSON (یا Javascript Object Notation) دریافت کند و پس از پالایش داده به دست آمده بر اساس نام شهر، وضعیت کنونی آب و هوا را به همراه یک تصویر نمایش دهد. هدف از این سری مطلب ها تنها آموزش ایجاد و نوشتن کنترل گرها در لاراول نیست، بلکه می خواهیم با جنبه های دیگری از زبان پی اچ پی آشنا شویم. در ابتدا فرمت و کاربرد داده های JSON را آموزش می دهیم و سپس چندین تابع مختلف پی اچ پی را یاد خواهیم داد.

نمایش داده ها به فرمت JSON

JSON مفهومی است که از زبان برنامه نویسی جاوا اسکریپت به دیگر زبان ها ورود پیدا کرده است. در واقع امروزه JSON دیگر یک فرمت (ساختار) داده برای زبان جاوا اسکریپت نیست بلکه یک راهکار برای تبادل اطلاعات میان سیستم های مختلف است که این سیستم ها از نظر سیستم عامل و زبان برنامه نویسی مستقل از یکدیگر هستند.

بنابراین JSON این امکان را فراهم می کند تا داده ها را بر روی وب و از طریق یک آدرس URL میان دیگران به اشتراک بگذاریم تا دیگران بتوانند مستقل از زبان برنامه نویسی، داده های JSON را بخوانند و از آنها درون برنامه های خود استفاده کنند.

در واقع JSON اجازه می دهند تا سیستم هایی که متسقل از یکدیگر توسعه داده شده اند بتوانند با یکدیگر تعامل داشته باشند و میان خود داده ها را تبادل (Exchange) کنند. توجه کنید که این سیستم ها مستقل از یکدیگر و غالبا با زبان برنامه نویسی متفاوت نوشته شده اند و همچنین بر روی پلتفرم های متفاوت در حال اجرا شدن هستند.

کد زیر نمونه ساده ای داده های به فرمت JSON را نشان می دهد. داده ها به صورت جفت کلید و مقدار میان دو آکولاد باز و بسته قرار می گیرند. هر کلید معمولا به صورت یک رشته است که یک داده به آن انتساب داده می شود. نوع هر مقدار انتسابی می تواند از انواع معتبر مانند مقدار عددی، رشته، آرایه و حتی یک JSON دیگر باشد.

به طور مثال اولین عنصر درون JSON بالا دارای کلیدی به نام coord است که مقدار آن مجدد یک JSON دیگر است که خودش دارای دو عنصر با کلیدهایی به نام lon و lat است که مقدار آنها از نوع عددی است. هدف این است که چنین فرمتی را بخوانیم و سپس بر اساس نیاز به هر یک از عنصرهای آن دسترسی پیدا و در برنامه خودمان استفاده کنیم.

دریافت وضعیت آب و هوا

در این مطلب می خواهیم از طریق api متن باز سایت OpenWeather، وضعیت اب و هوا را بر اساس نام شهر، پیدا کنیم. اولین کاری که باید انجام دهید، ثبت نام در سایت OpenWeather.org است. پس از آن باید از طریق این لینک درخواست API KEY کنید. از این API KEY درون برنامه برای انجام احراز هویت (authentication) استفاده می شود.

OpenWeather.org اطلاعات مختلفی از وضعیت آب و هوا را در اختیار کاربران قرار می دهد و می توانیم از طریق اطلاعات مختلفی مانند نام شهر (Tehran) یا نام شهر و کد کشور (Tehran,Ir) و یا از طریق طول و عرض جغرافیایی (longitude and latitude) می توانیم اطلاعات را بدست آوریم.

در صفحه API های سایت می توانید انواع اطلاعات قابل بدست آمدن در مورد وضعیت آب و هوا را ببینید. در این مطلب می خواهیم بر اساس نام شهر، وضعیت فعلی آب و هوا (current weather data) را پیدا کنیم، پس باید به این لینک بروید.

مطابق شکل زیر در صفحه وضعیت فعلی آب و هوا می بینید که می توانیم از روش های مختلفی مانند نام شهر، شناسه (یا ID) شهر و ناحیه جغرافیایی، وضعیت فعلی آب و هوا را پیدا کنیم. همچنین همانطور که در شکل زیر می بینید برای هر نوع از این روش ها یک لینک با رشته کوئری هایی منحصر به فرد وجود دارد.

به طور مثال برای دریافت از طریق نام شهر، باید از لینک زیر استفاده کنید. نکته مهمی که وجود دارد این است که حتما باید API KEY دریافتی را از طریق کلید appid به تمامی لینک ها اضافه شود، پس فرمت کلی لینک دریافت وضعیت آب و هوا از طریق نام شهر به یکی از صورت های زیر خواهد بود.

بنابراین پس از ثبت نام و دریافت API KEY، با توجه به الگوی دو آدرس بالا باید در رشته کوئری API KEY بدست آمده را به عنوان مقدار کلید appid تنظیم کنید. همچنین باید پس از کلید q در رشته کوئری، نام شهر دلخواه خود را قرار دهید. آدرس زیر مثالی از ترکییب کلیدها و مقادیر آنها در آدرس را نشان می دهد.

بنابراین گام اول آماده سازی لینک دریافت داده های وضعیت آب و هوا است که به فرمت json نمایش داده می شوند. به طور مثال فرض کنید می خواهیم وضعیت فعلی شهر تهران را بدست آوریم پس با توجه به اولین فرمت لینک بالا و با در اختیار داشتن API KEY باید لینک را به صورت زیر آماده کنیم. لطفا به جای YOUR_API_KEY رشته API KEY خودتان را جایگزین کنید.

رشته کوئری

رشته کوئری بخشی از آدرس URL است که داده هایی را مشخص می کند که قرار است آنها را به برنامه تحت وب یا وب سایت ارسال کنیم. در برنامه نوسی وب سایت ها و برنامه های تحت وب به دو روش می توانیم داده ها را به وب سایت ارسال کنیم

۱ – از طریق تعیین رشته کوئری درون آدرس URL

۲ – از طریق فرم های اچ تی ام ال درون صفحه وب

رشته کوئری شامل یک یا چند جفت کلید و مقدار است که هر یک داده مجزایی را مشخص می کنند. خط زیر نمونه ای از رشته کوئری را نشان می دهد. همانطور که می بینید اولین جفت کلید و مقدار پس از علامت سوال قرار می گیرد.

زمانی که آدرس بالا را اجرا می کنیم، در واقع به وب سایت درخواست نمایش مطلب (Post) با شناسه ۱۰۰ را داده ایم. در واقع از طریق آدرس URL و با تعیین کلید id و مقدار ۱۰۰ برای آن، درخواستی را به وب سایت داده ایم که وب سایت باید در جدول مطلب ها (Post Table) باید به دنبال مطلبی با شناسه ۱۰۰ بگردد.

همین مفهوم نیز در لاروال و از طریق نوشتن مسیرها وجود دارد. قطعه کد زیر قطعه کدی را نشان می دهد که در آن مسیری را نوشته ایم که الگوی آدرس URL بالا را پیاده سازیمی کند. در واقع می خواهیم مسیری به نام post را بنویسیم که یک پارامتر اجباری را به عنوان شناسه عددی مطلب دریافت می کند.

در کد بالا در ابتدا توسط تابع ()is_numeric بررسی می شود که آیا مقداری که برای پارامتر postId وارد شده است یک مقدار عدد صحیح باشد. در صورتی که مقدار عدد صحیح باشد، پس ابتدا با کلاس مدل مربوط به جدول مطلب ها ارتباط برقرار می شود. در صورتی که نتیجه اجرا درست باشد، محتوای مطلب نشان داده می شود و در غیر این صورت خطا نشان داده می شود. در حالت دیگر اگر شناسه غیر عدد صحیح (مثلا رشته abc) باشد، پس بازهم باید خطا نشان داده شود.

رشته کوئری می تواند دارای چندین جفت کلید و مقدار باشد که هر یک از جفت های دوم و سوم به بعد با یک علامت & از هم جدا می شوند. کد زیر نمونه مثالی را نشان می دهد که در آن دو مقدار apple و red از طریق کلیدهای name و color به وب سایت ارسال می شوند.

فرمت کلی رشته کوئری

دسترسی به رشته کوئری در پی اچ پی

در پی اچ پی یک آرایه سراسری به نام SERVER_$ وجود دارد که به صورت آرایه انجمنی است. برای دسترسی به بخش رشته کوئری درون مسیر فعلی که کاربر درخواست کرده است، باید از کلید QUERTY_STRING استفاده کنید. به طور مثال فرض کنید کاربر آدرس http://127.0.0.1:8000/q.php?name=amir&from=tehran را در مرورگر اجرا کرده باشد، پس برای دسترسی به آن باید طبق قطعه کد زیر استفاده کنیم.

توجه کنید در مثال بالا کد زیر را درون فایلی به نام q.php نوشته ایم که به دنبال آن رشته کوئری قرار گرفته است. در واقع دسترسی به رشته کوئری و از طریق متغیر سراسری SERVER_$ درون فایل q.php تعریف شده است.

بنابراین در قطعه کد بالا متغیر queryString$ شامل بخش رشته کوئری از آدرس فعلی است که کاربر آنرا در مرورگر خود نوشته است که با توجه به نمونه URL که در بالا گفتیم مقدار متغیر برابر با name=amir&from=tehran است.

مطالعه در مورد آرایه سراسری SERVER_$

دسترسی به مقدار هر کلید در رشته کوئری

آرایه سراسری SERVER_$ خود رشته کوئری را نمایش می دهد ولی برای دسترسی به مقدار رشته کوئری باید از آرایه سراسری دیگری به نام GET_$ استفاده کنیم. همانطور که توضیح داده ایم یکی از روش های ارسال درخواست به وب سایت ها، روش GET از پروتکل HTTP است که از طریق آدرس URL انجام می شود.

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

فرض کنید وب سایت شما قادر است که از طریق URL و تعیین رشته کوئری شامل کلیدهایی به نام empid و ename شناسه و نام کارمندی را بدست آورد و سپس از این دو مقدار برای اجرای یک کوئری بر روی پایگاه داده استفاده کند تا محل زندگی و میزان حقوق آنرا در صفحه وبن مایش دهد پس باید اولا کاربر در آدرس URL نوشته شده رشته کوئری را به صورت زیر تعیین کند.

سپس مطابق قطعه کد زیر باید بررسی کنید که آیا هر دو کلید در رشته کوئری تنظیم شده اند و دارای مقدار نیز هستند. در صورتی که هر دو مقداربه درستی وجود داشته باشند، پس دو متغیر ایجاد می شوند که از آنها برای مقدار دهی و ایجاد یک کوئری SQL استفاده می شود.

تابع ()isset برای این استفاده می شود که بررسی کنیم که آیا یک متغیر تنظیم و تعریف شده است. به عبارت دیگر وجود یاد عدم وجود متغیر را بررسی می کند. تابع ()empty بررسی می کند که آیا متغیر مقداردهی شده است یا نه. تابع دیگری به نام ()count وجود دارد که از آن برای نمایش تعداد المان های درون یک آرایه استفاده می شود و نباید آنرا با تابع ()empty اشتباه بگیرید.

به یاد داشته باشید درخواست GET از طریق متد ()get از کلاس Route ایجاد می شوند. رشته کوئری نیز از ترکیب نام مسیر و پارامترها ایجاد خواهد شد. بنابراین قطعه کد زیر مسیر بالا را پیاده سازی می کند که شناسه و نام کارمند را از طریق آدرس دریافت می کند.

از قطعه کد بالا مشخص است که می توانیم بیش از یک پارامتر را در مسیرهای درون لاراول تعیین کنیم که در این صورت باید دو آرگومان ورودی به تابع بینام یا متد کلاس کنترل گر ارسال شوند. در مطلب بعدی چگونگی نوشتن مسیر (Route) و کلاس کنترل گر و بدست آوردن داده های JOSN مربوط به وضعیت آب و هوا را توضیح داده ایم.

دانلود کد PHP Json

مطالعه بیشتر در مورد آرایه سراسری GET_$

مطالعه بیشتر در مورد تابع ()isset

مطالعه بیشتر در مورد تابع ()empty

مطالعه بیشتر در مورد تابع ()count