» » » Публикация и закрытие файла на Yandex.Disk [php+curl]

Публикация и закрытие файла на Yandex.Disk [php+curl]

 

Необходимость получить ссылку для скачивания файла с Яндекс Диск привела меня к написанию скрипта. И конечно же написан он на PHP.

Основные переменные я прокомментировал, все элементарно. В примере файл test.zip, который находится в каталоге folder.

Скрипт работает очень быстро, тесты показали максимальное время 0.2 сек. Спасибо Яше за этот чудесный сервис.

Напомню, что после регистрации вы бесплатно получите 10 гб облачной памяти и возможность использовать нижеприведенный скрипт.

 

<?php
	
	$file = '/folder/test.zip'; //имя каталога и файла в нем. Если файл в корне то /test.zip
	$do = 1; //действие над файлом: 1 для publish и 0 для unpublish
	
	//логин и пароль от Яндекса
	$login = "логин"; //можно и без @yandex.ru
	$password = "пароль";
	
	$headers = array("Authorization: Basic " . base64_encode($login . ":" . $password)); //формируем заголовки для успешной авторизации
	$dothis = $do ? 'publish' : 'unpublish';
	
	 
	$file = str_replace(' ', '%20', $file);
	$curl = curl_init('https://webdav.yandex.ru'.$file.'?'.$dothis);
	    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
	    curl_setopt($curl,CURLOPT_HEADER, true);
	    curl_setopt($curl, CURLOPT_POST, true);
	    curl_setopt($curl, CURLOPT_POSTFIELDS, $file.'?'.$do);
	    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
	    curl_exec($curl);
	    
	 $info = curl_getinfo($curl);
	
	if ($do && $info['http_code'] == 302) {
	    echo $info['redirect_url'];
	} elseif ($info['http_code'] == 200) {
	    echo 'Файл '.$file.' изъят из паблика';
	}else echo 'Неудача!';
	
	?>

 

UPD: Скрипт не срабатывал когда в имени файла имели место пробелы. Добавил строчку кода:

$file = str_replace(' ', '%20', $file);

Изменено 11-07-2014, 15:04: исправил баг
[21 ноября 2013 09:58] Гость:
Пробовал отправить из Денвера, всегда пишет "Неудача!" В чем может быть проблема? А сам скрипт нужен.
[21 ноября 2013 12:41] pur1tan:
проверьте существует ли файл на яндекс диске? уточняю, что скрипт не закачивает файл на яндекс, а только шарит файл на сервисе и получает ссылку на него.
[4 апреля 2014 12:14] St.eV:
Что-то у меня не получается авторизоваться в Яндексе.
Задача такая - авторизоваться, потом перейти в Метрику и там распарсить пользовательский отчет (которого нет а АПИ Метрики).

Можете помочь?
[4 апреля 2014 12:14] St.eV:
Помочь с авторизацией )
Парсить у меня получается неплохо.
[7 апреля 2014 15:05] pur1tan:
Авторизация для яндекс метрики - вовсе другая степь. Лучше сделать это через api
[11 июля 2014 10:46] dmuradz:
Добрый день, подскажите плиз, как получить превью фотографий с яндекс диска?
$login = "my_login"; //можно и без @yandex.ru
$password = "my_password ";

$headers = array("Authorization: Basic " . base64_encode($login . ":" . $password));

$ch = curl_init ();
curl_setopt ($ch , CURLOPT_URL , 'https://webdav.yandex.ru/3.png?preview&size=250x');
curl_setopt ($ch , CURLOPT_USERAGENT , "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11");
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt ($ch , CURLOPT_HEADER , 0);
curl_setopt ($ch , CURLOPT_RETURNTRANSFER , 1 );
curl_setopt ($ch , CURLOPT_BINARYTRANSFER , 1);
$content = curl_exec($ch);
curl_close($ch);

в результате он ничего не возвращает.
[11 июля 2014 16:16] pur1tan:
Доброго времени. Специально для вас соорудил дополнительный скрипт для извлечения превью.
http://antonov.work/51-poluchaem-ssylku-na-izobrazhenie-iz-yandeksdisk-phpcurl.html
[11 июля 2014 18:17] dmuradz:
спасибо, хороший человек :D
[17 июля 2014 17:17] dmuradz:
а как пройти oauth регистрацию?
token получил, но при отправке запроса, выводит ошибку 500
[21 июля 2014 06:02] pur1tan:
в их oAuth не вникал, не могу подсказать
[10 марта 2015 07:05] disqus_9WVzTYYbHK:
А можно сделать так, чтобы скрипт публиковал и выводил ссылки на несколько файлов, которые находятся в папке?