Как загрузить файл на яндекс диск
Перейти к содержимому

Как загрузить файл на яндекс диск

  • автор:

Как перенести файлы с
Яндекс.Диска и Гугл Диска
в Облако Mail.ru

Если вы одновременно пользуетесь Яндекс.Диском, Гугл Диском, Облаком Mail.ru и другими хранилищами и периодически вам нужно переносить между ними данные, обратите внимание на Диск-О:

Что такое
Диск-О:

Это облачный агрегатор, в котором можно объединить все используемые хранилища в одном пространстве и переносить данные между ними в один клик.

Как работает Диск-О:?

Вы подключаете к программе все используемые облака и работаете с ними, как с обычными папками в проводнике. При этом открывать браузер или скачивать отдельные приложения Яндекс и Гугл Диска необязательно — достаточно приложения Диск-О:

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

Предлагаю вашему вниманию PHP скрипт автоматической загрузки файлов на сервис Яндекс.Диск. Скрипт прост до безобразия, достаточно передать ему в качестве параметров логин, пароль и путь к файлу и в результате он загрузит ваш файл на сервис и выдаст вам ссылку на него. Не знаю, сколько еще меня вместе с моими постами будет терпеть Яндекс, но все-таки приведу исходный код скрипта 🙂

  1. print uploadFile(ваш_логин, ваш_пароль, путь_к_файлу). «\n» ;
  2. function uploadFile( $login , $password , $filename )
  3. $cookie_file = ‘cookie.txt’ ;
  4. $user_agent = ‘Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6’ ;
  5. // логинимся в систему
  6. $ch = curl_init( ‘https://passport.yandex.ru/passport?mode=auth’ );
  7. $fields = array ();
  8. $fields [] = «login=$login» ;
  9. $fields [] = «passwd=$password» ;
  10. $fields [] = «twoweeks=yes» ;
  11. curl_setopt( $ch , CURLOPT_POSTFIELDS, implode( ‘&’ , $fields ));
  12. curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1 );
  13. curl_setopt( $ch , CURLOPT_USERAGENT, $user_agent );
  14. curl_setopt( $ch , CURLOPT_FOLLOWLOCATION, 1 );
  15. curl_setopt( $ch , CURLOPT_COOKIEJAR, $cookie_file );
  16. curl_setopt( $ch , CURLOPT_SSL_VERIFYPEER, 0 );
  17. curl_setopt( $ch , CURLOPT_POST, 1 );
  18. $result = curl_exec( $ch );
  19. $info = curl_getinfo( $ch );
  20. if ( $info [ ‘http_code’ ] != 200 ) return false ;
  21. // запрашиваем сервер для загрузки файла
  22. $url = ‘http://narod.yandex.ru/disk/getstorage/?rnd=’ . (mt_rand( 0 , 777777 ) + 777777 );
  23. curl_setopt( $ch , CURLOPT_URL, $url );
  24. curl_setopt( $ch , CURLOPT_POST, 0 );
  25. curl_setopt( $ch , CURLOPT_COOKIEFILE, $cookie_file );
  26. $result = curl_exec( $ch );
  27. $info = curl_getinfo( $ch );
  28. if (preg_match( ‘/»url»:»(.*?)», «hash»:»(.*?)», «purl»:»(.*?)»/’ , $result , $m ))
  29. $upload_url = $m [ 1 ];
  30. $hash = $m [ 2 ];
  31. $purl = $m [ 3 ];
  32. > else
  33. return false ;
  34. >
  35. // загружаем файл на сервер
  36. $url = $upload_url . ‘?tid=’ . $hash ;
  37. $fields = array ();
  38. $fields [ ‘file’ ] = ‘@’ . $filename ;
  39. curl_setopt( $ch , CURLOPT_URL, $url );
  40. curl_setopt( $ch , CURLOPT_REFERER, ‘http://narod.yandex.ru/’ );
  41. curl_setopt( $ch , CURLOPT_POST, 1 );
  42. curl_setopt( $ch , CURLOPT_POSTFIELDS, $fields );
  43. $result = curl_exec( $ch );
  44. $info = curl_getinfo( $ch );
  45. if ( $info [ ‘http_code’ ] != 200 ) return false ;
  46. // print_r($info);
  47. // проверяем прогресс бар
  48. $url = $purl . ‘?tid=’ . $hash . ‘&rnd=’ . (mt_rand( 0 , 777777 ) + 777777 );
  49. curl_setopt( $ch , CURLOPT_URL, $url );
  50. curl_setopt( $ch , CURLOPT_POST, 0 );
  51. $result = curl_exec( $ch );
  52. if (!preg_match( ‘/»status»: «done»/’ , $result , $m ))
  53. return false ;
  54. >
  55. // переходим на страницу и определяем ссылку
  56. $url = ‘http://narod.yandex.ru/disk/last/’ ;
  57. curl_setopt( $ch , CURLOPT_URL, $url );
  58. $result = curl_exec( $ch );
  59. curl_close( $ch );
  60. if (preg_match( ‘//’ , $result , $m ))
  61. $fileURL = trim( $m [ 1 ]);
  62. return $fileURL ;
  63. >
  64. return false ;
  65. >
  66. ?>
  • яндекс.диск
  • загрузка файлов
  • php
  • программирование

API Яндекс.Диск (PHP) #3: Загрузка и скачивание файлов

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

Создание директорий на Яндекс.Диск через API

Для создания директорий мы будем отправлять запросы по уже известному нам пути.

https://cloud-api.yandex.net/v1/disk/resources/

Только в данном случае нам нужно отправлять запросы методом PUT.

Мы в предыдущих уроках подготовили наш метод sendQueryYaDisk() под отправку PUT запросов, поэтому просто передадим ему в качестве третьего параметра строку ‘PUT’.

/** * Метод для создания директории * * @param array $arrParams параметры для отправки запроса * * @return array */ public function disk_resources_create_dir(array $arrParams): array < $urlQuery = 'https://cloud-api.yandex.net/v1/disk/resources/'; return $this->sendQueryYaDisk($urlQuery, $arrParams, 'PUT'); >

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

Загрузка файлов производится с помощью двух запросов:

  • запрос на получение ссылки для загрузки
  • отправка файлов по полученному URL из предыдущего запроса

Я объединил эти два запроса в один метод.

Метод будет принимать 2 параметра:

  • $filePath — путь до файла на вашем сервере
  • $dirPath — путь до директории на Яндекс.Диск куда нужно загрузить файл
/** * Метод для загрузки файлов * * @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($urlQuery, $arrParams); /* ----------------- */ if (empty($resultQuery['error'])) < /* Если ошибки нет, то отправляем файл на полученный URL. */ $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']; >>

Скачивание файла с Яндекс.Диска через API

Скачивание файлов происходит так же с помощью двух запросов:

  • запрос для получения разрешения на скачивание
  • запрос для загрузки файла на сервер

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

/** * Метод для скачивания файлов на сервера * * @param string $filePath путь до файла в Яндекс.Диске * @param string $dirPath путь до директории на сервере * * @return array */ public function disk_resources_download(string $filePath, string $dirPath = ''): array < /* отправляем запрос на получение ссылки для скачивания */ $arrParams = [ 'path' =>$filePath, ]; $urlQuery = 'https://cloud-api.yandex.net/v1/disk/resources/download'; $resultQuery = $this->sendQueryYaDisk($urlQuery, $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
  • скачивать файлы с Яндекс.Диска на сервер через API
  • создавать директории на Яндекс.Диске через API

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

Яндекс Диск — бесплатно теперь можно загружать файлы до 1 ГБ

Примерно 7го июля произошли изменения. Ранее было 50 ГБ. Подразумевается размер одного файла.

Чтобы обойти ограничение, нужно оформить платную подписку Яндекс 360

Теперь несколько вопросов диску. Хорошо, вы скатываете в дно еще один сервис, и конечно же можете менять условия. Не хотите сам сервис улучшать?

  1. Нельзя посмотреть размеры папок.
  2. У меня стоит Яндекс.диск на компьютере, провайдер предоставляет условно 300+ мбит/с скорость, при этом редко когда скорость загрузки превышает 200 мбит/с, хотя у меня платный тариф. Сложно забить весь канал?
  3. При синхронизации фото с Apple — устройств — теряются Live Photo, при этом никаких предупреждений нет. Просто вдумайтесь, вы доверили этой конторе свои фото, программа пишет, что они выгрузились, все готово, а потом в галерее диска этих Live Photo нет. В поддержку писал, толку 0. В справке приложения есть ехидный раздел «предложить идею» с этой единственной идеей. Уже несколько лет. Компенсировать утраченное вам конечно никто не будет.
  4. На сайте можно смотреть видео с ускорением, через приложение нет. Это так сложно добавить переключение скоростей?
  5. В корзине видим папку. При этом нельзя посмотреть ни её размер, ни содержимое, ни путь, где она была. Вы вообще сами пользуетесь своим сервисом?

У разных аккаунтов могут быть разные цены на подписку. Не зависит от плюса. О да, это снова алгоритмы, которые тестируют, как бы еще больше нагреть пользователя на шекели.

Кстати, кто всё же хочет платный яндекс.диск — просто зайдите на страницу тарифов, закройте её, и через 3 дня вам придет письмо-завлекалово с 20% скидкой

Ну и теперь немного лирики. В 2013 году был великий фейл Яндекс.диска, когда за свой провал некоторым пользователям дали бесплатно и навсегда 200гб. После недавних изменений теперь и эти 200гб практически превратились в труху. На неполные 9 лет хватило вас.

Зачем теперь эти 200гб, если без подписки я не могу загрузить то, что хочу. 1гб — это просто смешно.

По сути, это была одна из последних причин в целом пользоваться вашим сервисом и в целом яндексом.

Ждем в будущем подписку яндекс.плюс.музыка — без неё композиции дольше 3х минут будут обрываться
яндекс.плюс.кинопоиск — без неё любое видео дольше 10 минут будут обрываться
Ну и конечно же в будущем появится подписка на подписку, чтобы отключить рекламу подписки
*sarcasm*, or.

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

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