API Яндекс.Диск (PHP) #1: Подключение и настройка приложения — PROG-TIME

API Яндекс.Диск (PHP) #1: Подключение и настройка приложения

18.04.2023
Содержание:

В новом курсе мы с вами познакомимся с API Яндекс.Диска, научимся создавать директории, добавлять файлы и просматривать имеющиеся ресурсы в облаке. В процессе обучения мы с вами будем писать скрипты на PHP с использованием Curl и по окончанию курса разработаем полноценный класс для работы с Яндекс Диском через API.

Создание приложения для работы с API Яндекс.Диск

Для начала нам необходимо создать наше приложение и получить токен.

Перейдите по ссылке и заполните форму

https://oauth.yandex.ru/client/new

Важные моменты:

  1. В качестве платформы приложения нужно выбрать «Веб-сервисы»
  2. Для полного доступа к Яндекс.Диску нужно прописать в поле слово 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 Яндекс.Диска поближе.

Материалы курса