hadi mirzaie
hadi mirzaie
خواندن ۳ دقیقه·۳ سال پیش

آموزش ساخت ویجت آب و هوا با php و open weather map api

خب ابتدا با معرفی open weather map شروع میکنم. این وبسایت خدمات جالبی در زمینه هواشناسی ارایه میده، از اطلاعات آب و هوا گرفته تا نقشه های زمین شناسی، دما و نقشه های مرتبط با زمین های کشاورزی. در این پست قصد دارم به معرفی api این وبسایت بپردازم.

این وبسایت Api های مختلفی داره و اغلب این Api ها پلن رایگان دارند و در صورت نیاز به خدمات بیشتر نیاز به سابسکرایب پولی هست. این Api خوبه چون:

۱- رایگانه

۲ـ از زبان فارسی پشتیبانی میکنه.

وارد وبسایت openweather.org بشید. ثبت نام کنید و از طریق ایمیلی که براتون ارسال می شه، حساب کاربری تون رو فعال کنید. پس از ورود به وبسایت، وارد بخش API KEYS از منو بالا بشید:

در این بخش همون طوری که میبینید به صورت دیفالت یک api key بهتون داده که میتونید برای درخواست ازش استفاده کنید ولی علاوه بر این کلید، کلی کلید دیگه هم میتونید بسازید و نام دلخواه براش بذارید. ما به این کلید برای درخواست دادن به سرور و متعاقبا دریافت پاسخ نیاز داریم.

خب حالا بیایید بریم سراغ کدهامون، یه فایل ایجاد کنید به نام weather.php و کدهای زیر رو داخلش بنویسید:

$appkey = "your API KEY";

$cityname = "Tehran";

$urlapi = "api.openweathermap.org/data/2.5/weather?q=" . $cityname . "&lang=fa&units=metric&appid=" . $appkey ;

خب بذارید این قسمت از کد رو بهتون توضیح بدم در این قسمت ما ساختار لینکی که قراره بهش درخواست بدیم رو ایجاد کردیم بر اساس همون دستور عمل های خود وبسایت. کلید Api مون رو در یک متغییر تعیین کردیم و یک متغییر هم نام شهر مون رو مشخص کردیم، میتونه نام کشور یا هر منطقه قابل جست و جو باشه. اگر توجه کرده باشید لینک ما دو تا پارامتر اضافی هم داره یکی lang که برابر با fa قرار گرفته همون زبان فارسی خودمونه که بهش میگیم هر مقدار از نوع استرینگی رو که بر میگردونی به زبان فارسی بر گردون و پارامتر دوم units هست که برابر قرارش دادیم با metric ، اینجوری مقادیر رو بر مبنای متریک حساب میکنه و بر میگردونه واسه ما یعنی مثلا وزش باد رو بر مبنای کیلومتر بر میگردونه و دما رو بر مبنای سانتی گراد بر میگردونه، نه فارنهایت !!!

در همین فایل کدها رو ادامه میدیم:

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_URL, $urlapi );
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response);

خب قسمت بعدی کدهای ما اینه که با استفاده از یک اکستنشن در زبان php بیاییم به لینک مورد نظرمون درخواست از نوع HTTP ارسال کنیم. این اکستنشن نامش Curl هست. خب بیایید ببینیم چکار کردیم، خط اول در واقع یک سشن کرل ایجاد کردیم برای استفاده. در خط دوم برای سشن کرل، آپشن در نظر گرفتیم آپشن نخست ما مقدار برگشتی رو به شکل استرینگ بر میگردونه ، آپشن دوم لینک رو بهش نسبت میدیم، و در نهایت از طریق curl_exec به اجراش میذاریم و سشن کرل رو میبندیم. از طریق jeson_decode مقدار برگشتی رو کدشکنی میکنیم تا به شکل یک شی قابل استفاده در php در بیاد.

در نهایت متغییرهای خودتون رو تعیین کنید و از شی برگشتی data برای دسترسی به داده های مورد نظر خودتون استفاده کنید:

$cityname = $data->name;
$status = $data->weather[0]->description;
$humidty = $data->main->humidity;
$wind = $data->wind->speed;
$temp = $data->main->temp;
$feels = $data->main->feels_like;

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

حواستون باشه ما api keys رو امن سازی نکردیم. میتونید از طریق یک پکیج به نام dotenv در php اقدام به امن سازی کلیدهای خود یا هر داده حساس دیگه بدون ایجاد استثنا در فایل htaccess بکنید. اگر علاقه مند به امن سازی هستید میتونید آموزش تصویری همین پست رو از طریق لینک زیر در یوتیوب مسترربیت ببینید:

کلیک کنید. در پایان ویدیو، شیوه امن سازی کلید API رو توضیح دادم.

ممنون از این که تا پایان این آموزش با من همراه بودید ....


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