1masoud
6 سال پیش توسط 1masoud مطرح شد
46 پاسخ

دانلود کردن لینک فیلم آپارات به کمک php

چطوری لینک فیلمی رو بگیرم و با کد php دانلود کنم


ثبت پرسش جدید
بهنام فلاح پور
@gharibe.ashna2012 6 سال پیش مطرح شد
1

می تونید با متد file_put_contents این کارو انجام بدید.
به این صورت :

        file_put_contents("YourNewFileName.mp4", fopen("YourVideoLink", 'r'));

mp4 مثال بود میتونید به نسبت پسوند فایل تغییرش بدید.


مهدی
@code2code 6 سال پیش مطرح شد
1

توی محتوای سایت توی تگهای a که داخل li هستن میتونی کیفیتهای متفاوتش رو ببینی

<li data-ec="download"

میتونی با رجکس دربیاری


مهدی
@code2code 6 سال پیش مطرح شد
1
        $ch = curl_init();
        $url='https://www.aparat.com/v/NoQ84';
        curl_setopt_array($ch, [
            CURLOPT_URL => $url,
            CURLOPT_RETURNTRANSFER=> true
        ]);
        $output = curl_exec($ch);
        curl_close($ch);
        $re = "/(?<=onclick=\"setVideoVisit\(\)\">
                                                    <a href=\").*?(?=\")/im";
        preg_match_all($re,$output,$match);

1masoud
تخصص : php,laravel
@masoudproton 6 سال پیش مطرح شد
1

@code2code
خالی نمایش میده


مهدی
@code2code 6 سال پیش مطرح شد
1

همین الان چک کردم واسه همین لینک 6 تا لینک میده...
یه کم با کد رجکسش ور برو
برو سورس صفحه اپارت رو ببین


محسن بستان
تخصص : Senior Backend Developer
@mohsenbostan 6 سال پیش مطرح شد
1

@masoudproton
یک دور api های آپارات رو برسی کنید بد نیست . تقریبا api کاملی هست فکر کنم api مربوط به دانلود هم داشت.
https://www.aparat.com/api


1masoud
تخصص : php,laravel
@masoudproton 6 سال پیش مطرح شد
1

منظورم میدونید چیه لینک رو بگیره و با php لینک دانلود رو بگیره و دانلود کنه
خوب الان ما لینک ها رو گرفتیم چطوری بگیم دانلود کنه


مهدی
@code2code 6 سال پیش مطرح شد
1

خوب شما الان با رجکس لینک ویدئوها رو با ۶ کیفیت گرفتین بر اساس کیفیت یکی رو انتخاب کنین و با همون کرل دانلود کنید دیگه
این جوابو یه نگاه کنید https://stackoverflow.com/a/6409531/3231397


بهنام فلاح پور
@gharibe.ashna2012 6 سال پیش آپدیت شد
1

@masoudproton
برای دانلود لینک میتونید از متدی که تو پاسخ اول گفتم استفاده کنید.


1masoud
تخصص : php,laravel
@masoudproton 6 سال پیش مطرح شد
1

@gharibe.ashna2012

file_put_contents("YourNewFileName.mp4", fopen("YourVideoLink", 'r'));
بهنام اینو من نفهمیدم fopen برای چیه میشه مختصر توضیح بدی


بهنام فلاح پور
@gharibe.ashna2012 6 سال پیش مطرح شد
1

تابع fopen فایل های استریم رو تکه تکه می خونه با کمک کلید r که یعنی read. وقتی داخل قیمت data مربوط به file_put_contents قرار می گیره به عنوان مقصدش عمل میکنه.
شما میتونی بجای fopen از file_get_contents هم استفاده کنی ولی تو اون حالت مشکل حافظه ممکنه پیش بیاد و تو حجم فایل بالا ممکنه به مشکل بر بخوره.


1masoud
تخصص : php,laravel
@masoudproton 6 سال پیش آپدیت شد
1

@code2code

راه دیگه ای نداره
این لینک https://stackoverflow.com/a/6409531/3231397رو متوجه نشدم


مهدی
@code2code 6 سال پیش مطرح شد
1

نگاه کدی که بهت گفتم اول میره یه فایل درست میکنه با نام localfile.tmp و با قابلیت نوشتن بازش میکنه(+w)
توسط آپشن CURLOPT_FILE میگه توی این فایل ذخیره کن
CURLOPT_FOLLOWLOCATION اجازه تغییر لوکیشن رو میده
CURLOPT_TIMEOUT رو ۵۰ قرار میدیم که توی فایلای بزرگ کانکشن قطع نشه

        ini_set('max_execution_time', 0);
        $ch = curl_init();
        $url = 'https://www.aparat.com/v/csZuA';
        curl_setopt_array($ch, [
            CURLOPT_URL => $url,
            CURLOPT_RETURNTRANSFER => true
        ]);
        $output = curl_exec($ch);
        curl_close($ch);
        $re = "/(?<=onclick=\"setVideoVisit\(\)\">
                                                    <a href=\")(.*?)(?=\").*(?<=title=\")(.*?)(?=\")/im";
        preg_match_all($re, $output, $match);
        $fp = fopen( "./{$match[2][0]}144p.mp4", 'w+');
        $ch = curl_init(str_replace(" ", "%20", $match[1][0]));
        curl_setopt_array($ch, [
            CURLOPT_TIMEOUT => 50,
            CURLOPT_FILE => $fp,
            CURLOPT_FOLLOWLOCATION => true
        ]);
        curl_exec($ch);
        curl_close($ch);
        fclose($fp);

مهدی
@code2code 6 سال پیش مطرح شد
1

اگه مجوز دسترسی نداشتی برو توی پوشه مربوطه
اینو اجرا کن

sudo chmod -R 777 .

1masoud
تخصص : php,laravel
@masoudproton 6 سال پیش آپدیت شد
1

@code2code
آقا مهدی برای دانلود کیفیت ۷۲۰ باید چیکار کنم


1masoud
تخصص : php,laravel
@masoudproton 6 سال پیش آپدیت شد
1

@code2code
متوجه شدم
ممنون

اما یک نکته ای اینجا هست که وقتی من کیفیت ۷۲۰ و۱۰۸۰ که امتحان کردم نصفه دانلود میکنه باید برای این قضیه چیکار کرد


مهدی
@code2code 6 سال پیش مطرح شد
1

نگاه اگه سرورت اجازه میده به جای curl هم میتونی از دستورات shell استفاده کنی
ینی با یه ابزار داخلی لینوکس که سرعتش هم بالاتر باشه و php رو هم مشغول نکنه میتونی از کل تنظیمات shell بهره ببری و مثلا ۱۰۰ لینکو با هم دانلود کنی ...
در ضمن واسه بهترین کیفیت میتونی آخرین عضو آرایه رو بذاری که بهترین کیفیت رو دانلود کنی
توی مثال زیر من از aria2c واسه دانلود استفاده کردم

        ini_set('max_execution_time', 0);
        $ch = curl_init();
        $url = 'https://www.aparat.com/v/csZuA';
        curl_setopt_array($ch, [
            CURLOPT_URL => $url,
            CURLOPT_RETURNTRANSFER => true
        ]);
        $output = curl_exec($ch);
        curl_close($ch);
        $re = "/(?<=onclick=\"setVideoVisit\(\)\">
                                                    <a href=\")(.*?)(?=\").*(?<=title=\")(.*?)(?=\")/im";
        preg_match_all($re, $output, $match);
        $f = exec("aria2c -x 16 -s 16 '{$match[1][count($match[1])-1]}' -o './{$match[2][0]}.mp4'");

مهدی
@code2code 6 سال پیش مطرح شد
1

اگه از کرل استفاده میکنی میتونی باید تایم اوت رو بالا ببری در غیر این صورت شل مشکلی نداره حتی میتونی > /dev/null 2>&1 & رو به ته شل اضافه کنی که دیگه php منتظر تموم شدن شل نمونه

        $f = exec("aria2c -x 16 -s 16 '{$match[1][count($match[1])-1]}' -o './{$match[2][0]}.mp4'  > /dev/null 2>&1 &");

1masoud
تخصص : php,laravel
@masoudproton 6 سال پیش مطرح شد
1

@code2code

آقا مهدی سلام دمت گرم فقط یک سوال کنجکاو شدم با این کد میشه از یوتیوب هم فیلم دانلود کرد درسته یا نه؟


مهدی
@code2code 6 سال پیش آپدیت شد
1

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


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام