В новом курсе мы с вами познакомимся с 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 Яндекс.Диска поближе.
BerdBerd
Вроде нормальная статья - непонятно, чего заминусована (независимо от моего личного отношения к яндексу).
И что интересно, у 3-го поста в этом цикле в 3 раза меньше просмотров, а минусов практически столько же, сколько у этого.
С точки зрения статистики - это явная аномалия.
Выглядит, как-будто на сайте действует ботовая сеть для слива неугодных и залива кармы и рейтинга кому надо.
Обращение к адиинам: @admin, @2moderator
Можете исследовать сложившуюся с этими постами ситуацию и проверить гипотезу насчёт ботов для накрутки и слива статей?
Было бы интересно увидеть список, кто минусил каждую из статей этого цикла - вероятно, это одни и те же люди.
dopusteam
Автор спамит ленту статьями низкого качества и рекламит свой ресурс.
При этом не отвечает на замечания в комментариях.
BerdBerd
Статьями низкого качества - оценочное суждение.
Она гораздо больше относится к хабру, чем половина статей на нём - которые никто не минусит.
Не отвечает на замечания в комментариях - он не в сети достаточно давно - как-бы на комменты моментально отвечают только те, кто сейчас онлайн.
dopusteam
Нет
dopusteam
В статьях есть конкретные замечания к качеству кода, например.
Да и рейтинг статей говорит о том, что качество низкое.
А это уже совсем другая проблема, не понимаю, как другие плохие статьи влияют на качество этих статей?
Я вот не поленился, у автора 14 статей и 4 комментария, что как бы намекает
shasoftX
С его рейтингом ему сложно отвечать на комментарии.
dopusteam
Автор может учитывать замечания к коду в комментариях.
Автор может прочитать комментарии и, например, скрыть статьи и переделать.
Prog-Time Автор
Здрасте...
Отвечаю на ваши замечания.
1) "Автор спамит ленту статьями".
Одни жаловались что я выкладываю посты через день (это касается курса по разработке ботов), другие пишут что я спамлю ленту. При этом в этих комментариях я вижу знакомые аватарки...
2) "Статьями низкого качества"
Согласен! Другое дело статья "Почему сложно понять, что код не должно быть сложно понять?". И рейтинг неплохой и тема полезная. Не спам и не мусор!
3) "Меня это выбесило..."
Очень жаль...
dopusteam
Кроме "статьи через день" и "спамлю ленту" есть ещё варианты.
Спасибо за ссылку на мою статью, конечно, но не понял к чему это.
Третья цитата даже не моя.
Но забавно, что вы тратите свои немногочисленные комментарии не на то, чтоб ответить на комментарии с замечаниями к коду, а на то, чтоб ответить на мои комментарии. Приоритеты
неудивляютMichaelSkirda
Меня это выбесило я прошелся по всем статьям и поставил минусы. Думаю я не один такой. Обычные люди которые не могу ставить оценки посмотрели только первую статью и поняли, что это читать дальше не стоит. Все просто.
FanatPHP
Чушь полная.
Да, одна, сама по себе отдельно взятая статья, не заслуживает ни плюсов ни минусов. Ну или парочки минусов, если говорить объективно. Что можно видеть по предыдущим публикациям, которые добавлялись нормально, по одной.
В данном же случае минусуют конкретно за спам. Оно мало того что низкокачественное (что, действительно, не такой уж грех на фоне остальных публикаций) так еще и сразу кучей. Если у автора такое отношение к читателям, то не надо удивляться их ответной реакции.
Этим и объясняется ваша высосанная из пальца "аномалия". Постил бы по одной, и не было бы никаких аномалий. Получил бы свои пару минусов за каждую.
Хотя нет. Вторая серия статей, такая же ученическая и искусственно раздутая, как и первая, уже бы не прокатила. Заминусовали бы в любом случае. Только не так массово.