PHP'da ijtimoiy tarmoq videosini yuklab olish
PHP'ning curl kengaytmasi — butun mijoz. Yozib qo'yishga arziydiganlari brauzer fetch'idan farq qiladiganlari: havolani query satriga kodlash, sekin manbani vaqt bilan uzish, katta faylni satrga emas diskka oqizish va faqat qayta urinish tuzatadigan narsani qayta urinish.
Yangilangan
Bitta funksiya
Havola uchun http_build_query bilan curl — qiymat URL-kodlangan bo'lishi shart, ichida & bo'lgan havola qo'lda yasalgan query satrini buzadi. CURLOPT_TIMEOUT sekin manbani so'rovni ushlab turishdan saqlaydi; o'ttiz soniya API'ning o'z upstream byudjetidan yuqori.
PHP<?php
function resolve(string $link): array {
$ch = curl_init("https://api.saveapi.org/v1/download?" . http_build_query(["url" => $link]));
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ["Authorization: Bearer sk_live_xxxx"],
]);
$body = curl_exec($ch);
curl_close($ch);
return json_decode($body, true) ?? ["success" => false, "error" => ["code" => "UPSTREAM_ERROR"]];
}medias[] ni o'qing
Har javobda o'sha massiv: post tartibida har fayl uchun bitta yozuv, har birida type. Video deb taxmin qilmasdan type bo'yicha shoxlaning: TikTok slayd-shou va Instagram karuseli image yozuvlari bo'lib keladi.
PHP$data = resolve("https://www.instagram.com/reel/ABC123/");
if (!$data["success"]) {
throw new RuntimeException($data["error"]["code"]);
}
foreach ($data["medias"] as $media) {
echo $media["type"], " ", $media["url"], PHP_EOL; // video | image | audio
}Faylni diskka oqizing
CURLOPT_FILE yuklab olishni to'g'ri handle'ga yozadi. 4K reel'ni PHP satriga yuklash memory_limit ga urilishning eng tez yo'li; oqim hech qachon urilmaydi.
PHP// Faylni diskka oqizish — xotiraga yuklamasdan
$out = fopen("video.mp4", "wb");
$ch = curl_init($data["medias"][0]["url"]);
curl_setopt_array($ch, [CURLOPT_FILE => $out, CURLOPT_FOLLOWLOCATION => true, CURLOPT_TIMEOUT => 120]);
curl_exec($ch);
curl_close($ch);
fclose($out);Faqat qayta urinish tuzatadiganini qayta uring
UPSTREAM_TIMEOUT va UPSTREAM_ERROR yana bir urinishga arziydi va hech narsa turmaydi. PRIVATE_CONTENT, MEDIA_NOT_FOUND va UNSUPPORTED_PLATFORM yakuniy — ikkinchi chaqiruv o'sha javobni beradi va hisoblanadiganlarida yana 0.1 kredit sarflaydi. Xabar matniga emas, kodga qarab harakat qiling.
Bitta qayta urinish, kodda
Qisqa uyqudan keyin bitta qayta urinish, faqat ikki qayta uriniladigan kod uchun. Ommaviy yechsangiz buni o'z navbatingizga o'rang; daqiqalik chegara javob sarlavhalarida X-RateLimit-Remaining sifatida turadi.
PHP$retryable = ["UPSTREAM_TIMEOUT", "UPSTREAM_ERROR"];
$data = resolve($link);
if (!$data["success"] && in_array($data["error"]["code"], $retryable, true)) {
sleep(2);
$data = resolve($link); // faqat bir marta, faqat shu kodlar uchun
}Boshlashdan oldingi savollar
- Composer paketi bormi?
- Yo'q, bitta endpointga kerak ham emas — butun mijoz birinchi qadamdagi funksiya.
- Fayl API orqali o'tadimi?
- Yo'q. CDN URL olasiz va to'g'ridan-to'g'ri tortasiz; yuklab olish tezligi API'ga emas, o'sha CDN'ga bog'liq.
- Shared hostingdan chaqirsam bo'ladimi?
- Ha — bu HTTPS ustidagi oddiy curl. Muhimi hostingingiz tashqi so'rovlarga ruxsat berishi, deyarli hammasi beradi.
Bu yerda ishlatilgan platformalar
Boshqa qo'llanmalar
Qo'llanmani o'z kalitingiz bilan ishga tushiring
Kalit bir daqiqada. 1 000 bepul kredit, kartasiz, muddatsiz.