Подключение к Яндекс.Диску через REST API

Эта обработка позволит подключить вашу конфигурацию к Яндекс.Диску. В ней есть графический интерфейс, поэтому можно проверить работоспособность до встраивания обработки в конфигурацию.

Возможности

  • OAuth-авторизация
  • Обзор файлов
  • Доступ к папке приложения
  • Добавление папок
  • Загрузка файлов на Яндекс.Диск
  • Скачивание файлов с Яндекс.Диска
  • Удаление файлов и папок

Использование

  1. Зарегистрируйте свое приложение на OAuth-сервере https://oauth.yandex.ru/, включите необходимые права на вкладке «Яндекс.Диск REST API», оставьте Callback URL по умолчанию — https://oauth.yandex.ru/verification_code
  2. Скачайте обработку.
  3. Загрузите обработку в конфигурацию или подключите ее через подсистему дополнительных отчетов и обработок из БСП.
  4. Получите код авторизации
    1. Перейдите по адресу https://oauth.yandex.ru/authorize?response_type=code&client_id=(ID приложения) от имени пользователя, аккаунт которого вы хотите использовать.
    2. Разрешите доступ к вашему Яндекс.Диску, код авторизации появится на экране.
    3. Можете реализовать автоматическое получение кода авторизации аналогично тому, как это сделано на основной форме обработки командой ЗаполнитьКодАвторизации.
  5. Используйте процедуру «Токен» из модуля объекта обработки для обмена полученного кода авторизации на OAuth-токен. Токен выдается на один год и используется во всех прикладных методах.
  6. Используйте программный интерфейс объекта обработки, модуль объекта содержит подробные комментарии.

Папка приложения

REST API позволяет использовать «папки приложений». Если при регистрации приложения на OAuth-сервере задать такой доступ, то приложение сможет использовать данные только из своей папки Приложения/<Название приложения>. Папки приложений удобно использовать для обмена между базами, чтобы не выбирать путь к папке в каждой базе.

Инициализация

// Создаем объект из конфигурации
ЯндексДиск = Обработки.ОбменЯндексДиск.Создать();

// Или создаем объект из подсистемы доп обработок БСП 2.3
ЯндексДиск = ДополнительныеОтчетыИОбработки.ОбъектВнешнейОбработки(СсылкаНаДопОбработку);

ЯндексДиск.IDПриложения = Константы.IDПриложенияЯндексДиск.Получить();
ЯндексДиск.ПарольПриложения = Константы.ПарольПриложенияЯндексДиск.Получить();
ЯндексДиск.КодАвторизации = КодАвторизации;

ЯндексДиск.Токен();

Просмотр и скачивание файлов

// Получаем список файлов в папке приложения
ЯндексДиск.СписокФайлов("app:/");

ВременныйФайл = ПолучитьИмяВременногоФайла("xml");

// Ищем файл для загрузки
Для Каждого Стр Из ЯндексДиск.СписокФайлов Цикл
Если Стр.Тип = "file" И СтрНачинаетсяС(Стр.Имя, "Message1to2") Тогда

// Скачиваем файл
АдресФайла = ЯндексДиск.СкачатьФайл(Стр.Путь);
ДанныеФайла = ПолучитьИзВременногоХранилища(АдресФайла);
ДанныеФайла.Записать(ВременныйФайл);

// Читаем данные из файла
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ВременныйФайл);

// (...) Обработка объекта ЧтениеXML

КонецЕсли;
КонецЦикла;

УдалитьФайлы(ВременныйФайл);

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

ВременныйФайл = ПолучитьИмяВременногоФайла("xml");

// Подготавливаем файл для выгрузки
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ВременныйФайл);
ЗаписьXML.ЗаписатьБезОбработки(ТекстXML);
ЗаписьXML.Закрыть();

// Выгружаем данные
АдресФайла = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ВременныйФайл));
ЯндексДиск.ЗагрузитьФайл("app:/Message2to1.xml", АдресФайла, Истина);

УдалитьФайлы(ВременныйФайл);

Особенности

  • Для работы нужна версия платформы 8.3.6 и выше.
  • Используются кроссплатформенные объекты для работы с HTTP запросами, так что должно работать на Linux и Mac.

https://github.com/vpozdnyakov/YandexDiskExchangeXML — страничка проекта на GitHub

11 Comments

  1. N2

    Добрый день!

    Спасибо Вам огромное за отличную разработку и подробную статью!

    Скажите пожалуйста, КодАвторизации это что? Пробовал «https://oauth.yandex.ru/verification_code» и полученный токен. В обоих случаях вываливается с ошибкой:

    {Обработка.ОбменЯндексДиск.МодульОбъекта(236)}: Запрос: /token
    Код ответа: 400
    Тело ответа: {«error_description»: «Invalid code», «error»: «bad_verification_code»}
    ВызватьИсключение ТекстИсключения;

    Разобрался! Код авторизации можно получить после авторизации через обработку в публикации.

    Reply
  2. men260181

    Ошибка в тексте статьи: ЯндексДиск.ЗагрузитьФайл(«app:/Message2to1.xml», АдресФайла, Истина);

    Должно быть: ЯндексДиск.ЗагрузитьФайл(«disk:/Message2to1.xml», АдресФайла, Истина);

    Reply
  3. vitaliy1911

    (2) добрый день. disk — это путь до корня, app — это путь до папки вашего приложения. про папки приложений я написал в статье.

    Reply
  4. dimasts

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

    Reply
  5. vitaliy1911

    (4) добавил на гитхабе, по ссылке в статье перейдите

    Reply
  6. dimasts

    Очень странно работает. Поставил данные от другой учётной записи, отозвал все токены, поменял пароли прилолжения, перезагрузил компьютер, вообще удалил приложение…

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

    Reply
  7. dimasts

    (6) Разобрался. НАдо внимательно следить для какого аккаунта в браузере при авторизации запрашивается разрешени

    Reply
  8. Vladislava-smile

    Добрый день. А в обычном приложении выскакивает ошибка при получении токена: «error_description»: «grant_type not in POST», «error»: «invalid_request». Не подскажите в чем проблема? Где рыть?

    Reply
  9. vitaliy1911

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

    Reply
  10. Vladislava-smile

    (9) Проблема была решена путем удаления приложения и созданием его заново.

    Reply
  11. Vladislava-smile

    Спасибо автору, очень полезная статья!

    Reply

Leave a Comment

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