برخی از ما با وظایف تکراری سر و کار داریم و کار خاصی را باید هر هفته و یا هر روز انجام دهیم یا گزارشی هست که باید به صورت روزانه یا هفتگی به انجام برسد. برای نمونه باید یک کوئری داده بزنیم یا برخی کارهای بصری‌سازی انجام داده و به مافوق خود گزارش دهیم. اما چه می‌شود اگر این کارها را به جای این که دستی انجام دهیم، خودکار سازی کنیم و از شر این کارهای تکراری خسته‌کننده راحت شویم؟

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

اگر نخستین باری است که می‌خواهید یک ربات تلگرام بسازید، پیشنهاد می‌کنیم ابتدا از آموزش زیر استفاده کنید:

در ادامه مراحل ساخت یک ربات تلگرام با پایتون برای منظوری که در بالا شرح داده شد را به صورت گام به گام شرح می‌دهیم.

نصب کتابخانه‌ها

ما قصد داریم از google-cloud-bigquery (+) برای کوئری زدن به داده‌های موجود در BigQuery گوگل استفاده کنیم. همچنین کتابخانه‌های matplotlib ،numpy و pandas به ما کمک می‌کنند که داده‌های خود را به صورت بصری ارائه کنیم. کتابخانه python-telegram-bot (+) تصاویر بصری‌سازی شده را در گفتگوهای تلگرام ارسال می‌کند.

فعالسازی API BigQuery گوگل

برای استفاده از خدمات BigQuery گوگل ابتدا API آن را فعال کنیم. به این منظور به کنسول توسعه‌دهندگان گوگل (+) بروید و یک پروژه جدید بسازید. البته می‌توانید در صورت تمایل از پروژه‌های موجود نیز استفاده کنید.

در بخش داشبورد پروژه روی گزینه ENABLE APIS AND SERVICES کلیک کنید و به دنبال API BigQuery بگردید.

ربات تلگرامی

روی گزینه Enable کلیک کنید تا API مورد نظر فعال شود.

ربات تلگرامی

ایجاد کلید حساب سرویس

اگر می‌خواهید از سرویس‌های کلود گوگل مانند BigQuery گوگل استفاده کنید، باید از کلید حساب سرویس بهره بگیرید. در واقع این کلید همانند رمز عبور اتصال ما به سرویس‌های گوگل عمل می‌کند. به کنسول توسعه‌دهندگان گوگل بروید و روی برگه Credentials کلیک کنید. گزینه Create Credentials را انتخاب کرده و روی Service Account Key کلیک کنید. گزینه New Service Account را انتخاب کرده و در فیلد Service Account Name یک نام وارد کنید. در لیست بازشدنی Role گزینه Project > Owner را انتخاب کرده و گزینه Create را بزنید.

ربات تلگرامی

این یک فایل json. است که به صورت خودکار دانلود خواهد شد. نام آن را creds.json بگذارید. در ترمینال مقدار گزینه GOOGLE_APPLICATION_CREDENTIALS را به صورت مسیر فایل creds.json تعیین کنید.

اینک همه چیز آماده است و نوبت آن رسیده که برنامه خود را بنویسیم.

نوشتن برنامه

ما قصد داریم برنامه‌ای بنویسیم که داده‌ها را از BigQuery کوئری بکند (البته فرض ما این است که داده‌ها در آنجا ذخیره شده‌اند). سپس داده‌ها را بصری‌سازی کرده و در قالب یک تصویر ذخیره می‌کنیم. در ادامه این تصویر از طریق یک گفتگوی تلگرامی ارسال می‌شود.

ما در این راهنما از مجموعه داده bigquery-public-data.stackoverflow استفاده کرده‌ایم و قصد داریم داده‌های کل پست‌های روزانه گزارش خود را بصری‌سازی کنیم. گردش کار برنامه کاملاً آسان است:

برای تعریف هر گام یک تابع تعریف می‌کنیم.

کوئری به BigQuery

ابتدا کتابخانه را ایمپورت کنید:

تابعی به نام query_to_bigquery ایجاد کنید که یک query به عنوان پارامتر می‌گیرد.

این تابع داده‌ها را به صورت یک dataframe بازگشت می‌دهد.

بصری‌سازی داده‌ها

قصد داریم از کتابخانه matplotlib برای بصری‌سازی داده‌ها استفاده کنیم.

ما پنج پارامتر می‌گیریم که به صورت زیر هستند:

  1. x به عنوان داده‌های محور x
  2. x_label به عنوان نام برچسب محور x
  3. y به عنوان داده‌های محور y
  4. y_label به عنوان نام محور y
  5. و title که عنوان نمودار بصری‌سازی ما است.

ذخیره تصویر

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

در کوئری فوق دقت کنید که کد زیر به معنی این است که می‌خواهیم داده‌های 14 روز را از تاریخ 02-12-2018 گردآوری کنیم:

دلیل استفاده از این تاریخ آن است که 02-12-2018 آخرین تاریخی است که در مجموعه داده ما به نام bigquery-public-data.stackoverflow.post_history ذخیره شده است. بدیهی است که در موارد مختلف می‌توانید از ()CURRENT_DATE استفاده کنید تا جدیدترین داده‌ها را دریافت کنید. تابع query_to_bigquery را فراخوانی کنید تا داده‌ها به دست آیند:

ستون date را به عنوان داده‌های محور x در نظر می‌گیریم و ستون total_posts نیز محور y را تشکیل می‌دهد.

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

این کد را درون تابعی به نام get_and_save_image ذخیره می‌کنیم:

ارسال تصویر

برای این که بتوانیم تصویر را به فرد صحیحی ارسال کنیم، باید chat_id وی را بدانیم، زیرا این یکی از پارامترهای الزامی است. بدین منظور به ربات userinfobot (+) مراجعه کرده و عبارت /start را وارد کنید. این ربات اطلاعات کاربر مورد نظر را به همراه chat_id وی که یک عدد در فیلد id است بازگشت می‌دهد.

تابعی به نام send_image بسازید. این تابع، اقدام به فراخوانی تابع get_and_save_image می‌کند تا بصری‌سازی را دریافت و ذخیره کند و سپس آن را به کاربری که chat-id اش در متغیر chat_id اعلان شده ارسال می‌کند.

برنامه اصلی

در نهایت تابع دیگری می‌سازیم که main نام دارد و برنامه خود را به وسیله آن اجرا می‌کنیم. دقت کنید که باید مقدار YOUR_TOKEN را با توکن ربات خود عوض کنید.

همچنین به خاطر داشته باشید که این برنامه تصویر را به صورت خودکار بر مبنای تاریخ و ساعتی که تعریف کرده‌اید ارسال می‌کند. برای نمونه در این راهنما ما تاریخ ارسال را به صورت «هر روز ساعت 9:00 قبل از ظهر» تعیین کرده‌ایم.

در انتها کد شما باید مانند زیر باشد:

فایل را ذخیره کرده و نام آن را به صورت main.py تعیین کنید. برنامه را با وارد کردن دستور زیر در ترمینال اجرا کنید:

اینک ما یک ربات تولیدکننده گزارش داریم که آن را با 50 خط کدنویسی ساخته‌ایم و این بسیار شگفت‌انگیز است. در تصویر زیر نمونه‌ای از بصری‌سازی که از سوی این ربات ارسال شده را می‌بینید. اینک می‌توانید راحت بنشینید و با آرامش منتظر رباتی بمانید که گزارش‌ها را به صورت روزمره ارسال می‌کند.

ربات تلگرامی

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

میثم لطفی (+)

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

بر اساس رای 1 نفر

آیا این مطلب برای شما مفید بود؟

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *