В новом курсе мы с вами познакомимся с API Яндекс.Диска, научимся создавать директории, добавлять файлы и просматривать имеющиеся ресурсы в облаке. В процессе обучения мы с вами будем писать скрипты на PHP с использованием Curl и по окончанию курса разработаем полноценный класс для работы с Яндекс Диском через API.
Создание приложения для работы с API Яндекс.Диск
Для начала нам необходимо создать наше приложение и получить токен.
Перейдите по ссылке и заполните форму
https://oauth.yandex.ru/client/new
Важные моменты:
- В качестве платформы приложения нужно выбрать «Веб-сервисы»
- Для полного доступа к Яндекс.Диску нужно прописать в поле слово cloud и добавить все доступные значения.
После успешного создания приложения вас перебросит в личный кабинет, во вкладку «Мои приложения». Здесь вам нужно скопировать «ClientID» и вставить его в ссылку представленную ниже, для получения токена вашего приложения.
https://oauth.yandex.ru/authorize?response_type=token&client_id=идентификатор_клиента
Далее вам нужно перейти по этой ссылке в браузере и если вы все сделали правильно вас перекинет на сайт который вы указали в качестве редиректа при создание приложения. К вашему базовому URL будет добавлен GET параметр с указанием токена (access_token), который вам нужно скопировать и вставить в ваш скрипт.
Создание класса для работы с API Яндекс.Диск
Теперь давайте начнём создавать наш PHP класс. В качестве примера я буду создавать класс для сохранения бэкапов на Яндекс.Диск.
Основной функционал нашего класса:
- получение информации о файлах находящихся на диске, доступном объёме памяти и размере корзины
- получение, загрузка и удаление файлов и директорий
- работа с корзиной
Наш класс будет называться примитивно Backup и для начала иметь 2 метода: метод для отправки запросов и метод для получение общей информации об аккаунте Яндекс.Диска.
Так же нашему классу нужно добавить 1 свойство $token, в который необходимо прописать значение нашего токена.
Метод для отправки запросов в Яндекс.Диск
Метод для отправки запросов sendQueryYaDisk() будет принимать 3 параметра и будет универсальным для любых типов запросов.
/**
* Method sendQueryYaDisk
*
* @param string $urlQuery URL для отправки запросов
* @param array $arrQuery массив параметров
* @param string $methodQuery метод отправки
*
* @return array
*/
public function sendQueryYaDisk(string $urlQuery, array $arrQuery = [], string $methodQuery = 'GET'): array
{
if($methodQuery == 'POST') {
$fullUrlQuery = $urlQuery;
} else {
$fullUrlQuery = $urlQuery . '?' . http_build_query($arrQuery);
}
$ch = curl_init($fullUrlQuery);
switch ($methodQuery) {
case 'PUT':
curl_setopt($ch, CURLOPT_PUT, true);
break;
case 'POST':
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($arrQuery));
break;
case 'DELETE':
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
break;
}
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: OAuth ' . $this->token]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$resultQuery = curl_exec($ch);
curl_close($ch);
return (!empty($resultQuery)) ? json_decode($resultQuery, true) : [];
}
Метод для получения общей информации о Яндекс.Диске
Для получения общей информации о Яндекс.Диске необходимо отправить запрос на https://cloud-api.yandex.net/v1/disk/.
/**
* Метод для получения общей информации об аккаунте
*
* @return array
*/
public function disk_getInfo(): array
{
$urlQuery = 'https://cloud-api.yandex.net/v1/disk/';
return $this->sendQueryYaDisk($urlQuery);
}
Пример ответа:
{
"trash_size": 4631577437,
"total_space": 319975063552,
"used_space": 26157681270,
"system_folders":
{
"applications": "disk:/Приложения",
"downloads": "disk:/Загрузки/"
}
}
Элемент | Описание |
---|---|
trash_size | Объем файлов, находящихся в Корзине, в байтах. |
total_space | Общий объем Диска, доступный пользователю, в байтах. |
used_space | Объем файлов, уже хранящихся на Диске, в байтах. |
system_folders | Абсолютные адреса системных папок Диска. Имена папок зависят от языка интерфейса пользователя в момент создания персонального Диска. Например, для англоязычного пользователя создается папка Downloads, для русскоязычного — Загрузки и т. д.На данный момент поддерживаются следующие папки:applications — папка для файлов приложений;downloads — папка для файлов, загруженных из интернета (не с устройства пользователя). |
На этом можно пока закончить. В следующих уроках мы познакомимся с API Яндекс.Диска поближе.