منبع اصلی نوشتار زیر در این لینک قرار دارد

لگو بازی با گنو/لینوکس: لیست دانلود در سه سوت-۲

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

خب توی سایت مکتب‌خونه برای هر مبحث یه صفحه‌ای وجود داره که لیست دروس اون بحث رو نوشته. لینک همه‌ی دروس یکیه با این تفاوت که شماره‌ی هر درس آخر لینک بعد از یه خط تیره نوشته شده.  یعنی اگه درس دینامیک ماشین استاد حسن ظهور مد نظرم باشه لینک درس اوّل می‌شه این:

http://maktabkhooneh.org/course?course=zohoor53-1

و لینک درس دوّمشون می‌شه این:

http://maktabkhooneh.org/course?course=zohoor53-2

و الی آخر.

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

اوّلی استفاده از حلقه‌ی for به شکل زیر هست:

Base_URL=http://maktabkhooneh.org/video?v=zohoor53

for i in {1..17}
do
    wget $Base_URL-$i
done

دوّمی خیلی سر راستره به این شکل:

wget http://maktabkhooneh.org/video?v=zohoor53-{1..17}

تا اینجای کار فقط صحفات دانلود می‌شن و ما هنوز لینک‌ها رو بدست نیاوردیم. برای بیرون کشیدن لینک‌ها میشه از روش پست قبلی استفاده کرد فقط با یه کوچولو تغییرات. اینجا هم برای پیمایش فایلهای متعدد می‌شه کار‌های مختلفی انجام داد، اوّلی به صورت زیر است:

for i in {1..17}
do
    grep -i hq $Base_Name-$i | cut -d "\"" -f4 >> links.txt
done

و دوّمی:

grep -i hq http://maktabkhooneh.org/video?v=zohoor53-{1..17} | cut -d "\"" -f4 >> links.txt

و … .

اشکالی که به روش دوّم وارده این هست که لینک‌ها بر اساس درس مرتب نمی‌شن و چون نام فایل‌ها بیشتر شبیه به اعداد تصادفی هستن به صورت معمول نمی‌شه اونها رو مرتب کرد. پس خیلی راحت می‌شه از روش حلقه‌ی for استفاده کرد.

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

#!/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

 



برچسب ها : , , , , , , , ,

به سیاره لینوکس امتیاز دهید

به اين صفحه امتياز دهيد