کلاسور



برای استخراج اطلاعات یک سایت چند راه وجود داره

اولین راه استفاده از کتابخانه‌های قدیمی مثل Html_simple_dom یا تابع cURL خود PHP است. راهکاری ساده ولی تقریبا برای سایت‌های امروزی، بلا استفاده.

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

 

 

راهکار دوم استفاده از مرورگرهای Head-less است. در این روش یک مروگر بصورت اتوماتیک اجرا شده و پس از اتمام لود سایت، همانند یک کاربر توانایی کلیک بر روی المان‌های موجود در صفحه یا گرفتن هر یک را دارا هستند. این تکنیک با عبارت کلیدی WebDriver قابل جستجوی تخصصی در وب است.

چند کتابخانه معروف در نت وجود دارد که SeleniumHQ بیشترین همخوانی را با PHP و ویندوز دارد. WebDriverIO در NodeJS و WebDriver در پایتون نیز از همین کتابخانه برای وب اسکرچینگ استفاده می‌کنند.

فیس بوک نیز این کتابخانه را برای PHP توسعه داده و در گیت هاب منتشر کرده است.

 

هشدار : استفاده از Selenium توسط Php علاوه بر استفاده از رم بسیار زیاد، پایداری مناسب نداشته و امکان ارور هندیلنگ در آن بنا به دلایلی وجود ندارد. به عنوان مثال سیستم به هیچ عنوان به مدیریت خطای StaleElements پاسخ نداده و صرفا برنامه کرش می کند.

 


 

شروع بکارگیری پایتون در برنامه‌نویسی

 

نصب پایتون

وارد سایت Python.org بشید و آخرین نسخه را مطابق سیستم عامل خود انتخاب و نصب کنید. (برای ویندوز نسخه 3x دارای فایل نصبی است که پس از دانلود مثل سایر برنامه‌ها قابل نصب است. در هنگام نصب گزینه add to path رو کلیک کنید)

 

کتابخانه‌های پایتون

پایتون یه جایی شبیه به Composer توی php و npm در Nodejs داره به نام Pypi که کتابخانه های پایتون رو اونجا ذخیره و منتشر می کنند. برای نصب کتابخانه‌های پایتون کافیه بعد از نصب پایتون، از طریق cmd ویندوز با دستوری که در خود همان کتابخانه نوشته شده، کتابخانه مورد نظرتون رو نصب کنید.

 

بهترین IDE

برای پایتون یک IDE پیشفرض وجود داره به نام IDLE که همراه خود زبان نصب میشه. ولی بهترین IDE برای پایتون نرم‌افزار PyCharm هست که البته تجاری است و باید نسخه 30 روزه یا نسخه کرک شده آن رو نصب و استفاده کنید. سایر ادیتور‌ها مثل Sublime و Notepad++ هم قابلیت کد نویسی زیبا در پایتون رو دارند.

 

اجرای برنامه‌های نوشته شده با پایتون

py -3.7 <script_name>.py

 

برای شروع و ادامه !

برای شروع و ادامه پایتون پیشنهاد می کنم حتما از سایت W3Schools.com استفاده کنید. بجز مباحث شی گرایی که خوب کمی بد توضیح داده مابقی مباحث عالی و بسیار خلاصه و مفید توضیح داده شده اند. یادتون باشه یه سری چیزایی که به نظر بدیهی میاد توی پایتون یا اسمشون فرق می کنه یا اصلا وجود ندارند (!) مثلا آرایه های چند بعدی توی پایتون نداریم. بجاش دیکشنری و لیست داریم ! البته بماند که خیلی چیزهایی که اصلا انتظارش رو نداریم هم اینجا پیشفرض هست !

 

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

 

نکته مهم در سال 2019 :

پایتون اساسا یک زبان بر مبنای ترمینال هست. در واقع شما نتایج کدهاتون رو توی ترمینال یا همون محیط کامند قرار بوده ببینید. البته به راحتی و با یک ایمپورت ساده می تونید رابط کاربری گرافیکی هم بهش اضافه کنید ولی اصلا انتظار رابطهای پیشرفته کاربری رو نداشته باشید. در حال حاضر بهترینشون pyQt هست که یه UI Studio برای طراحی درگ اند دراپی پایتون داره که اونم هم کارباهاش خیلی جالب نیست و هم نتیجه کار اون چیزی که مد نظرتون هست در نماید. البته شاید من چون از دنیای رنگارنگ وب دارم میام توی پایتون با این جور رابطهای کاربری هنوز غریبه هستم ولی علی ای حال می تونید بصورت دستی با کتابخانه هایی مثل tKinter یا pyQt برای برنامه اتون رابط کاربری بنویسید یا از همون ترمینال استفاده کنید. این موارد برای سال 2019 است. حتما یکی دو سال دیگه یه چیزی مثل دلفی استودیو یا ویژوال استادیو مایکروسافت برای پایتون میاد که براحتی همه چیز رو بهم وصل کنه و اینقدر هم گیج و ویج نباشه.

من توی گشت و گذاری که داشتم به این نتیجه رسیدم که اگه رابط کاربری خوشگل مشگل میخواید برید سمت Java بهتر به نتیجه میرسید. در حال حاضر اکثر چیزایی که برای پایتون هست، خودش یا بهترش برای جاوا هم هست.


استفاده از کامپوزر در پروژه‌های شخصی PHP

کامپوزر چیست ؟

کامپیوزر (Composer) یک نرم افزار است که رابط کاربری ندارد و تحت ترمینال ویندوز (یا لینوکس یا .) اجرا میشودو وظیفه اش نصب و مدیریت کتابخانه های مورد نیاز پروژه ها به صورت اتوماتیک است. مثلا فرض کنید می خواید از کتابخانه جلالی که کار تبدیل تاریخ های شمسی به میلادی و بالعکس رو انجام میده در پروژه اتون استفاده کنید. روش قبلی که این کار رو انجام می دادید این بود که قابل JDF رو دانلود می کردید و توی هر جایی لازم بود با دستور include یا دستورهای مشابه فراخوانی و استفاده می کردید. حالا از الان به بعد کافیه توی ترمینال ویندوزتون برید به آدرس پروژه و دستور نصبش رو پیدا کنید و خلاص. از اون لحظه به بعد، دیگه همیشه و هرجایی که لازمش داشته باشید، تقویم جلالی در اختیارتونه.

 

چرا کامپوزر به وجود اومد ؟

فرض کنید یه پروژه دارید که از 20 تا کتابخانه مجزا استفاده می کنه. این کتابخونه ها برای کپی کردن و اینکلود کردن توی پروژه ها حسابی وقتتون رو میگیرن. خوب با کامپوزر راحت با یه دستور دو سه کلمه ای همه این کارها انجام میشه. ثانیا اینکه اگه این کتابخونه ها بروز بشند فقط کافیه دستور آپدیت رو توی کامپوزرتون بزنید تا شمام از آخرین نسخه استفاده کنید. آخرین کارکرد هم اینکه همیشه یه لیست از کتابخانه هایی که توی هر پروژه استفاده کردید جلوی چشمتون هست. راحت می تونید اضافاتش رو حذف کنید.

 

چطوری ازش استفاده کنیم ؟

اول از همه باید برید سایت getcomposer.com و آخرین نسخه اش رو بگیرد و نصب کنید. در حین روند نصب ازتون یه نسخه php هم میخواد که قبلش اگه wamp نصب کردید، کافیه برید از همونجا آدرس یک از نسخه های Php که همراه ومپ نصب میشه رو بهش بدید. مثلا Php 7.3. بعدش یه پنجره cmd باز کنید (Windows+R و بعدش دستور CMD)  و داخلش تایپ کنید Composer --version. اگه به درستی نصب شده باشه، بهتون نسخه کامپوزر رو اعلام می کنه.

 

 

توی پروژه های عادی PHP که هیچ فریمورکی نداره و توی Wamp یا Xampp داریم می نویسیم هم میتونیم از کامپوزر استفاده کنیم ؟

بله. فقط کافیه یه فایل خالی توی پروژه ایجاد کنید به اسم composer.json و بعد مطابق راهنمایی که توی سایتش هست، یه ساختار JSON توی فایل ایجاد کنید. از الان به بعد وقتی می خواید از کامپوزر توی پروژه اتون استفاده کنید، کافیه توی ترمینال برید به آدرس پروژه و مابقی کارها رو انجام بدید.

 

 


 

 

گیت هاب به چه دردی می خورد ؟‌

اول اینکه کدهاتون رو از روی سیستمتون به فضای اینترنت منتقل می کنه و نگرانی از دست دادنش رو نخواهید داشت.

دوم اینکه وقتی یه تغییر توی یکی یا چندتا از فایلهاتون بدید و بخواید مجدد بریزیدش توی گیت هاب، لازم نیست کل فایلها رو منتقل کنید. فقط یه دستور Git Push می زنید و تنها فایلهایی که تغییر پیدا کردن به صورت خودکار براتون آپلود میشن.

سوم اینکه وقتی چند مورد تغییرات روی یه کدی بدید و هر دفعه از git push استفاده کنید بعدا می تونید سایت GitHub ببینید که هر دفعه چه چیزی رو تغییر دادید و یا حتی کدهای قبلیتون رو برگدونید.

چهارم اینکه اگه شما بخواید مردم می تونن کدهاتون رو ببینند و روش نظر بدن. حتی تغییرات مد نظرشون رو روی کدهاتون اعمال کنند و بعد اگه شما تایید کردید روی کدها ثبت بشه.

پنجم اینکه شما راحت می تونید روی هرچندتا سیستم که لازم بود به کدهاتون دسترسی داشته باشید و هر تغییری می دید بعدا در سیستمهای دیگه اتونم دنبال کنید. مثلا در محل کار روی کدهاتون کار می کنید و وقتی بر می گردید خونه ادامه کار رو با سیستم خونه اتون دنبال می کنید.

ششم اینکه وقتی نیاز پیدا کردید که از گیت هاب استفاده کنید یعنی یه مرحله پیشرفته تر شدید.

 

 

دستورات مفید در ترمینال گیت‌هاب (Git Bash)

چطور از گیت استفاده کنیم ؟

گیت و گیت هاب خیلی ساده هستند ولی چون از محیط ترمینال (CMD در ویندوز) برای انجام کارهاشون استفاده می کنند به نظر پیچیده میان. اصلا لازم نیست ازش بترسید. فقط چندتا دستوره که احتمالا برای کلاس کار به جای اینکه به راست کلیک اضافه کنن، گفتن بذارید توی ترمینال وارد کنیم تا حس خفن بودن بهمون دست بده !

 

برای استفاده از گیت هاب باید چندتا مرحله ساده رو طی کنیم :

  • توی اینترنت :
  1. نصب نسخه مناسب برای سیستم عامل از سایت گیت هاب (من نسخه ویندوز 64 بیتی رو نصب کردم)
  2. ساخت یه اکانت توی سایت گیت هاب
  3. ساخت یه ریپوزیتوری به نام پروژه امون در سایت گیت هاب

وقتی وارد اکانتتون توی گیت هاب میشید سمت راست بالا یه + هست. روش کلیک کنید نوشته Create New Repository روی اینم کلیک کنید فقط یه اسم به پروژه اتون می دید و خلاص. البته کارهای اضافه تری هم میشه کرد که بعضیاش خیلی مفیدن. مثلا می تونید بگید این یه پروژه است که با Laravel نوشته شده و لازم نیست فایلهای خود لاراول رو هر دفعه برام آپلود کنی، فقط فایلهایی که من تغییر میدم یا فایلهایی که اضافه می کنم رو بریز روی گیت هابم. به این کار می گن Git Ignor یعنی از این چیزایی که من میگم چشم پوشی کن.

  • توی سیستم خودتون :
  1. ساخت یه فولدر خالی با اسم دلخواه توی سیستم و راست کلیک روی اون و انتخاب گزینه Git Bash Here ( این گزینه وقتی نرم افزار گیت هاب رو روی سیستمون نصب کنید باید به منوی راست کلیک اضافه بشه.)
  2. معرفی خودتون و ریپوزتوری که در سایت گیت هاب درست کردید برای پروژه اتون با دستور زیر :
    git init
    git remote add esme-repository https://github.com/.(addresse repository dar git hub be sorate kamel)
  3. سینک کردن (همسان سازی) اطلاعاتی که توی ریپوزیتوری (از الان به بعد بهش می گیم مخزن) توی گیت هاب دارید با فولدری که ساختید توی سیستم با دستور زیر :
    git pull esme-repository master --rebase

  4. حالا باید محتویات فولدری که روش کار می کردید رو توی این فولدر کپی کنید. حواستون باشه که فایلهایی که مشترک هستند رو به هیچ عنوان کپی نکنید.

  5. الان گیت هاب هنوز فایلهایی که تغییر کردند رو به رسمیت نمی شناسه. اول باید یه توصیح به گیت هاب بدید که چیکار کردید تا قبول کنه ازتون. برای این کار باز توی همون ترمینالی که داشتیم دستورات قبلی رو میزدیم دستور زیر رو می نویسیم :
    git commit -a -m "tozihi ke mikhaim. masalan  First Upload"

  6. حالا با یه دستور دیگه کدهامون رو به سرورگیت هاب منتقل می کنیم :
    git push esme-repository esme-malek-repository

  7. فعلا تا اینجا کدهامون بین سیستم و سایت گیت هاب همسان (سینک) شد.

 

اصطلاحات گیت هابی :

ریپوزتوری (Repository) : به فارسی میشه مخزن. در واقع میشه یه فولدر حسابش کرد که برای هر پروژه به صورت مجزا درست می کنیم و فایلهای هر پروژه به صورت مجزا در اون ریخته میشه. مخزن. فولدر. شاخه !

اوریجین (Origin) : اسم پروژه یا اسم همون مخزنتون.

پوول (Pull) : دریافت کردن کدهاتون از گیت هاب یا همون انتقال کدها از سایت گیت هاب به رایانه شما میشه Pull کردن.

پووش (Push) : انتقال فایلها از رایانه شما به سایت گیت هاب میشه پوش کردن.

کامیت (Commit) : شما بخونید "کامنت". در واقع توضیحیه که همراه هر بار تغییرات روی فایلهاتون می دید. می تونه شماره ورژن باشه، یا هر متنی که شما بخواید. بعدا که کدها رو مرور می کنید مثلا بهتون یادآوری می کنه که چرا این تغییرات رو دادید.

فورک (Fork) : اگه یه پروژه ای روی سایت گیت هاب نظرتون رو جلب کرد و خواستید روش کار کنید فقط کافیه از اون یه کپی توی اکانت خودتون بگیرید. به این کار میگن فورک کردن. یکی از مزیت های این کار اینه که نویسنده اصلی کار هم می تونه پروژه شما رو پیگیری کنه یا اگه تغییر خوبی دادید می تونید به اسم خودتون و با تایید نویسنده اصلی پروژه به پروژه اصلی اعمال کنید.

کلون (Clone) : کلون یه کپی از پروژه رو براتون دانلود می کنه.

برنچ (branch) : تعداد کپی های تغییرکرده از پروژه شما.

 

 

این مطلب به مروز تکمیل می شه.

بروز رسانی در 16 بهمن 1397


 

خلاصه :

اکسسور امکانی است که مقادیر را بعد از خوانده شدن از دیتابیس و قبل از نمایش به کاربر دچار تغییر می کنند. به صورت getXXXXAttribute در مدل مربوطه فراخوانی می شوند.

میوتیتورز امکانی است که مقادیر دریافتی را قبل از ثبت در دیتابیس دچار تغییر می کند. به صورت setXXXXXAttribute($value) فراخوانی می شوند. (مشاهده فیلم آموزشی از آپارات)

 

کاربردهای Mutators ها 

  •  کار با JSON در لاراول

ساختار جیسونی که مورد قبول لاراول است (البته همه جور جیسون در لاراول قابل استفاده است ولی مطابق رسومات لاراول، ساده ترین آنها بهترین آنها است) :

{"name":"بانک ملی ایران","cart":6037994168737319,"account":12456546535}

برای ذخیره سازی، ایجاد تغییرات و مشاهده اطلاعاتی که شبیه به ساختار فوق در یک ستون دیتابیس ذخیره شده است فقط کافیست در Model مربوط متغییر پرایوت زیر را تعریف کنید :

protected $casts = [
    'bank' => 'array',      // Account, Cart, Name, .
    'address' => 'array',   // Address, Post Code, No, .
    'house'   => 'array',   // House Type, House Quality, .
];

 

در واقع در لاراول قابلیتی به نام Cast وجود دارد که نوع داده ها را مدیریت می کند. این قابلیت فوق العاده می تواند به راحتی انواع داده خروجی از دیتابیس را به یک آرایه تبدیل کند و تمامی روند دیکد و انکد کردن خروجی های JSON را حذف کند.

دو نکته :

1- برای ذخیره داده ها به صورت JSON در یک ستون از دیتابیس به راحتی کافیست فیلدهایی که در یک ستون قرار می گیرند را به صورت زیر نام گزاری کنید :

<input type="text" name="bank[name]">
<input type="number" name="bank[cart]">
<input type="number" name="bank[account]">

در صورتی که Cast را درست تعریف کرده باشید داده ها به این صورت در دیتابیس ذخیره خواهند شد :

---------------------------------------
|  id   |             bank            |
---------------------------------------
|   1   |{"name":"value","cart":"."}|
---------------------------------------

برای خواندن دیتاها هم به همین راحتی فقط نیاز است که متغییر ارسالی به ویو را به این صورت فراخوانی کنید :

{{ $record->bank['name'] }}

 

 

 


NodeJS & NPM (Node Package Manager)

کتابخانه های زیادی هست که موقع کار از اون استفاده می کنیم. معروف ترینشون کتابخانه جاوااسکریپت و PHP تبدیل تاریخ میلادی به شمسیه.

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

در واقع این امکان وظیفه اش ساده کردن کاراست.

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

حالا NodeJS یه استاندارده و جایی که پکیج های مختلف مثل همون تاریخ شمسی یا . رو می تونید پیدا کنید رو بهش NPM می گن.
برای اینکه بدونید چطور باید از همه اینا استفاده کنید این آموزش یک صفحه ای رو ببینید.

 

اگه تصمیم دارید از این پکیج ها استفاده کنید باید بگم که لول برنامه نویسیتون یه پله رفته بالاتر. یادتون باشه که از این پکیج ها هرجایی میشه استفاده کرد ولی بهترین حالتش وقتیه که توی Framework هایی مثل کدایگنایتر یا لاراول استفاده کنید.

 

اضافه دانی

یارن اسم یه مخزن دیگه است شبیه به NPM که بعضیا دوست داشتن پکیج هاشون رو اونجا بریزن. فقط دستورات نصبش با NPM فرق می کنه و ب Yarn شروع میشه. وگرنه برای ما به عنوان استفاده کننده خیلی فرقی نمی کنه. چیزی که من دیدم طراح های رابط گرافیکی بیشتر دوست دارن از یارن استفاده کنن.

 

بوئر هم یه مخزن دیگه است برای پکیج های NodeJS. اینم مثل NPM و Yarn فقط یه مخزنه و خودش چیز خاصی نیست. برای نصبش هم اول باید از NPM استفاده کنید و وقتی نصب شد دستوراتی که میخواید رو باید با کلمه bower شروع کنید. وظیفه همه این مخازن اینه که پکیج هایی که نصب میکنید رو لیست کنن و همواره کمکتون کنن که این پکیج ها بروز باشند.

 

  • چطور از پکیج های NodeJs در Laravel استفاده کنیم ؟

 

  • بین نصب دستی یه چیز مثلا قالب مدیریتی سایت یا استفاده از پکیجش کدوم توصیه میشه ؟

 

  •  

1-رفع خطای فلان فیلد Nullable نیست !!

کافیست در app/config/database مقدار strict رو برابر با false بگذارید.

 

2-جستجوی همه فن حریف در لاراول

برای جستو می توانید از Scout در لاراول استفاده کنید. اسکات یک میان برنامه است و برای کارکرد به یک موتور نیاز دارد. به صورت پیشفرض از Algolia استفاده می کند. ولی چون الگولیا به صورت اوت سورس است و شاید شما هم مثل من خوشتان نیاید که از منابع خارج از سرور استفاده کنید می توانید به راحتی بجای آن از موتورهای مختلف دیگری استفاده کنید. پیشنهاد میکنم TNTSearch رو امتحان کنید. این هم راهنمای استفاده ی کاملش.

 

3- استفاده از Helper در لاراول

تقریبا همونطور که از اسمش بر میاد قراره کمک های زیادی به ما بکنه. هلپر ها رو خودتون می تونید هرجا که خواستید بسازید فقط بعدش یادتون باشه که توی Composer.json معرفیشون کنید. به عنوان مثال می تونید به جای استفاده از Auth::user->username در لاراول یه هلپر درست کنید و توی تمام ویو هاتون از User()->username استفاده کنید.

"autoload": {
    "files" : ["app/Helpers/helper.php"]
},

اینم یه نمونه از کاربردهای هلپر برای ساده کردن معرفی کاربر همراه با یک جدول رابطه ای

function User(){
    // Summerise User Informaion Variables
    // Example :
    // Auth::user()->user_profiles->firstname
    // In User_profiles table
    // ==> User->name;  // Show Firstname Lastname or Username if empty names
    // or Users Tables
    // ==> User->users->id

    $User_info = Auth::user()->profile;

    if (empty($User_info->firstname) or empty($User_info->lastname)){
        $User_info->name = Auth::user()->username;
    }else{
        $User_info->name = $User_info->firstname.' '.$User_info->lastname;
    }
    return $User_info;
}

 

4- Eloquent های باهوش ولی نیازمند راهنمایی !

برای اینکه بین دو تا جدول یه رابطه درست برقرار بشه گاهی وقتها لازمه بزرگترها دخالت کنند. به عنوان مثال بین دو جدول Users و Users_profile که رابطه یک به یک بینشون برقراره فیلد مشترک Users.id و Users_profile.user_id اعه. برای اینکه توی الوکوئنت درست بهش حالی کنیم چی به چیه از این دستور استفاده می کنیم که المان اول اسم الوکوئنت جدول مرتبطه، المان دوم اسم پرایمر کی و المان سوم اسم کی در جدول مادره :

public function profile()
{
    return $this->hasOne('App\User_profile','user_id', 'id');
}

 

5- کار با فایلها در لاراول

6- انتقال لاراول به هاست اشتراکی


تبلیغات

محل تبلیغات شما
محل تبلیغات شما محل تبلیغات شما

آخرین وبلاگ ها

آخرین جستجو ها

فروشگاه اینترنتی لوازم خیاطی نخ سوزن ادبی موسسه جوان روان شناسی برای همه نمایندگی تعمیرات در تهران وبگاه جهانی سلام وبلاگ امور فرهنگی و مذهبی پژوهشگاه فاوا روزنوشت های یک عدد جوجه رنگی:)) اخبار و اصلاعات