API Яндекс.Диск (PHP) #6: Готовый класс для работы с API через Curl

от автора

Заканчивая основную часть курса, в последнем уроке мы с вами рассмотрим полноценный класс для отправки запросов в API Яндекс.Диска. Мы упростим весь написанный ранее код и оставим только необходимые методы.

Зная методы и URL для запросов я решил убрать методы которые являются оболочками и обращаться напрямую к методу sendQueryYaDisk().

Так же я решил строку https://cloud-api.yandex.net/v1/disk добавить в свойство $basicApiUrl, а метод sendQueryYaDisk() теперь первым параметром будет принимать не полный URL, а его окончание в котором указываются методы.

Класс для работы с Яндекс.Диск через API

 class Backup {     protected $token = 'токен';     protected $basicApiUrl = 'https://cloud-api.yandex.net/v1/disk/';      /**      * Method sendQueryYaDisk      *      * @param string $urlQuery URL для отправки запросов      * @param array $arrQuery массив параметров      * @param string $methodQuery метод отправки      *      * @return array      */     public function sendQueryYaDisk(string $methodAPI = '', array $arrQuery = [], string $methodQuery = 'GET'): array     {         if($methodQuery == 'POST') {             $fullUrlQuery = $this->basicApiUrl . $methodAPI;         } else {             $fullUrlQuery = $this->basicApiUrl . $methodAPI . '?' . 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) : [];     }            /**      * Метод для загрузки файлов      *      * @param string $filePath путь до файла      * @param string $dirPath путь до директории на Яндекс.Диск      *      * @return string      */     public function disk_resources_upload(string $filePath, string $dirPath = ''): string     {         $arrParams = [             'path' => $dirPath . basename($filePath),             'overwrite' => 'true',         ];          $urlQuery = 'https://cloud-api.yandex.net/v1/disk/resources/upload';         $resultQuery = $this->sendQueryYaDisk('resources/upload', $arrParams);          if (empty($resultQuery['error'])) {             $fp = fopen($filePath, 'r');                      $ch = curl_init($resultQuery['href']);             curl_setopt($ch, CURLOPT_PUT, true);             curl_setopt($ch, CURLOPT_UPLOAD, true);             curl_setopt($ch, CURLOPT_INFILESIZE, filesize($filePath));             curl_setopt($ch, CURLOPT_INFILE, $fp);             curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);             curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);             curl_setopt($ch, CURLOPT_HEADER, false);             $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);             curl_close($ch);                      return $http_code;         } else {             return $resultQuery['message'];         }     }                /**      * Метод для скачивания файлов на сервера      *      * @param string $filePath путь до файла в Яндекс.Диске      * @param string $dirPath путь до директории на сервере      *      * @return array      */     public function disk_resources_download(string $filePath, string $dirPath = ''): array     {         $arrParams = [             'path' => $filePath,         ];         $resultQuery = $this->sendQueryYaDisk('resources/download', $arrParams);          if(empty($resultQuery['error'])) {             $file_name = $dirPath . basename($filePath);             $file = @fopen($file_name, 'w');                      $ch = curl_init($resultQuery['href']);             curl_setopt($ch, CURLOPT_FILE, $file);             curl_setopt($ch, CURLOPT_HTTPHEADER, array('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);              fclose($file);              return [                 'message' => 'Файл успешно загружен',                 'path' => $file_name,             ];         } else {             return $resultQuery;         }     }       }

Получения общей информации об аккаунте Яндекс.Диска через API

$resultQuery = $backupClass->sendQueryYaDisk();

Получение метаинформации о папках и файлах на Яндекс.Диске через API

$arrParams = [     'path' => '/uploads',     'fields' => 'name,_embedded.items.path',     'limit' => 100,     'offset' => 0,     'preview_crop' => false,     'preview_size' => '',     'sort' => 'created' ]; $resultQuery = $backupClass->sendQueryYaDisk('resources', $arrParams);

Получение метаинформации о папках и файлах в корзине на Яндекс.Диске через API

$arrParams = [     'path' => '/',     'fields' => 'name,_embedded.items.path',     'limit' => 100,     'offset' => 0,     'preview_crop' => false,     'preview_size' => '',     'sort' => 'created' ]; $resultQuery = $backupClass->sendQueryYaDisk('trash/resources', $arrParams);

Получение плоского списка всех файлов с Яндекс.Диска через API

$arrParams = [     'limit' => 100,     'media_type' => 'image',     'offset' => 0,     'fields' => 'name,_embedded.items.path',     'preview_size' => '',     'preview_crop' => false, ]; $resultQuery = $backupClass->sendQueryYaDisk('resources/files', $arrParams);

Получение последних загруженных элементов на Яндекс.Диск через API

$arrParams = [     'limit' => 10,     'media_type' => 'image',     'fields' => 'name,_embedded.items.path',     'preview_size' => '',     'preview_crop' => false, ]; $resultQuery = $backupClass->sendQueryYaDisk('resources/last-uploaded', $arrParams);

Метод для создания директории на Яндекс.Диске через API

$arrParams = [     'path' => '/uploads/prog_time',     'fields' => 'name,_embedded.items.path', ]; $resultQuery = $backupClass->sendQueryYaDisk('resources', $arrParams, 'PUT');

Метод для загрузки файлов на Яндекс.Диск через API

$filePath = $_SERVER['DOCUMENT_ROOT'] . '/public/image.png'; $dirPath = '/uploads'; $resultQuery = $backupClass->disk_resources_upload($filePath, $dirPath);

Метод для скачивания файлов с Яндекс.Диска на сервера через API

$filePath = '/test.docx'; $dirPath = $_SERVER['DOCUMENT_ROOT'] . '/public'; $resultQuery = $backupClass->disk_resources_download($filePath, $dirPath);

Удаление ресурса с Яндекс.Диск через API

$arrParams = [     'path' => '/test.docx',     'permanently' => false,     'fields' => 'name,_embedded.items.path', ]; $resultQuery = $backupClass->sendQueryYaDisk('resources', $arrParams, 'DELETE');

Публикация файла в Яндекс.Диске через API

$arrParams = [     'path' => '/uploads/test.xlsx', ]; $resultQuery = $backupClass->sendQueryYaDisk('resources/publish', $arrParams, 'PUT');

Снятие с публикации файла в Яндекс.Диске через API

$arrParams = [     'path' => '/uploads/test.xlsx', ]; $resultQuery = $backupClass->sendQueryYaDisk('resources/unpublish', $arrParams, 'PUT');

Получение списка публичных файлов с Яндекс.Диска через API

$arrParams = [     'limit' => 10,     'offset' => 0,     'type' => 'dir',     'fields' => 'name,_embedded.items.path',     'preview_size' => '', ]; $resultQuery = $backupClass->sendQueryYaDisk('resources/public', $arrParams);

Метод для востановления файла из корзины в Яндекс.Диске через API

$arrParams = [     'path' => 'trash:/test.docx_f8fb153e7cb73695ee2fdada79a7871b0093596e',     'name' => 'new_name.docx' ]; $resultQuery = $backupClass->sendQueryYaDisk('trash/resources/restore', $arrParams, 'PUT');

Очистка корзины в Яндекс.Диске через API

$resultQuery = $backupClass->sendQueryYaDisk('trash/resources', [], 'DELETE');


ссылка на оригинал статьи https://habr.com/ru/articles/749462/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *