В новом курсе мы с вами познакомимся с API Яндекс.Диска, научимся создавать директории, добавлять файлы и просматривать имеющиеся ресурсы в облаке. В процессе обучения мы с вами будем писать скрипты на PHP с использованием Curl и по окончанию курса разработаем полноценный класс для работы с Яндекс Диском через API.
Полный список всех записей курса находится на сайте https://prog-time.ru/course_cat/yandeks-disk-api-php/ или в публикациях на Хабр https://habr.com/ru/users/Prog-Time/posts/
Создание приложения для работы с 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, для русскоязычного — Загрузки и т. д. На данный момент поддерживаются следующие папки:
|
На этом можно пока закончить. В следующих уроках мы познакомимся с API Яндекс.Диска поближе.
ссылка на оригинал статьи https://habr.com/ru/articles/749156/
Добавить комментарий