لگو بازی با گنو/لینوکس: لیست دانلود در سه سوت-۲
توسط: vahit
توی پست «لگو بازی با گنو/لینوکس: لیست دانلود در سه سوت» دوست عزیزی پرسیدن چطور میشه لیست دانلود فیلمهای سایت مکتبخونه رو چطوری میشه به این صورت در آورد. جوابش خیلی ساده بود خیلی دوست داشتم که ایشون خودشون بنویسن و یاد بگیرن ولی خوب پرسیدن منم نوشتم گفتم توضیح بدم تا برای بقیه هم مفید باشه.
خب توی سایت مکتبخونه برای هر مبحث یه صفحهای وجود داره که لیست دروس اون بحث رو نوشته. لینک همهی دروس یکیه با این تفاوت که شمارهی هر درس آخر لینک بعد از یه خط تیره نوشته شده. یعنی اگه درس دینامیک ماشین استاد حسن ظهور مد نظرم باشه لینک درس اوّل میشه این:
1 |
http://maktabkhooneh.org/course?course=zohoor53-1 |
و لینک درس دوّمشون میشه این:
1 |
http://maktabkhooneh.org/course?course=zohoor53-2 |
و الی آخر.
البته ناگفته نماند که لینک دانلود هر ویدئو هم توی همون صفحه هست. تعداد درس هر مبحث هم که معلومه. خب پس ایدهی کلی این میشه که من میتونم به راحتی همهی صفحات مربوط به دروس رو دانلود کنم و بعد لینک دانلود رو بکشم بیرون. برای دانلود صفحات کارهای زیادی میشه کرد دوتاشون به صورت زیر هستن.
اوّلی استفاده از حلقهی for به شکل زیر هست:
1 2 3 4 5 6 |
Base_URL=http://maktabkhooneh.org/video?v=zohoor53 for i in {1..17} do wget $Base_URL-$i done |
دوّمی خیلی سر راستره به این شکل:
1 |
wget http://maktabkhooneh.org/video?v=zohoor53-{1..17} |
تا اینجای کار فقط صحفات دانلود میشن و ما هنوز لینکها رو بدست نیاوردیم. برای بیرون کشیدن لینکها میشه از روش پست قبلی استفاده کرد فقط با یه کوچولو تغییرات. اینجا هم برای پیمایش فایلهای متعدد میشه کارهای مختلفی انجام داد، اوّلی به صورت زیر است:
1 2 3 4 |
for i in {1..17} do grep -i hq $Base_Name-$i | cut -d "\"" -f4 >> links.txt done |
و دوّمی:
1 |
grep -i hq http://maktabkhooneh.org/video?v=zohoor53-{1..17} | cut -d "\"" -f4 >> links.txt |
و … .
اشکالی که به روش دوّم وارده این هست که لینکها بر اساس درس مرتب نمیشن و چون نام فایلها بیشتر شبیه به اعداد تصادفی هستن به صورت معمول نمیشه اونها رو مرتب کرد. پس خیلی راحت میشه از روش حلقهی for استفاده کرد.
حالا فقط کافیه بخشهای مختلف رو توی یک اسکریپت با یک مقدار تغییرات خیلی جزئی کنار هم قرار داد و در نهایت بعد از اجرای اسکریپت لینکها رو داخل یه فایل متنی تحویل گرفت.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#!/bin/bash Base_URL=http://maktabkhooneh.org/video?v=zohoor53 Base_Name=video?v=zohoor53 for i in {1..17} do wget $Base_URL-$i done for i in {1..17} do grep -i hq $Base_Name-$i | cut -d "\"" -f4 >> links.txt done cat links.txt |
اَه! اصلا به فکر دانلود همه صفحات نیفتاده بودم!
دستت درد نکنه! ممنون
ذهنم رفته بود به این سمت که یک جوری دایرکتوری ویدیوهای درس موردنظر (که اکسس دیناید میده) رو دانلود کنم!
خوشحالم مشکلت حل شد. :)
البته با دستور curl هم میشه سورس صفحهی اینترنتی رو هم مستقیم گرفت و دیگه نیازی به دانلود کل صفحه نباشه.