Клуб API Диска

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

В клубе мы ждём всех, у кого возникли вопросы о нашей технологии. Анонсы собственных проектов, в которых вы используете API и SDK Яндекс.Диска, приветствуются! Мы будем публиковать тут новости и обновления API, а также рассказывать об интересных проектах, сделанных на нашей технологии.

Хостинг изображений для сайта
вчера, 12:08

Добрый день!

Подскажите, могу ли я использовать Я.Диск для хранения изображений для сайта?

1. Могу я  получить прямую  ссылку для скачивания (что бы хранить ее у себя в БД) ? Ссылка полученная  через https://tech.yandex.ru/disk/api/reference/content-docpage/ живет всего несколько часов.

2. Возможно ли создавать папки рекурсивно, по аналогии с mkdir(,,true) в PHP?

3. Каковы лимиты скачивания файлов, после чего происходит блокировка или какие либо ограничения?  В документации не нашел.   https://yandex.ru/blog/apidisk/139

Нет комментариев
Не всегда получаю картинки в preview
11 июня, 10:17

Здравствуйте!

Делаю вызов:

$headers = array("Authorization: {$this->yadisk_token}");
$curl = curl_init('https://cloud-api.yandex.net/v1/disk/resources?path=disk:/'.$full_yd_path.'&preview_size=300x300');
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl,CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$info = curl_exec($curl);
if($info != '')
{
	$response = json_decode($info);

	if(!empty($response->_embedded->items))
	{
		foreach($response->_embedded->items as $item)
		{
			$file_list[] = array(
				'preview' => $item->preview,
				'path' => $item->path,
				'name' => $item->name,
				'size' => $item->size,
			);
		}
	}
}

В ответе приходят ссылки на preview файлов. Все хорошо.

При выполнении такого же запроса через какое-то время в полях preview приходят ссылки, при переходе на которые получаю "403 Forbidden".

Потом проходит какое-то время, снова этот же запрос дает небитые превьюшки.

Не могу понять, что делаю не так. Может, в Диске есть какая-то защита на количество запросов информации по одному и тому же ресурсу?

У только что сохраненной на Диске фотографии preview не формируется. Существует задержка какая-то?

Делаю еще запрос, вообще поле preview в элементе массива items нет.

Нет комментариев
Удаление файлов в папке на Яндекс диске
3 июня, 17:41

Добрый день,
пытаюсь сделать батник, который бы мог удалить файлы определенного типа в определенной папке на Яндекс диске. Например, в папке NewFLD только файлы типа *.jpg Какую маску надо прописать в URL?
Вот пример URL:

https://cloud-api.yandex.net:443/v1/disk/resources?path=NewFLD&permanently=false


Заранее спасибо!

Нет комментариев
REST
Yandex WebDAV API - постраничная загрузка
31 мая, 08:08

Добрый день!

Есть проблема с постраничной загрузкой, используя WebDAV API.

Есть три запроса:

https://webdav.yandex.ru/Фото/?amount=3

https://webdav.yandex.ru/Фото/?amount=3&offset=3

https://webdav.yandex.ru/Фото/

Все три отрабатывают одинаково: возвращаюся ВСЕ элементы в папке, то есть работает так, как если бы amount и offset не передавались.

В папке 12 Гб данных, загрузка всего содержимого и парсинг (тем более на мобильном устройстве) - это дорога в ад. Позарез нужна пагинация. 

Нет комментариев
webdav,API
Yandex Disk OPS
26 мая, 00:20

Приятного чтения и хорошего настроения.

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

И первое о чем мы расскажем будут основные изменения, которые затронули наш проект.

1. Изменилось название.
      Мы сделали его немного короче.
      - Yandex Disk Operations
      + Yandex Disk OPS

2. Изменились команды.
      Мы сформировали еще одну команду
      и осуществили несколько трансферов.

3. Изменились проекты.
     Вместо одного большого проект было
     принято решение реализовать 3 проекта:
     - Operations
     + REST, CLI и OPS

В следующих постах мы расскажем про каждый проект подробно и в отдельности.
А пока давайте ответим на вопрос, что же мы делали эти два месяца.

1. Прошли курс обучения кросс-платформенной разработки приложений на C++.
     #vim #git #cmake #catch #travis #doxygen #cpack #hunter #cppcheck #docker ...
2. Набросали ТЗ для 3 новых проектов.
3. Разработали первый проект REST, представляющий из себя SDK на С++.
     Писали, тестировали, документировали и пакетировали.
4. Разработали CLI с использованием написанного SDK.
     Получили хороший опыт в совместной разработке.
   
Считаем, что сделано уже немало, но осознаем что впереди еще больше.
И вот они грядущие интересные задачи первого жаркого летнего месяца:

- Реализовать пакет получение слепка диска. @tree.
- Реализовать пакет поиска копий данных на диске. @duplicate.
- Реализовать пакет удаления копий данных с диска. @clean.
- Реализовать пакет поиска копий данных на двух дисках. @replica.
- Реализовать пакет получения разницы слепков двух дисков. @subtract.
- Реализовать пакет копирования данных с одного диска на другой. @copy.
- Реализовать пакет объединения содержимого двух дисков. @merge.
- Интегрировать данные пакеты в проект CLI.

P.S. Всем спасибо за внимание, будем держать вас в курсе событий и дальше.

P.P.S. Стоит добавить пару фотографий из нашего Цифрового Журнала, он как ничто другое отражает ритм нашей усердной работы.

Нет комментариев
Яндекс Диск,API
Получение полного содержимого папки и её подпапок через REST API
22 мая, 11:41

Господа, правильно ли я понимаю, что в настоящий момент REST API не позволяет получить информацию обо всех подпапках и их содержимом адекватным способом, при условии, что папка имеет множество подпапок?

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

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

Было бы круто добавить в "Плоский список всех файлов" опциональный параметр "path", чтобы задать папку, в которой следует искать файлы. Либо, допустим, фильтр путей к файлам по регулярному выражению.

Или я что-то упустил, и есть другой способ?

Нет комментариев
Возможно ли получить текст текстового файла (публичного) через REST API Диска?
15 мая, 23:14

Хочу узнаать, есть ли возможность читать текстовые файлы через API ЯндексДиска.

Нет комментариев
API,текст
Добавьте актуальности для iOS/MacOS разрабочиков?
13 мая, 10:59

Добрый день!

У Вас есть API написаный 4!!! года назад на Objective-C

Прошу дополните его современным SWIFT 3? 

Нет комментариев
ios,api,swift
Можно ли отключить синхронизацию по имени папки или по расширению файла
12 мая, 08:48

Добрый день!

Есть ли возможность в Я.Диске сделать так чтобы не синхронизировалась папка(по названию) или же файлы с определенным расширением. Т.е. есть ли возможность настройть как к примеру в git (.gitignore) ? Чтоб когда в папку на компьютере загружаю папку с файлами, то определенные файлы ни когда не синхронизировались с Я.Диском?

Нет комментариев
синхронизация,Синхронизация яндекс.дтска
Не работает лист
6 мая, 15:33

Импортнул исходники SDK, получил токен.

Создание директорий, авторизация срабатывают, а вот получение списка - нет

 var sdk = new DiskSdkClient(oauthToken);
sdk.GetListAsync();

Прилетает ошибка:
Disk.SDK.SdkException: Входная строка имела неверный формат.

Странно, т.к. параметров не передаю никаких, может я что-то недопонял просто?

Нет комментариев
Ошибка запроса retrofit2 yandexsdk. Ошибка Attempt to invoke virtual method?
4 мая, 20:14

Здесь формируется на отправку запрос(в документации яндекс написано, что параметры path и from должны иметь url формат, я параметры написал вручную:

new AsyncTask<Void, Void, Void>() {

                @Override
                protected Void doInBackground(Void... params) {
                    RestClient client = null;
                    try {

                        client = RestClientUtil.getInstance(credentials);
                        client.move("%2F1.jpg", "%2F211.jpg", false);
                    } catch (HttpCodeException ex) {
                        Log.d(TAG, "renameMoveItem", ex);
                        sendException(ex.getResponse().getDescription());
                    } catch (IOException | ServerException ex) {
                        Log.d(TAG, "renameMoveItem", ex);
                        sendException(ex);
                    }
                    return null;
                }

                @Override
                protected void onPostExecute(Void aVoid) {
                    RenameMoveItemFragment targetFragment = (RenameMoveItemFragment) getTargetFragment();
                    if (targetFragment != null) {
                        targetFragment.onComplete();
                    }
                }
            }.execute();
        }

вот сам интерфейс c sdk:

@POST("/v1/disk/resources/move")
    Link move(@Query("from") String from, @Query("path") String path,
              @Query("overwrite") Boolean overwrite)
            throws IOException, ServerIOException;

ВОТ ЛОГИ:

FATAL EXCEPTION: AsyncTask #2
                    Process: com.example.gibkin.multycloud, PID: 10297
                                                                               java.lang.RuntimeException: An error occurred while executing doInBackground()
                                                                                   at android.os.AsyncTask$3.done(AsyncTask.java:309)
                                                                                   at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
                                                                                   at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
                                                                                   at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                                                                                   at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
                                                                                   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                                                                                   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                                                                                   at java.lang.Thread.run(Thread.java:818)
                                                                                Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.os.Handler.post(java.lang.Runnable)' on a null object reference
                                                                                   at com.example.gibkin.multycloud.yandex.example.IODialogRetainedFragment.sendException(IODialogRetainedFragment.java:32)
                                                                                   at com.example.gibkin.multycloud.yandex.example.IODialogRetainedFragment.sendException(IODialogRetainedFragment.java:28)
                                                                                   at com.example.gibkin.multycloud.yandex.example.RenameMoveItemFragment$RenameMoveItemRetainedFragment$1.doInBackground(RenameMoveItemFragment.java:144)
                                                                                   at com.example.gibkin.multycloud.yandex.example.RenameMoveItemFragment$RenameMoveItemRetainedFragment$1.doInBackground(RenameMoveItemFragment.java:130)
                                                                                   at android.os.AsyncTask$2.call(AsyncTask.java:295)
                                                                                   at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                                   at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
                                                                                   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
                                                                                   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
                                                                                   at java.lang.Thread.run(Thread.java:818) 

1 комментарий
yandex sdk ,android,java,error,rename file,retrofit2,move file,api
Вопрос по акции +32 Гб для диска с мобильного.
27 апреля, 18:36

Можно ли использовать эту акцию сразу для нескольких почтовых ящиков с 1 телефона? или это запрещено? 

Нет комментариев
Виджет для TIZEN для ТВ SAMSUNG
15 апреля, 20:37

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

Возможно это?

Нет комментариев
Вопрос по "Скачивание файла из интернета на Диск"
9 апреля, 16:42

Доброго времени суток, возникла проблема, сколько искал ответа так и не нашел.

Вопрос по "Скачивание файла из интернета на Диск"

Проблема в том что как бы я не пытался, даже в полигоне загрузка вроде начинается, но по запросу /v1/disk/operations/{operation_id} всегда "status": "failed", пробывал и с разных сайтов сылку на скачивание давать, без разницы. В чем причина?

Нет комментариев
REST,API,Полигон
Предложение нового (старого) функционала для API Диска
7 апреля, 23:29

Приветствую! 
Было бы круто организовать возможность p2p взаимодействие в рамках API Диска. 

Пример. Два пользователя одновременно открывают «Яндекс Диск» (не важно, через браузер, мобильное приложение или включенным клиентом под Windows). 

Далее происходит следующее — при загрузке файла, должна быть возможность прямой (direct) передачи файла контакту (уникальному токену), минуя промежуточного сохранения данных в самом облаке диска (если это явно не указано отправителем файла). 

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

Скорость закачки и объемы файлов, при такой передачи, потенциально — выше чем промежуточное сохранение файла в облаке. К тому же «отдавать» файл можно сразу нескольким  приемникам. 

Думаю, прикрутить к этому простой и лаконичный API — дело не трудное.

Спасибо за внимание!

Нет комментариев
API,Яндекс Диск
Яндекс диск 2.0 БЕТА
31 марта, 18:48

Есть постоянная нужда в обмене большого количества файлов в яндекс диске. Купил ТБ, и в итоге не могу качать Тб, т.к. яндекс диск бета 2.0 скачивает только на С/ ??? У меня raid из твердотельных дисков под систему, почему я должет 1 Тб качать именно на него? В google chrome я не могу тоже качать , выбирая папку и при нажатии кнопочка скачать , ничего не происходит!!!
 яндекс диск бета 2.0 сделайте назначение - куда качать!!!!

3 комментария
curl или не curl
27 марта, 08:33

уже десять дней не загружаются файлы через curl. Выскакивает вот такая ошибка:

curl: (56) SSL read: error:00000000:lib(0):func(0):reason(0), errno 104

чего делать не понятно. Служба техподдержки ... где-то есть. Написал, не отвечают. Думают, наверное :-)

P.S. Сейчас прочитал пост ниже, про то, что не загружаются большие файлы. Проверил у себя, точно. Мелкие загружаются, большие нет.

Нет комментариев
Сортировка файлов
13 марта, 13:51

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

Нет комментариев
REST API Диска для C#
5 марта, 14:23

Добрый день, есть ли примеры использования REST API Диска в программах написанных на C# ?

Нет комментариев
Не загружаются большие файлы
1 марта, 10:29

Добрый день, подскажите пожалуйста, перестали загружаться файлы больше определенного размера, по тестам, больше около 100-150Мб на ЯндексДиск, средствами REST API. Файлы меньшего размера успешно загружаются.

Как я могу отследить ошибку и исправить ее?

Всем спасибо заранее)

2 комментария