ساخت برنامه‌ای که به شما کمک می کند ماهی بیشتری بگیرید!

منتشر‌شده در: towardsdatascience به تاریخ ۲۵ می ۲۰۲۱
لینک منبع : Building An App That Helps You Catch More Fish

من به تازگی شروع به ماهیگیری در آب‌های شیرین کرده‌ام. هر کسی که در حال ماهیگیری بوده‌است می‌داند که این کار می‌تواند یک ضربه یا خطا باشد، به خصوص اگر شما به‌تازگی این ورزش را شروع کرده‌ باشید و یا در یک مکان ناآشنا ماهیگیری کنید. هیچ‌کس نمی‌خواهد «دچار مشکل» شود. خوشبختانه، پرورش ماهی این کار را آسان‌تر کرده‌است.

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

در ایالات‌متحده، به‌روزرسانی های موجودی، اغلب به صورت آنلاین توسط بخش‌های حفاظت یا محیط‌زیست دولت ایجاد می‌شوند. معمولا، افراد وقتی می‌بینند که انبار شده‌اند، به مکان‌هایی هجوم می‌آورند و در چند روز آینده این مکان‌ها به شدت صید خواهند شد.

این باعث شد که فکر کنم. چه اتفاقی می‌افتاد اگر من یک برنامه کاربردی می‌ساختم که می‌توانست وب سایت را خراب کند و هر زمان که یک به‌روزرسانی روی پرورش رخ می‌داد به من هشدار دهد؟

با توجه به این موضوع، من تصمیم گرفتم یک اسکریپت پایتون بسازم و آن را در Heroku مستقر کنم تا بر روی یک برنامه خودکار اجرا شود و از طریق ایمیل هر زمان که یک به‌روزرسانی جدید ذخیره‌سازی شناسایی می‌شود، به من اطلاع دهد. هدف من لزوما این نیست که اول تمام ماهی‌های دریاچه‌های ASAP را خالی کنم، بلکه فقط این است که از هر گونه به‌روزرسانی به جای این که لازم باشد به یاد داشته باشم که آن را چک کنم، آگاه باشم. به این ترتیب، اگر بیرون بروم و اطلاع بگیرم، می‌توانم کمی ماهیگیری کنم و از زمان روز لذت ببرم!

در زیر، من نحوه ساخت این برنامه و نحوه کار آن را به شما نشان خواهم داد تا بتوانید برنامه‌های مشابهی ایجاد کنید.

داده‌های هدف

به‌روزرسانی‌هایی که من در حال بررسی آن‌ها خواهم بود، گزارش‌های مربوط به ذخایر احتیاطی کانکتیکات هستند که توسط دپارتمان CT انرژی و حفاظت از محیط‌زیست (DEEP) منتشر شده‌اند. این گزارش در جداول با فرمت PDF ذخیره می‌شود و در وب سایت آن‌ها میزبانی می‌شود.

شکل ۱. صفحه ۱ از گزارش CT DEEP Trout Stocking
شکل ۱. صفحه ۱ از گزارش CT DEEP Trout Stocking

نکته: استخراج داده به وب سایت CT gov تحت سیاست‌ها اجازه می‌دهد.

تاریخی که در بالای گزارش ذکر شده است به عنوان شاخص ما در مورد به روز شدن یا نبودن گزارش از زمان آخرین ویرایش PDF به کار می‌رود.

در زیر هر صفحه یک جدول طولانی وجود دارد که تمام بدنه‌های آبی خاص، موقعیت آن‌ها و جزئیات مربوط به آخرین باری که ذخیره شده‌اند را لیست می‌کند.

خواندن در داده‌های PDF

اولین کاری که انجام خواهیم داد ایجاد یک فایل متنی ۱ خطی last_stocked_date.txt است که آخرین تاریخ به‌روزرسانی شده PDF را ذخیره می‌کند. می‌توانیم تاریخ 5/1/2021 را در فایل قرار دهیم تا با آن شروع کنیم. این مسئله به ما این امکان را می‌دهد که داده‌ها را بخوانیم و آن‌ها را در یک متغیر LAST_STOCK_DATE در برنامه اصلی خود ذخیره کنیم.

سپس، می‌خواهیم PDF فعلی را از وب سایت دانلود و ذخیره کنیم. برای بررسی اینکه آیا فایل PDF به روز شده‌است یا خیر، از pdfplumber برای باز کردن فایل و استخراج تمام متن تنها از صفحه اول استفاده می‌کنیم.

با استفاده از برخی دستکاری‌های رشته، ما تاریخ را از آن متن بر اساس زیر مجموعه \"STOCKING UPDATE AS OF\" استخراج خواهیم کرد.

بررسی برای به‌روزرسانی های اخیر

در اینجا ما برنامه اصلی خود را آغاز می‌کنیم و بررسی می‌کنیم که آیا تاریخ PDF نسبت به آخرین تاریخی که بررسی و ذخیره کردیم، تاریخ متفاوتی است یا خیر. اگر چنین باشد، این برنامه داده‌ها را از جداول در ۸ صفحه اول استخراج خواهد کرد و آن را در یک مجموعه داده ذخیره خواهد کرد. ما تنها باید ۸ صفحه اول را استخراج کنیم زیرا این موارد تمام مکان‌هایی را که ذخیره شده‌اند به ما می‌دهند (هر چیزی فراتر از آن، داده‌های تکراری است).

سپس، یک ستون جدید در فریم دادهlast_update خود ایجاد می‌کنیم که تنها آخرین بار یک مکان خاص را استخراج می‌کند و آن را به نوع datetime تبدیل می‌کند. این مسئله به ما این امکان را می‌دهد تا برای مثال پوشش داده را توسط مکان‌هایی که در ۳ روز گذشته ذخیره شده‌اند، فیلتر کنیم.

علاوه بر این، ما می‌خواهیم به یاد داشته باشیم که فایل متنی ذخیره‌سازی خود را به‌روزرسانی کنیم. این امر تضمین می‌کند که دفعه بعد که سند ما اجرا می‌شود، تنها در صورتی به پردازش ادامه خواهد داد که تاریخ جدیدی شناسایی شود.

ارسال هشدار نامه الکترونیکی

کار بعدی این است که یک ایمیل بفرستید و به ما اطلاع دهید که ماهی‌ها در کجا ذخیره شده‌اند.

برای انجام این کار، ابتدا باید متغیرهای محیطی را تنظیم کنیم تا حساب کاربری، اعتبارات و جزئیات گیرنده خود را جمع‌آوری کنیم. از آنجا که ارسال ایمیل نیاز به ارائه اعتبارنامه دارد، ما نمی‌خواهیم چنین داده‌های حساسی را به طور مستقیم در سند خود ذخیره کنیم. در عوض، ما یک فایل محیطی برای ذخیره این داده‌ها ایجاد خواهیم کرد. این کار برای اجرای محلی سند انجام می‌شود اما هنگام استفاده از یک راه‌حل ابری مانند Heroku برای استقرار مستقیم، باید مجموعه این متغیرهای محیطی را به صورت Config Vars تعریف کنیم.

سپس، می‌توانیم متغیرهای محیطی مورد نیاز را بارگذاری کنیم.

ما همچنین می‌خواهیم چارچوب داده‌های فیلتر شده خود از مکان‌های ذخیره‌شده را از قبل به یک رشته تبدیل کنیم تا بتوانیم آن را در پیام یا بدنه ایمیل خود بگنجانیم. بعد از آن، می‌توانیم همه چیز را برای ایمیل کنار هم قرار دهیم، و هر خط موضوعی که می‌خواهیم را برای ایمیل خود انتخاب کنیم.

با این مجموعه، ما باید قادر به اجرای سند و دریافت یک ایمیل مشابه با این باشیم! نکته- هنگام استفاده از Gmail گوگل، ممکن است برای اولین بار یک اخطار امنیتی دریافت کنید و ممکن است نیاز به دسترسی به برنامه‌های با امنیت کم‌تر برای ارسال ایمیل با استفاده از اعتبارنامه‌تان داشته باشید.

جمع‌بندی

ما در حال حاضر یک سیستم هشدار کاملا ساخته‌شده برای ردیابی به‌روزرسانی‌های پرورش ماهی داریم! کد کامل شامل کنترل خطا و هر گونه اطلاع از هر گونه مشکل بالقوه‌ای که ممکن است در صورتی رخ دهد که فرمت فایل PDF یا داده به گونه‌ای تغییر کند که دیگر نتواند توسط کد برنامه ثبت شود.

خودکار کردن خط

از اینجا، گام نهایی خودکارسازی سیستم هشدار برای اجرا به خودی خود است. راه‌های زیادی برای انجام این کار وجود دارد اما دو رویکرد اصلی وجود دارد:

  1. آن را به صورت محلی اجرا کنید و آن را از طریق نرم‌افزاری مانند Task Scheduler (ویندوز) یا ) cron مک یا لینوکس) برنامه‌ریزی کنید.
  2. برنامه را در سیستم عامل ابری یک فروشنده مانند Heroku یا AWS مستقر کرده و از ابزارهای آنها برای برنامه‌ریزی آن استفاده کنید.

اولین راه حل آسان و رایگان است اما برای اجرای اسکریپت نیاز به روشن بودن دستگاه دارد.

روش دوم بر روی یک سرور در فضای ابری میزبانی می‌شود و بنابراین می‌تواند هر زمان که ممکن است پیچیده‌تر باشد اجرا شود و برای راه‌اندازی هزینه زیادی داشته باشد.

برای اهداف ما، من این برنامه را در Heroku با استفاده از عضویت در ردیف رایگان گسترش داده‌ام و سند را برای اجرای هر ساعت برنامه‌ریزی کرده‌ام. این برای اجرای رایگان هر ماه بدون طی کردن ساعات یا اعتبارهایی که Heroku برای عضویت اصلی خود فراهم می‌کند، کافی است. استقرار در Heroku نیاز به چند مرحله اضافی در برنامه اصلی ما و همچنین فایل‌های اضافی مانند فایل‌های requirements.txt و runtime.txt دارد.

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

نگارش کدنوشته‌های پایتون خود را با Task Scheduler خودکار کنید

امیدوارم این آموزش مفید و لذت بخش بوده باشد.

تمام کدهای این پروژه را می توان در این مخزن Github پیدا کرد که می‌توانید آن را دانلود کرده و در صورت داشتن حساب کاربری بلافاصله به صورت محلی یا در Heroku شروع به کار کنید.

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