مجتبی بنائی
مجتبی بنائی
خواندن ۶ دقیقه·۵ سال پیش

دست به کد: جمع‌آوری خودکار توئیت‌های فارسی با استفاده از GitLab CI

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

  1. ارسال خودکار توئیت‌ها به گیت‌هاب
  2. خودکارسازی اجرای کد
  3. دانلود توئیت‌های جمع‌آوری شده
  4. ارسال خودکار توئیت‌ها به گیت‌هاب


پیش نیازها

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

برای این پروژه، خیلی نیاز به آشنایی با گیت (یک سیستم مدیریت فایلها در پروژه‌های نرم‌افزاری) ندارید و می‌توانید از امکانات خود گیت‌لب برای آپلود فایلهای پروژه استفاده کنید. برای اینکه همراه با توضیحات، به صورت عملی کدها را مشاهده کرده و به دلخواه، تغییراتی در آنها انجام دهید، بهتر است مخزن کد پروژه را از این آدرس، Fork کنید تا کدها به حساب کاربری شما در گیت‌لب منتقل شود (گزینه Fork زمانی که وارد حساب کاربری خود شده باشید، فعال خواهد شد). با این کار می‌توانید برای ویرایش کدها (مثلاً جستجوی موضوعی خاص در توئیتر و جمع‌آوری توئیت‌های مرتبط با آن) با رفتن به زبانه Details از گزینه ‌ Web IDE ، به صورت آنلاین به تغییر و اجرای کدها بپردازید.(شکل زیر) خوبی ادیتور کد گیت‌لب این است که علاوه بر ویرایش فایلها، امکان آپلود فایلها و حذف آنها را هم برای شما فراهم می‌کند.

آخرین نکته‌ای که قبل از شروع کار،‌ باید خاطرنشان کنم این است که هدف این نوشتار، تنها آشنایی با نحوه اجرای خودکار کدها و ایجاد یک خط تولید داده ساده است بنابراین روی بخش جمع آوری توئيت‌ها با توجه به اینکه در دو مقاله قبلی، به تفصیل صحبت کرده‌ایم، توضیحی نخواهم داد و فرض بر این است که کدی که قرار است به صورت روزانه اجرا شود، از قبل موجود است. این کد درون پروژه فوق با نام get_tweets.py قرار دارد و در انتهای بخش اول این آموزش،‌ نحوه اجرای خودکار این فایل را فراخواهیم گرفت و مطمئناً شما این کار را با هر فایل دیگری می‌توانید انجام دهید.

مقدمه‌ای بر CI‌ یا تجمیع مداوم در مهندسی نرم‌افزار

در مهندسی نرم افزار مدرن برای تولید حرفه‌ای یک محصول نرم‌افزاری، به ازای هر بخش از نرم‌افزار حتماً یک تست و آزمایش هم باید نوشته شود. این تست که خود یک برنامه کوچک است، این امکان را به ما میدهد که بتوانیم به صورت خودکار، تمام نرم افزار را تست کنیم و به ازای هر قابلیت جدید، مطمئن شویم که کدهای قبلی بدون اشکال اجرا خواهند شد. این موضوع باعث ایجاد یک روند در تولید نرم‌افزارها شده است که به آن تجمیع مداوم یا Continuous Integration می‌گوئیم . به این ترتیب که به ازای هر قابلیت جدیدی که توسط یکی از اعضای تیم آماده و تحویل مدیر پروژه میشود، این قابلیت به صورت موقت به پروژه اصلی اضافه شده و تمامی تستها، به صورت اتومات اجرا می‌شوند. اگر همه تستها پاس شدندو خطایی تولید نشد، این قابلیت در لیست انتشار قرار می‌گیرد و یا می تواند به صورت خودکار، منتشر شده و در اختیار عموم قرار گیرد ( Continuous Deployment ).

امکان اجرای خودکار تستها که خود کدهای نرم‌افزاری هستند را گیت‌لب برای ما به رایگان فراهم کرده است و ما هم قصد داریم از همین امکان برای مقاصد خود که جمع‌آوری داده است، (سوء) استفاده کنیم!. با ما همراه باشید.

گام اول: ایجاد یک خط تولید

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

اما این به تنهایی کافی نیست و ما می‌خواهیم علاوه بر ذخیره توئیت‌ها در این ماشین مجازی که با اتمام کار آن، از بین خواهد رفت، بعداً بتوانیم به آنها دسترسی داشته باشیم. اینجاست که مفهومی با نام Artifact در گیت‌لب معرفی شده است و منظور از آن، فایلهایی است که باید بعد از اجرای کدها، از ماشین مجازی استخراج و در اختیار کاربر قرار گیرد. بنابراین بهتر است خروجی مورد نظر خود را در یک پوشه مشخص قراردهید و همین پوشه را به گیت‌لب برای تولید خروجی اعلام نمایید. در این پروژه، ما توئیت‌ها را در فایلی با نام data.txt و در پوشه tweets ذخیره می‌کنیم.

فرض کنید کدهای استخراج توئیت ما درون یک فایل با نام get_tweets.py قرار گرفته است که دقیقاً همان‌کدهای مقالات قبلی است که تعداد توئیت‌های آن به ده هزار عدد، محدود شده است و قصد داریم این کد را هر یک ساعت یک بار اجرا کنیم و بدین ترتیب خواهیم توانست روزانه حدود ۱۲۰ هزار توئیت را جمع‌آوری کنیم.

در مرحله بعد، کتابخانه‌هایی که برای اجرای این کدها به آنها نیاز داریم در فایل requirements.txt وارد می‌کنیم : نام هر کتابخانه دریک خط

علاوه بر این، فایل .gitlab-ci.yml که حاوی تنظیمات اجرای خودکار کدها بعد از هر کامیت است را هم به صورت زیر به پروژه اضافه میکنیم . منظور از کامیت هم، هر نسخه جدیدی از پروژه است که با هر دستور git push به گیت‌لب ارسال می‌شود و یا هر تغییری که با استفاده از Web IDE به صورت آنلاین روی کدها صورت می‌دهیم.

`image:python:latest

image: python:latest

stages:

- gettweets

variables:

PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"

before_script:

- python -V # Print out python version for debugging

- pip install -r requirements.txt

get-tweets:

stage: gettweets

script:

- python get_tweets.py

artifacts:

paths:

- tweets/*.txt

`

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

در خط دوم و سوم، نام مراحل این خط تولید را اعلام می کنیم که در مثال ما یک مرحله بیشتر نداریم و نام آن را هم gettweets گذاشته‌ایم . در قسمت بعد،‌متغیر محیطی PIP _CACHE_DIR را مقداردهی می‌کنیم که برای نصب کتابخانه‌های مورد استفاده در پروژه نیاز خواهد بود و در ادامه، کدهایی که قبل از اجرای برنامه پایتون ما باید روی این سرور مجازی اجرا شوند را در بخش before_script مشخص می‌کنیم . دستور اول نسخه پایتون را چاپ می کند (برای مقاصد خطایابی) و دستور دوم هم کتابخانه‌های پایتون پروژه که در فایل requirements.txt قرار گرفته است را نصب می‌کند.

خط یازدهم، شروع توضیحات هر مرحله از خط تولید است که می‌توانیم با دادن هر نام دلخواهی شروع به ذکر جزییات هر مرحله نماییم. دقت کنید که در این بخش، جلوی متغیر stage نام مرحله اولی که در بالا به آن اشاره کرده‌اید را حتما بنویسید. نهایتاً در قسمت script کد پایتونی که باید اجرا شود را مشخص می‌کنیم و در بخش artifacts هم مسیر خروجی‌های پروژه و پسوند یا نام آنها را مشخص می‌کنیم .

اکنون همه چیز آماده اجرای خودکار کدهای مورد نظر ماست. اگر این پروژه را کامیت کنید و یا تغییراتی که آنلاین روی کدها داده‌اید را ذخیره کنید، خط تولید شما به صورت خودکار شروع به اجرا خواهد کرد. کافی است به قسمت CI / CD بروید و از قسمت Pipelines بررسی کنید که خط تولید شما در حال اجراست یا نه .

ادامه مقاله را در سایت مهندسی داده بخوانید.

توئيترپردازش متندست به کدمثال کاربردیمهندسی نرم‌افزار
یک آدم عاشق‌پیشه علاقه‌مند به حوزه پردازش داده، مدرس دانشگاه و نویسنده مقالات تخصصی در سایت مهندسی داده
شاید از این پست‌ها خوشتان بیاید