В новом курсе мы с вами познакомимся с 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

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

  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 Яндекс.Диска поближе.

Комментарии (11)


  1. BerdBerd
    21.07.2023 07:16

    Вроде нормальная статья - непонятно, чего заминусована (независимо от моего личного отношения к яндексу).

    И что интересно, у 3-го поста в этом цикле в 3 раза меньше просмотров, а минусов практически столько же, сколько у этого.

    С точки зрения статистики - это явная аномалия.

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

    Обращение к адиинам: @admin, @2moderator

    1. Можете исследовать сложившуюся с этими постами ситуацию и проверить гипотезу насчёт ботов для накрутки и слива статей?

    2. Было бы интересно увидеть список, кто минусил каждую из статей этого цикла - вероятно, это одни и те же люди.


    1. dopusteam
      21.07.2023 07:16
      +5

      Автор спамит ленту статьями низкого качества и рекламит свой ресурс.

      При этом не отвечает на замечания в комментариях.


      1. BerdBerd
        21.07.2023 07:16

        Статьями низкого качества - оценочное суждение.

        Она гораздо больше относится к хабру, чем половина статей на нём - которые никто не минусит.

        Не отвечает на замечания в комментариях - он не в сети достаточно давно - как-бы на комменты моментально отвечают только те, кто сейчас онлайн.


        1. dopusteam
          21.07.2023 07:16

          Так комментарии же на все статьи пустые были, когда я это писал?

          Нет


        1. dopusteam
          21.07.2023 07:16

          Статьями низкого качества - оценочное суждение.

          В статьях есть конкретные замечания к качеству кода, например.

          Да и рейтинг статей говорит о том, что качество низкое.

          Она гораздо больше относится к хабру, чем половина статей на нём - которые никто не минусит.

          А это уже совсем другая проблема, не понимаю, как другие плохие статьи влияют на качество этих статей?

          Не отвечает на замечания в комментариях - он не в сети достаточно давно - как-бы на комменты моментально отвечают только те, кто сейчас онлайн.

          Я вот не поленился, у автора 14 статей и 4 комментария, что как бы намекает


      1. shasoftX
        21.07.2023 07:16
        +1

        С его рейтингом ему сложно отвечать на комментарии.


        1. dopusteam
          21.07.2023 07:16

          Автор может учитывать замечания к коду в комментариях.

          Автор может прочитать комментарии и, например, скрыть статьи и переделать.


          1. Prog-Time Автор
            21.07.2023 07:16

            Здрасте...
            Отвечаю на ваши замечания.
            1) "Автор спамит ленту статьями".
            Одни жаловались что я выкладываю посты через день (это касается курса по разработке ботов), другие пишут что я спамлю ленту. При этом в этих комментариях я вижу знакомые аватарки...
            2) "Статьями низкого качества"
            Согласен! Другое дело статья "Почему сложно понять, что код не должно быть сложно понять?". И рейтинг неплохой и тема полезная. Не спам и не мусор!
            3) "Меня это выбесило..."
            Очень жаль...


            1. dopusteam
              21.07.2023 07:16

              Кроме "статьи через день" и "спамлю ленту" есть ещё варианты.

              Спасибо за ссылку на мою статью, конечно, но не понял к чему это.

              Третья цитата даже не моя.

              Но забавно, что вы тратите свои немногочисленные комментарии не на то, чтоб ответить на комментарии с замечаниями к коду, а на то, чтоб ответить на мои комментарии. Приоритеты не удивляют


    1. MichaelSkirda
      21.07.2023 07:16
      +1

      Меня это выбесило я прошелся по всем статьям и поставил минусы. Думаю я не один такой. Обычные люди которые не могу ставить оценки посмотрели только первую статью и поняли, что это читать дальше не стоит. Все просто.


    1. FanatPHP
      21.07.2023 07:16

      Чушь полная.
      Да, одна, сама по себе отдельно взятая статья, не заслуживает ни плюсов ни минусов. Ну или парочки минусов, если говорить объективно. Что можно видеть по предыдущим публикациям, которые добавлялись нормально, по одной.


      В данном же случае минусуют конкретно за спам. Оно мало того что низкокачественное (что, действительно, не такой уж грех на фоне остальных публикаций) так еще и сразу кучей. Если у автора такое отношение к читателям, то не надо удивляться их ответной реакции.


      Этим и объясняется ваша высосанная из пальца "аномалия". Постил бы по одной, и не было бы никаких аномалий. Получил бы свои пару минусов за каждую.


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