Яндекс Диск API, вывод изображений на сайт

200
18 января 2018, 21:51

Подскажите, как можно с ЯД получить ссылки на изображения, которые реально можно использовать для вывода изображений на страницах сайта ().

Пробовал через библиотеку

use Yandex\Disk\DiskClient; 
// 
$diskClient = new DiskClient(ACCESS_TOKEN); 
$diskClient->setServiceScheme(DiskClient::HTTPS_SCHEME); 
 
// Получаем имена файлов в каталоге 
$dirContent = $diskClient->directoryContents('/Новая папка/'); 
 
$img_names = array(); // массив с именами файлов 
 
foreach ($dirContent as $dirItem) { 
    if ($dirItem['resourceType'] != 'dir') { 
        array_push($img_names, $dirItem['displayName']); 
    } 
} 
 
$img_priviews = array(); 
 
foreach($img_names as $img) { 
	 
	// Файл для которого создается превью 
	$target = '/Новая папка/'.$img; 
	//Сохранение превьюшки 
	$size = 'XXXS'; 
	$file = $diskClient->getImagePreview($target, $size); 
 
	file_put_contents('previews/'.$img, $file['body']); 
	//Вывод превьюшки 
	$size = '1000x'; 
	$file = $diskClient->getImagePreview($target, $size); 
 
	header('Content-Description: File Transfer'); 
	header('Connection: Keep-Alive'); 
	header('Expires: 0'); 
	header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
	header('Date: ' . $file['headers']['date']); 
	header('Content-Type: '.$file['headers']['content-type']); 
	header('Content-Length: ' . $file['headers']['content-length']); 
	header('Accept-Ranges: ' . $file['headers']['accept-ranges']); 
	 
//	array_push($img_priviews, $file['body']); 
} 
 
// Вывод изображений 
foreach($img_priviews as $imgs) { 
	echo $imgs; 
}

Выводит только одну картинку, а в указанную папку на сервере загружает изображения размером 50х50.

Знаю, что можно еще cURL использовать для этих целей, но под данную задачу пока не разобрался как.

P.S.: ЯД для требуется использовать, для освобождения места на сервере (фотографий достаточно много)

Answer 1

Удалось решить следующим образом:

use Yandex\Disk\DiskClient; 
// 
$diskClient = new DiskClient(ACCESS_TOKEN); 
$diskClient->setServiceScheme(DiskClient::HTTPS_SCHEME); 
 
// Получаем имена файлов в каталоге 
$dirContent = $diskClient->directoryContents('/Новая папка/'); 
 
$img_names = array(); // массив с именами файлов 
 
foreach ($dirContent as $dirItem) { 
    if ($dirItem['resourceType'] != 'dir') { 
        array_push($img_names, $dirItem['displayName']); 
    } 
} 
 
$img_priviews = array(); 
 
foreach($img_names as $img) { 
	$headers = array("Authorization: ".ACCESS_TOKEN); 
	$curl = curl_init('https://cloud-api.yandex.net/v1/disk/resources?path=disk:/Новая папка/'.$img.'&preview_size=300x300'); 
	curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); 
	curl_setopt($curl,CURLOPT_HEADER, false); 
	curl_setopt($curl, CURLOPT_TIMEOUT, 30); 
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
	$info = curl_exec($curl); 
 
	$response = json_decode($info); 
	array_push($img_priviews, $response->preview); 
} 
 
foreach($img_priviews as $imgs) { 
	echo '<img src="'.$imgs.'" alt="">'; 
}

READ ALSO
Что означает последовательность \o в PCRE?

Что означает последовательность \o в PCRE?

Значение, которое извлечет PHP из строки '/\\o/' и будет использовано PCRE как патерн, будет равно \oПоскольку 'o' не является управляющим символом,...

208
Laravel не видит сервис-провайдер

Laravel не видит сервис-провайдер

Создаю пакет для LaravelЕсть сервис-провайдер CartServiceProvider, который лежит в пространстве имен Alexxosipov\Cart

246
PHP MYSQL Структура пользовательского чата

PHP MYSQL Структура пользовательского чата

Здравствуйте, планирую сделать на сайте пользовательский чатТо есть не общий чат, а между конкретными пользователями, два человека

235
Библиотеки php для yii2 на os x

Библиотеки php для yii2 на os x

Добрый день, инсталлирую на локальный сервер(php-71/apache-2

228