دانلود تمام عکسهای SimpleDesktop با سه خط در Bash!
http://simpledesktops.com/download/?desktop=301
همهٔ آدرس جز عدد ۳۰۱ در انتهایش ثابتند و آن عدد از ۱ یکییکی زیاد میشود. هر کدام از این عکسها پس از درخواست شدنشان به آدرس یکی از عکسهای روی سرور اشاره میکنند. خوب دیگر داستان از این هم سادهتر میشود؟ کافیست که اراده کنیم و با یک حلقهٔ for اعداد را تولید کنیم و جلوی آدرس ثابتمان بنویسیم. پس میشود این:
#!/usr/bin/bash
for i in {1..5000}
do
echo "http://simpledesktops.com/download/?desktop=$i"
done
به بش گفتیم که هر بار یک عدد از یک تا پنجهزار (البته به ترتیب از کم به زیاد) تولید کن و در خروجی چاپ کن. یک بار اسکریپت را ران میکنیم و ... بعله خروجی دقیقا همان آدرسهایی که خواستیم میشود:
...
http://simpledesktops.com/download/?desktop=4995
http://simpledesktops.com/download/?desktop=4996
http://simpledesktops.com/download/?desktop=4997
http://simpledesktops.com/download/?desktop=4998
http://simpledesktops.com/download/?desktop=4999
http://simpledesktops.com/download/?desktop=5000
حالا کافیست در اسکریپت به جای echo که هر چه جلویش باشد را در خروجی استاندارد چاپ میکند یک wget بنویسیم تا آدرسهای جلویش را دانلود کند. اما نه! در اولین اقدام تیرمان خطا رفت! در سرورهای Apache یک فایلی هست به اسم .htaccess و همانطور که از نامش معلوم است کارش این است که کنترل کند چه کسی به کجا دسترسی دارد. هر نرمافزاری هم که به یکی از این سرورها درخواست بدهد موظف است اول خودش را معرفی کند. خوب wget که از نامش فساد میبارد عموما از طرف چنین سایتهایی مسدود میشود.
این است که باید به wget بگوییم نقابش را به صورت بزند و دوباره اقدام کند. اینبار اسکریپتمان این شکلی میشود:
#!/usr/bin/bash
for i in {100..5000}
do
wget -U "Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2" "http://simpledesktops.com/download/?desktop=$i"
done
و بعله! ران میکنیم و خیلی خوشکل اقدام به دانلود عکسها میکنیم ;-)
پینوشت: در حین جستجو برای نوشتن این اسکریپت کشف کردم که قبلا اسکریپتهایی با Python یا PHP هم برای شیرهکشی از این سایت نوشته شده. ولی این اسکریپت از همهشان کوتاهتر بود و خوب سادگی زیبـــــاست ;-)
پینوشت ۲: دیگر خودتان حواستان باشد که #!/usr/bin/bash آدرس bash سیستم من است و میتوانید با یک whereis bash پیدا کنید که مال شما کجاست!
پینوشت ۳: ممکنه بعد از دانلود متوجه بشین که فایلهای دانلودی با یه همچین اسمایی ذخیره میشن index.html?desktop=100 اتفاقی که برای من روی سرور آرچ افتاد. عجیب بود که اسم فایل درست رو میدید ولی خودش از رو این Querystring ساخته شده اسم رو مینوشت. پس از جستجو کشف کردم که باید آپشن زیر هم به wget اضافه بشه:
--content-disposition