مختصر و مفید میرم سر مقدمه (نه فعلا از اصل مطلب خبری نیست!)

از ویندوز به لینوکس (البته گنو/لینوکس درسته!) مهاجرت کردم و از idm محبوبم خبری نبود

تو نوشته های قبلی نوشته بودم uget , persepolis رو تست کردم و خلاصه persepolis رو برگزیدم ولی اونقدری که باید خوب نبود ، تو انتخاب کردن چند تا فایل دردسر داشت ، بار ها موقع انتقال از صف اصلی به یک صف دیگر کرش می‌کرد ،ارتباطش با aria2 قطع می‌شد(واقعا عجیب بود این یکی!)

اینطوری شد که تصمیم گرفتم بیشتر دنبال دانلود منیجر نگردم و خودم یکی بنویسم

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

اولین چیزی که به ذهنم رسید برای قسمت دانلود کردن کتابخونه های python بود و یکی هم پیدا کردم ولی به دلایل نامعلوم حجم بیشتر از ۲-۳ مگ رو نمی تونست دانلود کنه و از اول دانلود می‌کرد که خیلی جالب نبود!

به جز هسته دانلود بقیه قسمت های برنامه تا حد خوبی جلو رفته بود که در ادامه توضیح میدم:

۱ - پارس کننده html :‌قصدم این بود که با دادن لینک صفحه‌ی سریال، خودش صفحه رو دانلود کنه و تمام لینک های ویدیویی رو تشخیص بده و داخل لیست بگذاره ، اولین چالشی که بود این بود که توی یک صفحه وب پر است از لینک های مرتبط و غیرمرتبط که قاعدتا همشون فیلم موردنظر نیستن و یکی هم اینکه بین خود قسمت های سریال، خیلی اوقات چند تا کیفیت در یه صفحه قرار داده میشن و خوبه که بشه انتخاب کرد بینشون نه اینکه همشون دانلود بشن

راه حل من برای هر ۲ تا چالش ساده بود : یک keyword از کاربر گرفته بشه و در صورتی که اون دقیقا در نام فایل موجود بود به لیست اضافه ش کنه! مثلا برای دانلود قسمت های 480p کافیه 480 را به عنوان کلمه کلیدی وارد کنید تا همه چیز به طور خودکار انجام شود

۲- لینک ساز! :‌ ظاهرا بعضی از سایتا با دانلود کردن صفحه وب و پارس کردنش مشکل دارن(شاید سیاست امنیتی شاید https ) ولی دلیل نمیشه من بیخیال بشم! همونطور که می دونید در ۹۹ درصد اوقات لینک های سریال پشت سر هم و با یه قاعده مشخص هستن پس با داشتن اولی و تعدادشون میشه تا آخر همه لینک ها رو ساخت و اضافه کرد، و خب اینم خیلی سخت نبود پیاده سازیش!

۳− ادیت کردن لیست دانلود!

خب قسمت هسته دانلود و ادیت لیست دانلود مونده بود ولی پروژه باید کار می‌کرد چون قسمتای جذابش که قبلا پیاده سازی نشده بود رو نوشته بودم پس اومدم از برنامه های آماده استفاده کردم! بعله nano , wget

برای ادیت لیست با وارد کردن دستور مربوطه، برنامه nano باز میشه و میتونید لیستتون رو هرطوری دوست دارید ادیت کنید (یکم مجبورید خودتون دست به کار بشید ولی از هیچی بهتره!)

برای دانلود هم از قابلیت queue توی wget استفاده کردم که بسیار هم خوب کار میکنه به این صورت :

یه لیست به عنوان لیست دانلود میگیره و از اول شروع میکنه به دانلود، اگر وسط کارش ctrl+c بزنید و بعدا دوباره همون لیست رو resume کنید، میاد از ادامه آخرین فایلی که دانلود کرده پخش می‌کنه یعنی عملا قابلیت resume , pause هم داریم با ctrl+c

همه چی کامل شد و خوب کار می‌کرد ولی به مشکل کوچک بود، برنامه، فایل های دانلودی رو کنار خودش میریخت(که تو پوشه برنامه‌نویسیم بود و جالب نبود) یا باید یه آدرس ثابت بهش داده می‌شد که اونم خیلی اوقات خوب نبود

این بود که اومدم یه function برای fish (شل مورد استفاده م) تعریف کردم که وقتی دستور dl زده میشه یه کپی از (اخرین نسخه) برنامه بریزه تو پوشه جاری و اونجا برنامه رو اجرا کنه ، در این صورت می تونید از هر پوشه به عنوان یه صف جدا استفاده کنید :))

در نهایت برای اینکه ترمینالم همیشه باز نباشه برای دانلود از deepin quake terminal استفاده می کنم و برنامه م همیشه توی ترمینال بالا بازه! (شما می تونید از quake استفاده کنید اگر deepin ندارید)

در آخر برنامه رو از این جا می تونید بگیرید :


rsharifnasab/py_downloader a simple batch downloader with python and wget. Contribute to rsharifnasab/py_downloader development by creating an account on GitHub.


پ.ن :‌اگه میخواید بگید که این که فقط یه html parser ه نهایتا و کار خاصی نکردی باید بگم که مشکل خودم رفع شد پس برنامه نویسی به دردم خورد، فارغ از ارزش علمی و فنیش!

پ.ن۲: اگر با نصب و اجرا مشکل داشتید حتما بهم بگید