جادی تی وی ۰۱۰ – بررسی مشکلات اختراع دوباره چرخ با کمک پایتون و اسکرپینگ و ردیس

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

لینک روی یوتیوب و هر کس هر جای دیگه آپلود کنه و لینک بده، باعث خوشحالی و دعای خیر پشت سانسوری‌هاست (:

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

  • ErFUN

    لینک مستقیم:
    http://fs2.filegir.com/erfun_kh/%D8%AC%D8%A7%D8%AF%DB%8C_%D8%AA%DB%8C_%D9%88%DB%8C_%DB%B0%DB%B1%DB%B0_-%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C%D9%85%D8%B4%DA%A9%D9%84%D8%A7%D8%AA_%D8%A7%D8%AE%D8%AA%D8%B1%D8%A7%D8%B9_%D8%AF%D9%88%D8%A8%D8%A7%D8%B1%D9%87_%DA%86%D8%B1%D8%AE_%D8%A8%D8%A7_%DA%A9%D9%85%DA%A9_%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86_%D9%88_%D8%A7%D8%B3%DA%A9%D8%B1%D9%BE%DB%8C%D9%86%DA%AF_%D9%88_%D8%B1%D8%AF%DB%8C%D8%B3_%5BxC6EirvX880%5D_%5Btag22%5D.mp4

  • Masoud MI
  • Hosein Yeganloo

    :D تذکر به جایی بود. خیلی دلم می خواست اختراع کنم. البته چیزی که توی ذهنم بود یه خورده پیچیده تر از استفاده از سوال های Static بود
    ولی الان که فکر می کنم اونم راحت دور زده میشه :))
    فعلا سراغ این کار ها نمی رم.

  • Ramin

    جادی، من اینطور خودم سوالا رو بیرون کشیدم:
    cuel’: for i in {1..1000}; do curl ‘https://shop.mci.ir/index.php?route=checkout/login’ -X POST -H ‘Cookie: cookiesession1=IVSOJUDMKEDWPK2ILXT2HDCTZ9OQSB8O; PHPSESSID=usj19aob4b09bcu01jnhcfsgc1; language=fa; currency=RLS; SRVNAME=S4’ -H ‘Origin: https://shop.mci.ir‘ -H ‘Accept-Encoding: gzip, deflate’ -H ‘Accept-Language: en-US,en;q=0.8,fa;q=0.6’ -H ‘User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36’ -H ‘Accept: text/html, /; q=0.01′ -H ‘Referer: https://shop.mci.ir/index.php?route=checkout/checkout‘ -H ‘X-Requested-With: XMLHttpRequest’ -H ‘Connection: keep-alive’ -H ‘Content-Length: 0’ -H ‘DNT: 1’ –compressed | tr ‘r’ ‘ ‘ | grep -oP -e'(?<=

    ).*(?=

    )’ >> questions; done

    • jadijadi

      روش خوبیه و حیف که در کامنت ها خراب شده (:

      • Ramin

        خب البته چیز پیچیده‌ای نیست، اکثرش بویلر پلیت برای اینه که بگیم ما ولید هستیم و مثلن با گوگل کروم اومدیم و این حرفا. تهش، کانتنت صفحه رو پایپ کردم به grep و یه رگیولار اکسپرشن که کانتنت بین دو تا تگ h4 رو خارج می‌کنه. بعد ریختم تو یه فایل. دیگه با دستور‌هایی مثلن sort و uniq و cut و اینطور چیزا، می‌شه فهمید چه خبره اون تو

  • نگار

    جادی خیلی ویدئوهات جالبن دقیقا روی موضوعات مهم دست میذاری مخصوصا اون رجکس که مدت ها بود ازش یادگرفتنش ترس داشتم! نمیدونم چرا؟ شاید به خاطر نوع تعاریفی که از دیگران دربارش شنیده بودم ولی مثل خیلی چیزهای دیگه وقتی یه استاد واقعی برای آدم مفاهیم رو آموزش میده دیگه هیچی سخت نیست. مرسی جادی.
    اگه میشه درباره طریقه خواندن سورس کد برنامه ها بده اگه یادت باشه توی یکی از پادکست هات گفته بودی “باید یه ویدئوکست درباره طریقه سورس خوانی بدم”.

    • jadijadi

      یه پادکست در اون مورد ضبط کردم! بگردم ببینم کجاست!

  • stackprogramer

    جادی ممنون،

  • Omid Najaee

    دمت جادی گرم، ولی یه نکته ریز غیر مهم. فک کنم cli مخفف client نیست، مخفف command line interface

    • jadijadi

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

  • jadijadi

    یه لینک دیگه رو هم یکی از دوستان در ایمیل شر کرده: http://lpic.mp3yab.ir/captcha_encryption_redis_python.mp4

  • Mostafa Asadi

    سلام
    عالی بود من که لذت بردم مثل همیشه ، معرفی روش درست معرفی یک باگ به ی مجموعه
    بازهم تشکر

  • مهدی‌یار

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

    • jadijadi

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

  • jadijadi
  • یه دوست

    ممنون جادی ;)

  • Mojtaba Niknam

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

    اینو پرسیدم بخاطر اینکه ویدئوت رو که دیدم کلا توی ذهنم یه چیزی هی القا میشد که میگفت فقط ریکپچای گوگل ولاغیر:دی

    • jadijadi

      آره کمی تند رفتم. بیشتر منظور رمزنگاری است. البته تقریبا پنجاه درصد کپچاهای سیستم های ایران قابل شکستن هستن .. بسیار راحت. اگر من کپچای گوگل رو بذارم مطمئن هستم که شکسته نمی شه. در غیر اینصورت هی باید تلاش کنم کپچا درست کنم یا لایبری پیدا کنم و تغییر بدم و … . من در یک پروژه به دلایلی درگیر نوشتن کپچا بودم و کپچایی که واقعا شکسته نشه واقعا سخته. نکته جذاب در ایران اینه که هنوز باب نیست کسی کپچاها رو بشکنه و مثلا پونصد تا اکانت الکی در فلان سرویس دهنده وبلاگ درست کنه.

      • Mojtaba Niknam

        آره درست میگی. گوگل کپچا خیلی خوبه منتها بارها شده ما توی سایت ایرانی گذاشتیم اما بعضی کاربرا بخاطر مشکل ssl و … که توی بعضی isp های کشور اتفاق میفته اصلا نمیتونستن باهاش کار کنن و عملا ما مجبور میشدیم بیخیالش بشیم! مثلا خیلی وقتا لود نمیشده یا نسبت به کل سایت خیلی دیرتر لود میشده.

        • jadijadi

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

  • Zhilevan Ibra

    سلام جادی. خسته نباشی. اول از همه تشکر کنم بابت زحمت های که میکشی و زمان های که صرف تولید این ویدیو کست ها میکنی.
    هر چند کاملا با این مثالت موافق نیستم و برای اینکه جلوگیری کرد از اسپمر ها کپتچا تنها راه حل نیست !!! اما با این حرفت کاملا موافقم که متاسفانه خیلی ها دوباره میرن سمت اختراع چرخ دوباره و این کار اشتباهه .
    چند تا نکته کوچیک هم در مورد دیدیو
    – Clean-url نبودن آدرس باگ نیست ( البته خودت استادی که باگ به چی میگن و احتمالا اشتباه لفظی بوده )
    – به جا اینکه بگی شل بلدی خوب تو پایتونه یه حلقه 500 تایی مینوشتی ( ;) اینجوری اثبات نکنی هم قبولت داریم که کارت درسته )
    – تولید رندم با یه توزیع غیر از توزیع یونیفرم ( یکنواخت ) هم باگ محسوب نمیشه :((( ( ممکن توزیع طرف چیز دیگه ای بوده باشه و اصلا شاید یه توزیع ابداعی و البته نا استاندارد باشه اما باگ نیست !!! )

    خسته نباشی. ممنون. منتظر ویدیو کست بعدی ات هستیم ;)

    • jadijadi

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

      • Zhilevan Ibra

        موافقم باهات ;) نشده یا زمانش رو ننداشته یا ازش نخواسته شده یا … و یا نتونسته (خیلی خارجکی و خوش بینانه در نظر گرفتم :))) ) .
        ( حلقه هم تو خود کد پایتون میزدی بهتر بود و کرش کردن سیستم هم (شاید) در کار نبود (والا یه کد دارم هر یه ربع دقیقه تقریبا از 5000 تا آدرس اسکرپ میکنه نمی دونم ;). خودت که استادی اجرای یه برنامه که توش حلقه 50 بار بچرخه با اجرای 50 بار یه برنامه که یه کارو انجام میده از لحاظ resource های پروسس ها خیلی فرق داره ). ( البته قصد ندارم ثابت کنم که من بهتر بلدم و این حرفهای کل انداختن و بچه بازی. فقط میخوام بگم وقتی گیر میدی به این و اون می تونی خودتم بهتر کار کنی، چهار نفر میبینن الگو میگرن بهتر تا جایی که می تونی کم نقص کار کنی )

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

  • jIMMY

    خیلی خوب بود. فقط یک نکته شاید کم اهمیت که توی ویدئو کست قبلیت هم فکر کنم خودت اشاره کردی: Beautiful Soup تلفظ میشه بیوتیفول سوپ (یعنی سوپ زیبا) که شما میگی بیوتیفول سپ (یعنی صابون زیبا!).

  • صادق

    مطابق معمول ویدئو کست‌های جادی با دو کیفیت از نشانی http://185.105.239.51:181/jadi قابل دانلود کردن است.
    سرور داخل ایران است و اطلاعی از کاربران Log نمی‌شود

  • Hossein Jazayeri

    برنامه Redis Desktop Manager ابزار خوبیه برای کار کردن با ردیس اگر کسی حوصله کامند زدن براش رو نداره

  • aminmoghaddam

    ربطی به ویدیو نداره ولی خیلی از تابع keys خوشتون نیاد! از این تابع نباید تو محیط production استفاده بشه چون که به شدت کند هستش و ممکنه کار سایر threadها یا برنامه‌ها رو مختل کنه. به جاش می‌تونید از جایگزین‌هایی که redis در اختیارتون قرار می‌ده مثل set استفاده کنید.

  • Mohammad Ka

    جادی چه زمانی باید از چیزی مثل دیکشنری، لیست یا tupleها استفاده کنیم، و چه زمانی از یک ابزار مثل redis یا sqlite؟ معیار انتخاب چه چیزی هست؟ مخصوصا اگه دیتا به شکل key : value