🌐 Язык: Русский | English
Комплексный PHP SDK для интеграции с Yandex Disk API. Эта библиотека предоставляет чистый, интуитивный интерфейс для управления файлами и папками на Яндекс Диске с полным покрытием официального API.
| Метод | Эндпоинт | Документация | Описание |
|---|---|---|---|
getAuthorizationUrl() |
- | OAuth Guide | Генерация URL авторизации OAuth |
getCapacity() |
GET / |
Disk Info | Получение информации о диске |
getMeta() |
GET /resources |
Metadata | Получение метаданных ресурса |
addMeta() |
PATCH /resources |
Add Metadata | Добавление пользовательских метаданных |
getAllFiles() |
GET /resources/files |
All Files | Получение плоского списка всех файлов |
getRecentUploads() |
GET /resources/last-uploaded |
Recent Uploads | Получение недавно загруженных файлов |
getRecentPublished() |
GET /resources/public |
Published Files | Получение недавно опубликованных файлов |
createFolder() |
PUT /resources |
Create Folder | Создание папки |
uploadFile() |
GET /resources/upload |
Upload File | Загрузка файла |
uploadFromUrl() |
POST /resources/upload |
Upload from URL | Загрузка файла из интернета |
downloadFile() |
GET /resources/download |
Download File | Скачивание файла |
copy() |
POST /resources/copy |
Copy Resource | Копирование файла/папки |
move() |
POST /resources/move |
Move Resource | Перемещение файла/папки |
delete() |
DELETE /resources |
Delete Resource | Удаление файла/папки |
publish() |
PUT /resources/publish |
Publish Resource | Публикация ресурса |
unpublish() |
PUT /resources/unpublish |
Unpublish Resource | Отмена публикации ресурса |
getAvailablePublicSettings() |
GET /public/resources/public-settings/available |
Available Settings | Получение доступных публичных настроек |
getPublicSettings() |
GET /public/resources/public-settings |
Public Settings | Получение публичных настроек ресурса |
changePublicSettings() |
PUT /resources/public |
Change Settings | Изменение публичных настроек |
getPublicResourceMeta() |
GET /public/resources |
Public Metadata | Получение метаданных публичного ресурса |
downloadPublicResource() |
GET /public/resources/download |
Download Public | Скачивание публичного ресурса |
savePublicResource() |
POST /public/resources/save |
Save Public Resource | Сохранение публичного ресурса |
getTrash() |
GET /trash/resources |
Trash List | Получение содержимого корзины |
restoreFromTrash() |
PUT /trash/resources/restore |
Restore from Trash | Восстановление из корзины |
clearTrash() |
DELETE /trash/resources |
Clear Trash | Очистка корзины |
getOperationStatus() |
GET /operations/{id} |
Operation Status | Получение статуса операции |
getPublicResourcesOwnedByUser() |
GET /public/resources/admin/public-resources |
Owned Resources | Администратор: публичные ресурсы пользователя |
getPublicResourcesAccessedByUser() |
GET /public/resources/admin/accessible-resources |
Accessible Resources | Администратор: доступные пользователю ресурсы |
unpublishUserResource() |
PUT /public/resources/admin/unpublish |
Admin Unpublish | Администратор: отмена публикации ресурса |
Для работы с Yandex Disk API необходимо получить OAuth-токен. Следуйте этим шагам:
- Зайдите под своей учётной записью на Яндекс OAuth: https://oauth.yandex.ru/
- Нажмите на кнопку "+ Создать"
- Во всплывающем окне "Какое приложение хотите создать?" укажите "Для доступа к API или отладки" и нажмите "Перейти к созданию"
- Заполните форму:
- Название сервиса: Укажите название вашего приложения
- Почта для связи: Ваш контактный email
- Доступ к данным: Выберите необходимые права:
cloud_api:disk.write— Запись в любом месте на Дискеcloud_api:disk.read— Чтение всего Дискаcloud_api:disk.app_folder— Доступ к папке приложения на Дискеcloud_api:disk.info— Доступ к информации о Диске
После создания приложения вам будут показаны:
- ClientID — понадобится для получения OAuth-токена
- Client secret — для работы с Яндекс Диском он не понадобится
Используйте функцию getAuthorizationUrl() для генерации ссылки авторизации:
use Tigusigalpa\YandexDisk\YandexDiskClient;
$clientId = 'ваш_client_id_из_настроек_приложения';
$authUrl = YandexDiskClient::getAuthorizationUrl($clientId);
echo "Перейдите по ссылке для авторизации:\n";
echo $authUrl;
// Вывод: https://oauth.yandex.ru/authorize?response_type=token&client_id=<ClientID>Или сформируйте ссылку вручную:
https://oauth.yandex.ru/authorize?response_type=token&client_id=<ClientID>
- Перейдите по сгенерированной ссылке
- Авторизуйтесь в своём аккаунте Яндекса (если еще не авторизованы)
- Разрешите доступ для вашего приложения
- После подтверждения вы будете перенаправлены на страницу с токеном в URL
- Скопируйте токен на странице, что-то вроде
y0__xCD2tUFGKDjOyD2-Myl...
Полученный токен используйте при создании клиента:
use Tigusigalpa\YandexDisk\YandexDiskClient;
$accessToken = 'ваш_oauth_токен';
$client = new YandexDiskClient($accessToken);
// Теперь можно использовать все методы API
$diskInfo = $client->getCapacity();// Получение информации о диске
$diskInfo = $client->getCapacity();
echo "Использовано: " . $diskInfo['used'] . " байт\n";
echo "Всего: " . $diskInfo['total_space'] . " байт\n";
echo "Свободно: " . ($diskInfo['total_space'] - $diskInfo['used']) . " байт\n";use Tigusigalpa\YandexDisk\Models\{Resource, DiskInfo};
// Получение информации о диске
$diskData = $client->getCapacity();
$diskInfo = DiskInfo::fromArray($diskData);
echo "Всего: " . $diskInfo->getTotalSpace() . " байт\n";
echo "Использовано: " . $diskInfo->getUsedSpace() . " байт\n";
echo "Свободно: " . $diskInfo->getFreeSpace() . " байт\n";
echo "Использование: " . $diskInfo->getUsagePercentage() . "%\n";
echo "Корзина: " . $diskInfo->getTrashSize() . " байт\n";
echo "Платный: " . ($diskInfo->isPaid() ? 'Да' : 'Нет') . "\n";
// Получение метаданных ресурса
$meta = $client->getMeta('/disk/MyFile.txt');
$resource = Resource::fromArray($meta);
echo "Имя: " . $resource->getName() . "\n";
echo "Тип: " . $resource->getType() . "\n"; // 'file' или 'dir'
echo "Размер: " . $resource->getSize() . " байт\n";
echo "Создан: " . $resource->getCreated() . "\n";
echo "Изменён: " . $resource->getModified() . "\n";
echo "MIME тип: " . $resource->getMimeType() . "\n";
echo "MD5: " . $resource->getMd5() . "\n";
echo "SHA256: " . $resource->getSha256() . "\n";// Загрузка файла
$result = $client->uploadFile(
'/local/path/file.txt',
'/disk/MyFolder/file.txt',
true // перезаписать существующий файл
);
echo "Статус: " . $result['status'] . "\n"; // 201 для успеха
echo "Успешно: " . ($result['success'] ? 'Да' : 'Нет') . "\n";// Скачивание файла
$success = $client->downloadFile(
'/disk/MyFile.txt',
'/local/path/downloaded.txt'
);
echo $success ? "Скачивание успешно\n" : "Скачивание не удалось\n";// Копирование файла
$result = $client->copy(
'/disk/original.txt',
'/disk/copy.txt',
true // перезаписать, если существует
);
echo "Скопировано в: " . $result['path'] . "\n";// Перемещение файла
$result = $client->move(
'/disk/old-location/file.txt',
'/disk/new-location/file.txt',
true // перезаписать, если существует
);
echo "Перемещено в: " . $result['path'] . "\n";// Удаление файла
$result = $client->delete(
'/disk/file.txt',
true // окончательное удаление (false = в корзину)
);
echo "Удалено\n";// Создание папки
$result = $client->createFolder('/disk/MyNewFolder');
echo "Папка создана: " . $result['path'] . "\n";
// Создание вложенной структуры папок
$client->createFolder('/disk/Projects');
$client->createFolder('/disk/Projects/WebDev');
$client->createFolder('/disk/Projects/WebDev/Site1');// Получение всех файлов на диске
$allFiles = $client->getAllFiles(limit: 100, offset: 0);
echo "Всего файлов: " . $allFiles['total'] . "\n";
foreach ($allFiles['items'] as $file) {
$resource = Resource::fromArray($file);
echo "- " . $resource->getName() . " (" . $resource->getType() . ")\n";
}
// Получение недавно загруженных файлов
$recent = $client->getRecentUploads(limit: 10);
foreach ($recent['items'] as $file) {
$resource = Resource::fromArray($file);
echo "- " . $resource->getName() . "\n";
}
// Список файлов в директории
$dirMeta = $client->getMeta('/disk/MyFolder');
$directory = Resource::fromArray($dirMeta);
if ($directory->isDir()) {
foreach ($directory->getItems() as $item) {
echo "- " . $item->getName() . " (" . $item->getSize() . " байт)\n";
}
echo "Всего элементов: " . $directory->getTotalItems() . "\n";
}// Добавление пользовательских метаданных
$result = $client->addMeta('/disk/file.txt', [
'description' => 'Моё пользовательское описание',
'author' => 'John Doe',
'version' => '1.0.0'
]);
// Получение метаданных ресурса
$meta = $client->getMeta('/disk/file.txt');
$resource = ResourceResponse::fromArray($meta);
// Доступ к пользовательским свойствам
$customProps = $resource->toArray()['custom_properties'] ?? [];// Сделать файл публичным
$result = $client->publish('/disk/document.pdf');
echo "Публичный URL: " . $result['public_url'] . "\n";
// Вывод: https://yadi.sk/d/abc123...// Получение недавно опубликованных файлов
$published = $client->getRecentPublished(limit: 10);
foreach ($published['items'] as $file) {
$resource = Resource::fromArray($file);
if ($resource->isPublished()) {
echo "- " . $resource->getName() . "\n";
echo " URL: " . $resource->getPublicUrl() . "\n";
echo " Ключ: " . $resource->getPublicKey() . "\n";
}
}// Отозвать публичный доступ
$result = $client->unpublish('/disk/document.pdf');// Получение доступных публичных настроек
$available = $client->getAvailablePublicSettings();
print_r($available);
// Получение текущих публичных настроек ресурса
$settings = $client->getPublicSettings('/disk/document.pdf');
print_r($settings);
// Изменение публичных настроек
$client->changePublicSettings('/disk/document.pdf', [
'access' => [
'type' => 'public',
'view' => true,
'comment' => true,
'edit' => false
]
]);// Получение метаданных публичного ресурса
$publicMeta = $client->getPublicResourceMeta('https://yadi.sk/d/abc123...');
echo "Публичный файл: " . $publicMeta['name'] . "\n";
// Скачивание публичного ресурса
$client->downloadPublicResource('https://yadi.sk/d/abc123...', '/local/downloaded.pdf');
// Сохранение публичного ресурса на ваш диск
$saveResult = $client->savePublicResource(
'https://yadi.sk/d/abc123...',
'saved-document.pdf',
'/disk/downloads/'
);// Получение содержимого корзины
$trash = $client->getTrash('/', 50, 0);
foreach ($trash['items'] as $item) {
echo "- " . $item['name'] . " (удалён: " . $item['deleted'] . ")\n";
}
// Восстановление файла из корзины
$restoreResult = $client->restoreFromTrash('/disk/document.pdf');
echo "Восстановлено: " . $restoreResult['name'] . "\n";
// Восстановление с новым именем
$client->restoreFromTrash('/disk/document.pdf', 'restored-document.pdf', false);
// Удаление конкретного файла из корзины
$client->clearTrash('/disk/document.pdf');
// Очистка всей корзины
$client->clearTrash();// Загрузка файла из интернет-URL
$uploadResult = $client->uploadFromUrl(
'https://example.com/document.pdf',
'/disk/downloads/document.pdf'
);
echo "Загрузка начата\n";
// Проверка статуса операции, если асинхронная
if (isset($uploadResult['href'])) {
$operationId = basename($uploadResult['href']);
$status = $client->getOperationStatus($operationId);
echo "Статус: " . $status['status'] . "\n";
echo "Завершено: " . ($status['status'] === 'success' ? 'Да' : 'Нет') . "\n";
}
// Загрузка без перенаправлений
$client->uploadFromUrl(
'https://example.com/document.pdf',
'/disk/downloads/document.pdf',
true // отключить перенаправления
);// Получение публичных ресурсов, принадлежащих конкретному пользователю
$ownedResources = $client->getPublicResourcesOwnedByUser(
'user-uid-123',
'org-id-456',
20,
0
);
foreach ($ownedResources['items'] as $resource) {
echo "- " . $resource['name'] . " (" . $resource['public_url'] . ")\n";
}
// Получение публичных ресурсов, доступных пользователю (включая групповой доступ)
$accessibleResources = $client->getPublicResourcesAccessedByUser(
'user-uid-123',
'org-id-456',
true, // включить групповой доступ
20
);
// Отмена публикации ресурса пользователя как администратор
$client->unpublishUserResource(
'public-key-789',
'user-uid-123',
'org-id-456'
);composer require tigusigalpa/yandex-disk-phpОпубликуйте конфигурационный файл:
php artisan vendor:publish --provider="Tigusigalpa\YandexDisk\YandexDiskServiceProvider"Добавьте в ваш файл .env:
YANDEX_DISK_ACCESS_TOKEN=ваш_oauth_токенuse Tigusigalpa\YandexDisk\Facades\YandexDisk;
// Использование фасада
$diskInfo = YandexDisk::getCapacity();
// Использование сервис-контейнера
$client = app('yandex-disk');
$client->uploadFile($localPath, $remotePath);SDK предоставляет комплексную обработку ошибок с пользовательскими исключениями:
use Tigusigalpa\YandexDisk\Exceptions\YandexDiskException;
try {
$client->uploadFile('/path/to/file.txt', '/disk/file.txt');
} catch (YandexDiskException $e) {
echo "Ошибка: " . $e->getMessage() . "\n";
echo "Код ошибки: " . $e->getErrorCode() . "\n";
// Получить полный ответ API, если доступен
if ($e->getResponse()) {
print_r($e->getResponse());
}
}| Категория | Реализовано | Всего | Процент |
|---|---|---|---|
| Информация о диске | ✅ 1 | 1 | 100% |
| Операции с файлами | ✅ 8 | 8 | 100% |
| Публичные ресурсы | ✅ 8 | 8 | 100% |
| Управление корзиной | ✅ 3 | 3 | 100% |
| Метаданные | ✅ 2 | 2 | 100% |
| Методы администратора | ✅ 3 | 3 | 100% |
| Операции | ✅ 1 | 1 | 100% |
| Всего | ✅ 26 | 26 | 100% |
Вклады приветствуются! Не стесняйтесь отправлять Pull Request.
Этот пакет лицензирован под MIT License. Подробности смотрите в файле LICENSE.
Для проблем, вопросов или вкладов:
- Создайте issue на GitHub
- Проверьте официальную документацию
- Ознакомьтесь с руководством по устранению неполадок
Сделано с ❤️ для PHP сообщества
