وبلاگ محسن

دیروز بود که به طور کاملا اتفاقی به یه مقاله مفید در انجمن فارسی اوبونتو راجع به دانلود منیجر aria2c برخوردم که طرز استفاده بهینه ش رو آموزش میداد.

 

من از همون ماه های اول ورودم به دنیای گنولینوکس با aria2c آشنا بودم اما هیچ وقت کار باهاش رو یاد نگرفتم(البته بالاخره دیروز یاد گرفتم yes ) و دیشب وقتی که یه فایل نهصد مگی رو زود تر از انتظار برام دانلود کردم به قدرتش پی بردم و راستشو بخواین الآن خیلی خوشحالم. چون یکی دیگه از معدود وابستگیای من به ویندوز کم شد.

 

اگر به لینک بالا مراجعه کرده باشین و آموزش رو خونده باشین و اگر مثل من به تنبلی مفرط دچار باشین حتما درک کردید که تنظیمش یه کوچولو زمانبره. برای همین باید اسکریپتی بنویسیم که کار رو واسمون آسون کنه. اسکریپتی که فقط url بهش بدیم و فایل تحویل بگیریم.

 

 

مشکلترین قسمت ماجرا اونجایی که ما باید حجم فایلی رو که می خوایم دانلود کنیم بدست بیاریم و باور کنید اون لحظه کوچکترین ایده برای حلش نداشتم. اما میدونستم که کتابخونه پایتون ماژولی داره به اسم urllib.request که یه ربطی به مسئله ما داره. با رفتن به کانال آی آر سی python# و چند بار پرسش و پاسخ متوجه شدم که هر فایل موجود در اینترنت خاصیتی به نام header داره که خصوصیات فایل رو که شامل سایز فایل هم میشه اونجا دخیره می کنن و با یه متد ساده از کلاس urllib.request میشه بهش دسترسی پیدا کرد.

 

با این اطلاعات اسکریپت زیر رو نوشتم:

#!/usr/bin/python3
import urllib.request
import os
import sys
def get(url):
    file_url = urllib.request.urlopen(url)
    size = int(file_url.getheader("Content-Length"))
    conn = (size / 1000000) / 16
    if conn < 1:
        conn = 1
    os.system('aria2c -s16 -x16 -k' + str(round(conn)) + 'M \"' + url + '\"')
if len(sys.argv) > 1:
    get(url=sys.argv[1])
else:
    print('Usage: download FileUrl')
در مورد خط شیشم باید بگم برای کار با url ها در پایتون باید اول به وسیله این متد بازش کنید.
متغییر conn هم سایز فایل رو که مقدارش به octet! هست رو  به مگ تبدیل می کنه و بقیه چیزا هم که واضحه :)
(اگر نمی دونید octet چیه غصه نخورید چون منم تازه فهمیدم همچین واحد حافظه ایی هست!)

اگر فکر می‌کنید این اسکریپت به دردتون می‌خوره، اونو تو یه فایل متنی ذخیره کنید و  به یکی از دایرکتوری هایی که خروجی زیر تولید می‌کنه منتقل کنید:

 

echo $PATH

توصیه میشه اسکریپت هایی که خودتون می‌نویسید رو به local/bin./~ منتقل کنید.

پ.ن: می‌دونید که؛ ~ یا همون تیلدا به معنی home/ 

نظرات  (۱)

  • علیرضا امیرصمیمی
  • سلام محسن جان شیوه جالبی بود برای پیدا کردن header
    من در PersianDM از برنامه های دانلود منجر دیگه استفاده کردم که راحت این کار رو انجام بده و حجم رو به دست بیاره،البته در تنظیم aria2 حساسیت های دیگه رو هم مورد توجه قرار دادم
    یه نگاهی به کدهای من بنداز احتمالا بتونه بهت کمک کنه

    پاسخ:
    خیلی ممنون علیرضای عزیز
    چشم در اولین فرصت حتما کدت رو می بینم. 

    ارسال نظر

    ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
    شما میتوانید از این تگهای html استفاده کنید:
    <b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
    تجدید کد امنیتی