Эта обработка позволит подключить вашу конфигурацию к Яндекс.Диску. В ней есть графический интерфейс, поэтому можно проверить работоспособность до встраивания обработки в конфигурацию.
Возможности
- OAuth-авторизация
- Обзор файлов
- Доступ к папке приложения
- Добавление папок
- Загрузка файлов на Яндекс.Диск
- Скачивание файлов с Яндекс.Диска
- Удаление файлов и папок
Использование
- Зарегистрируйте свое приложение на OAuth-сервере https://oauth.yandex.ru/, включите необходимые права на вкладке «Яндекс.Диск REST API», оставьте Callback URL по умолчанию — https://oauth.yandex.ru/verification_code
- Скачайте обработку.
- Загрузите обработку в конфигурацию или подключите ее через подсистему дополнительных отчетов и обработок из БСП.
- Получите код авторизации
- Перейдите по адресу https://oauth.yandex.ru/authorize?response_type=code&client_id=(ID приложения) от имени пользователя, аккаунт которого вы хотите использовать.
- Разрешите доступ к вашему Яндекс.Диску, код авторизации появится на экране.
- Можете реализовать автоматическое получение кода авторизации аналогично тому, как это сделано на основной форме обработки командой ЗаполнитьКодАвторизации.
- Используйте процедуру «Токен» из модуля объекта обработки для обмена полученного кода авторизации на OAuth-токен. Токен выдается на один год и используется во всех прикладных методах.
- Используйте программный интерфейс объекта обработки, модуль объекта содержит подробные комментарии.
Папка приложения
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
Добрый день!
Спасибо Вам огромное за отличную разработку и подробную статью!
Скажите пожалуйста, КодАвторизации это что? Пробовал «https://oauth.yandex.ru/verification_code» и полученный токен. В обоих случаях вываливается с ошибкой:
Разобрался! Код авторизации можно получить после авторизации через обработку в публикации.
Ошибка в тексте статьи: ЯндексДиск.ЗагрузитьФайл(«app:/Message2to1.xml», АдресФайла, Истина);
Должно быть: ЯндексДиск.ЗагрузитьФайл(«disk:/Message2to1.xml», АдресФайла, Истина);
(2) добрый день. disk — это путь до корня, app — это путь до папки вашего приложения. про папки приложений я написал в статье.
Я правильно понимаю, что не предусмотрена возможность получения публичной ссылки на загруженный в ЯндексДиск файл?
(4) добавил на гитхабе, по ссылке в статье перейдите
Очень странно работает. Поставил данные от другой учётной записи, отозвал все токены, поменял пароли прилолжения, перезагрузил компьютер, вообще удалил приложение…
а она всё равно работает с тем же диском и причём нормально работает удаляет и публикует файлы как положено. В чём может быть дело?
(6) Разобрался. НАдо внимательно следить для какого аккаунта в браузере при авторизации запрашивается разрешени
Добрый день. А в обычном приложении выскакивает ошибка при получении токена: «error_description»: «grant_type not in POST», «error»: «invalid_request». Не подскажите в чем проблема? Где рыть?
(8) добрый день. запишите пожалуйста проблему в гитхабе, опишите сценарий воспроизведения и укажите номер версии платформы.
(9) Проблема была решена путем удаления приложения и созданием его заново.
Спасибо автору, очень полезная статья!