Как программно скачать файл с Яндекс.Диск?

Добрый день.
Есть файлы на яндекс диске с публичными ссылками, например, https://disk.yandex.ru/public/?hash=Zn9rQik51OUzcW...
Как программно скачать файл, например на php?
  • Вопрос задан
  • 20691 просмотр
Пригласить эксперта
Ответы на вопрос 7
вот пример реализации на php:

function get_stat( $url, $headers )
{
    $handle = curl_init();
    curl_setopt( $handle, CURLOPT_URL, $url );
    curl_setopt( $handle, CURLOPT_HTTPHEADER, $headers );
    curl_setopt( $handle, CURLOPT_SSL_VERIFYPEER, false );
    curl_setopt( $handle, CURLOPT_SSL_VERIFYHOST, false );
    curl_setopt( $handle, CURLOPT_RETURNTRANSFER, true );
    $response = curl_exec( $handle );
    $code = curl_getinfo( $handle, CURLINFO_HTTP_CODE );
    return array( "code" => $code, "response" => $response );
}

$url_yandex_disk = "https://yadi.sk/i/byMUqoSLiw3Ki";

$result = get_stat( "https://cloud-api.yandex.net:443/v1/disk/public/resources/download?public_key=" . urlencode( $url_yandex_disk ), array() );
if( $result["code"] == 200 )
{
	$result["response"] = json_decode( $result["response"], true );
	echo '<a href="' . $result["response"]["href"] . '">Скачать</a>';
}
else
{
	echo "error";
}


а здесь работающий пример:
https://getfile.dokpub.com/yandex/

А здесь публикация и получение списка своих файлов на Яндекс диске:
https://getfile.dokpub.com/yandex/publish/

Для тех кто желает генерировать постоянно обновляемые ссылки передаваемые ,например в GET параметре, можно сделать так:

$url_yandex_disk = $_GET["ya_url"];

$result = get_stat( "https://cloud-api.yandex.net:443/v1/disk/public/resources/download?public_key=" . urlencode( $url_yandex_disk ), array() );
if( $result["code"] == 200 )
{
	$result["response"] = json_decode( $result["response"], true );
	header( "Location: " . $result["response"]["href"], true, 302 );
	exit( 0 );
}


а вот на Питоне:
import requests
import pprint
import urllib.parse

targetUrl = "https://yadi.sk/i/03bE933n3PqpG2"
url = "https://cloud-api.yandex.net/v1/disk/public/resources?public_key=" + urllib.parse.quote(targetUrl, safe="")

responseData = requests.get(url)
if responseData.headers["content-type"] in ["application/json; charset=utf-8", "application/json"]:
    print(pprint.pformat(responseData.json()))
else:
    print(responseData)


В некоторых случаях могут возникать ошибки.
Ниже связанные вопросы с текущим ответом:
Как правильно использовать прямую ссылку с Яндекс.диска?
Ответ написан
DeFacto
@DeFacto
https://github.com/KhArtNJava/phpYandexDisk

посмотрите эту либу
Ответ написан
Комментировать
AxisPod
@AxisPod
Запрос с методом HEAD? Можно тем же курлом.
Ответ написан
Комментировать
@xandox
если ссылки публичные качай любым http клиентом
Ответ написан
Комментировать
@nikolaman
а вы решили задачу?
я имею публичную ссылку на файл, надо его каким-то образом скачать.
https://yadi.sk/d/Rzdip...
не могу найти откуда начать
согласно https://tech.yandex.ru/disk/api/reference/public-d... нужен publick_key, но где его взять?
Ответ написан
Комментировать
@mc-Star
Доброго времени суток всем, а подскажите как сделать так что бы как на сайте https://getfile.dokpub.com/yandex/

Когда после https://getfile.dokpub.com/yandex/get/Яндекс ссылка
Выдает напрямую ссылку на файл.

Только сделать это у себя на сайте например что бы Я вводил http://мой.сай/get/Яндекс ссылка
И все ок работало!

Подскажите пожалуйста(
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы