پروژه اطلاع رسانی زمان طلوع و غروب آفتاب با استفاده از پایتون، Flask و SQLite

سه شنبه, 16 آبان 1396
Flask Python REST API SQLite

مدتی پیش با سایت https://sunrise-sunset.org آشنا شدم. سایت جالبی هست. کارش این هست که اطلاعات مربوط به وضعیت خورشید رو در مکانهای مختلف زمین ارایه میکنه. مثلا میتونید بفهمید که لحظه طلوع خورشید در شهرتون در فلان روز کی هست. مثلا من توی صفحه اصلی نهران رو جستجو کردم و نتیجه زیر رو به من نشون داد:

image

قشنگیه کارش هم اینه که api فراهم کرده برای گرفتن این اطلاعات و البته کاملا هم مجانی هست. گفتم بد نیست یه کم باهاش سر و کله بزنم ببنیم چی میشه و یه چیزی مثل همین صفحه خودشون (البته خیلی ساده تر J) درست کنم. تصمیم گرفتن برای این کار از پایتون و فریم ورک flaskاستفاده کنم.

اگر به https://sunrise-sunset.org/api سر بزنید میتونید توضیحات مربوط به استفاده از api ها رو ببینید. در ساده ترین حالت میشه یک فراخوانی به این شکل داشت:

https://api.sunrise-sunset.org/json?lat=35.6892&lng=51.3890

که اطلاعات امروز تهران رو میده. خروجی هم به صورت json به شکل زیر برامون میاد:

{
    "results": {
        "sunrise": "3:02:53 AM",
        "sunset": "1:33:26 PM",
        "solar_noon": "8:18:09 AM",
        "day_length": "10:30:33",
        "civil_twilight_begin": "2:36:14 AM",
        "civil_twilight_end": "2:00:05 PM",
        "nautical_twilight_begin": "2:05:47 AM",
        "nautical_twilight_end": "2:30:32 PM",
        "astronomical_twilight_begin": "1:35:47 AM",
        "astronomical_twilight_end": "3:00:31 PM"
    },
    "status": "OK"
}

چیزهایی که ما بهشون احتیاج داریم مقدار فیلدهای sunrise و sunset از داخل results هست. اما همون اول به دو تا نکته در مورد استفاده از api ها بر میخوریم:

  • باید طول و عرض جغرافیایی ارسال بشه یعنی یه جوری باید نام شهر رو به مختصات جغرافیایی تبدیل کرد
  • زمانهای ارسالی همه به UTC هستند که باید به زمان مجلی تبدیل بشن.

برای مشکل اول کلی توی اینترنت گشتم تا یک دیتابیسی یا سایتی پیدا کنم که لیست شهرها و مختصاتشون رو داشته باشه. بلاخره Wikipedia کارم رو راه انداخت. آدرس https://en.wikipedia.org/wiki/List_of_cities_by_longitude حدود هزار تا شهر رو داره. ستونهای Latitude, Longitude, City رو کپی کردم و توی اکسل انداختم تا به صورت یک فایل csv ذخیره کنم. بعد یا برنامه Navicat Preminum از روی فایل csv یه دیتابیس SQLite ساختم. مطمئنا لیست کاملی نیست ولی برای پروژه تستی ما کافیه.

برای حل مشکل دوم هم از ماجولهای datetime و pytz و timezonefinder پایتون استفاده کردم که بعدا توضیح میدم.

پس برنامه ما باید کارهای زیر رو انجام بده:

  • یک url داشته باشه که نام شهر توش باشه
  • از دیتایس مختصات جغرافیایی شهر رو بخونه
  • کوئری بزنه به api سایت sunrise-sunset.org
  • Json ارسالی رو بگیره و اطلاعات مورد نیاز رو بیرون بکشه
  • زمانها رو به وقت محلی تغییر بده
  • یک html ساده بسازه که این اطلاعات رو نشون بده

فعلا تا اینجا رو داشته باشین تا در قسمت بعدی بریم سراغ کد نویسی

Top