برنامه‌نویسی

دانلود از یوتوب

این یه پروژه شخصیه. زیاد پیش میومد که فیلمی رو از یوتوب بخوام ببینم یا دانلود کنم و به هر دلیلی نخوام از فیلتر شکن استفاده کنم. فرض کنید فیلم های بلند. مثلا چند مورد از فیلم های ریچارد داوکینز بود که حجم بالایی داشتن می خواستم توی زمان دانلود مجانی بگیرمشون. 🙂

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

این مورد همزمان بود با شروع یادگیری PHP، بنابراین سعی کردم این پروژه رو با PHP پیاده کنم. برای انجامش از کلاس PHPtube استفاده کردم که خب مدت ها بود به روز نشده بود. یه فورک ازش گرفتم ولی تنبلی کردم و توی گیتهاب تغییرات و اضافه ها رو آپلود نکردم.

با یه سری مشکلات رو به رو شدم. این کلاس، لینک فایل رو بر می گردوند و حالا باید فکری به حال دانلود می کردم. اول اینکه محدودیت زمان اجرای PHP رو باید برمی داشتم یا حداقل به زمان منطقی می رسندمش. من از این دستور استفاده کردم:

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

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

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

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

ایده های زیادی که برای تکمیلش دارم. بعضی هاش رو اینجا می نویسم و بعد در بخش پروژه ها یه سرفصل براش در نظر می گیرم.

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

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

نکته: خیلی از کدها رو خودم ننوشتم. از جاهای مختلف جستجو کردم. مثال ها رو چک کردم و اونی که به هدفم نزدیکتر بود رو با کمی جرح و تعدیل استفاده کردم.

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

Standard

9 thoughts on “دانلود از یوتوب

  1. پست به درد بخوری بود.
    البته تا زمانی که سایت‌هایی مثل خورجین و فایل‌گیر هست، عملی کردنش رو هاست خودمون به‌صرفه نیست.

    • هوشمند says:

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

  2. mostafa says:

    سلام
    کار جالبیه، ضمن این که اگه اشتباه نکنم همزمان فیلترم دور میزنه
    میتونی سورس کامل کارت رو ارائه بدی؟

    • هوشمند says:

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

  3. jamshid says:

    با سلام و خسته نباشید

    من خواستم امتحان کنم ولی به آی پیم گیر داد.
    آگه آی پی غیر ایرانی باشه که فک نمیکنم نیازی به این (دور زدن) باشه!

    • هوشمند says:

      همونطور که توی متن نوشتم به خاطر محدودیت ترافیک سرور و برای جلوگیری از مشکل برای وبلاگ، تا زمانی که پروژه رو روی یک سرور دیگه راه نندازم خودم محدودیت IP گذاشتم

  4. Mohammad says:

    جدا از جنبه‌ی آموزشی پست، youtube-dl، بهترین ابزاری بود که برای این کار پیدا کردم. فقط هم به یوتیوب محدود نیست، توصیه میکنم حتما یه سری به صفحه‌ی گیت‌هابشون بزنید.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.