├── .gitignore ├── tests ├── data │ ├── file-to-upload.txt │ └── fixture │ │ ├── test-folder │ │ ├── file1.txt │ │ ├── file2.txt │ │ └── public_file.txt │ │ └── public_folder │ │ ├── public_file.txt │ │ └── file_from_public_folder.txt ├── urlhelpers-test.os └── yadisk-test.os ├── lib.config ├── packagedef ├── src ├── urlhelpers.os └── yadisk.os ├── README.md └── LICENSE /.gitignore: -------------------------------------------------------------------------------- 1 | oauth_token.txt -------------------------------------------------------------------------------- /tests/data/file-to-upload.txt: -------------------------------------------------------------------------------- 1 | Hello! -------------------------------------------------------------------------------- /tests/data/fixture/test-folder/file1.txt: -------------------------------------------------------------------------------- 1 | Hello! 2 | -------------------------------------------------------------------------------- /tests/data/fixture/test-folder/file2.txt: -------------------------------------------------------------------------------- 1 | Hello! 2 | -------------------------------------------------------------------------------- /tests/data/fixture/test-folder/public_file.txt: -------------------------------------------------------------------------------- 1 | Hello! 2 | -------------------------------------------------------------------------------- /tests/data/fixture/public_folder/public_file.txt: -------------------------------------------------------------------------------- 1 | Hello! 2 | -------------------------------------------------------------------------------- /tests/data/fixture/public_folder/file_from_public_folder.txt: -------------------------------------------------------------------------------- 1 | Hello! 2 | -------------------------------------------------------------------------------- /lib.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /packagedef: -------------------------------------------------------------------------------- 1 | 2 | Описание.Имя("yadisk") 3 | .Версия("1.0") 4 | .ВключитьФайл("src") 5 | .ВключитьФайл("tests") 6 | .ВключитьФайл("lib.config") -------------------------------------------------------------------------------- /src/urlhelpers.os: -------------------------------------------------------------------------------- 1 | 2 | // Формирует строку запроса в формате URL-encoded (query string) 3 | Функция СформироватьСтрокуЗапроса(ПараметрыЗапроса) Экспорт 4 | СтрокаЗапроса = ""; 5 | 6 | Если ПараметрыЗапроса.Количество() > 0 Тогда 7 | Для каждого Элемент из ПараметрыЗапроса Цикл 8 | Если НЕ ПустаяСтрока(СтрокаЗапроса) Тогда 9 | СтрокаЗапроса = СтрокаЗапроса + "&"; 10 | КонецЕсли; 11 | СтрокаЗапроса = СтрокаЗапроса + КодироватьСтроку(Элемент.Ключ, СпособКодированияСтроки.КодировкаURL) + 12 | "=" + КодироватьСтроку(Значение1СвЗначениеJS(Элемент.Значение), СпособКодированияСтроки.КодировкаURL); 13 | КонецЦикла; 14 | КонецЕсли; 15 | 16 | Возврат СтрокаЗапроса; 17 | КонецФункции 18 | 19 | Функция СформироватьСтруктуруПараметровЗапроса(СтрокаИменДопустимыхПараметров, СтруктураОбязательныхПараметров, СтруктураДополнительныхПараметров=Неопределено) Экспорт 20 | СтруктураПараметровЗапроса = Новый Структура; 21 | СтруктураДопустимыхПараметров = Новый Структура(СтрокаИменДопустимыхПараметров); 22 | 23 | Если СтруктураОбязательныхПараметров <> Неопределено Тогда 24 | ДобавитьПараметры(СтруктураПараметровЗапроса, СтруктураОбязательныхПараметров, СтруктураДопустимыхПараметров); 25 | КонецЕсли; 26 | 27 | Если СтруктураДополнительныхПараметров <> Неопределено Тогда 28 | ДобавитьПараметры(СтруктураПараметровЗапроса, СтруктураДополнительныхПараметров, СтруктураДопустимыхПараметров); 29 | КонецЕсли; 30 | 31 | Возврат СтруктураПараметровЗапроса; 32 | КонецФункции 33 | 34 | Процедура ДобавитьПараметры(СтруктураПараметровЗапроса, СтруктураСоЗначениямиПараметров, СтруктураДопустимыхПараметров) 35 | Для каждого ЭлементСтруктуры из СтруктураСоЗначениямиПараметров Цикл 36 | Если НЕ СтруктураДопустимыхПараметров.Свойство(ЭлементСтруктуры.Ключ) Тогда 37 | ВызватьИсключение ИсключениеНедопустимыйПараметрЗапроса(ЭлементСтруктуры.Ключ); 38 | КонецЕсли; 39 | СтруктураПараметровЗапроса.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Значение); 40 | КонецЦикла; 41 | КонецПроцедуры 42 | 43 | Функция Значение1СвЗначениеJS(Значение) 44 | Тип = ТипЗнч(Значение); 45 | Если (Значение = Неопределено) или (Значение = Null) Тогда 46 | Возврат "null"; 47 | ИначеЕсли (Тип = Тип("Дата")) Тогда 48 | Возврат """" + ДатаJSON(Значение) + "Z"""; 49 | ИначеЕсли Тип = Тип("Булево") Тогда 50 | Возврат ?(Значение = Истина, "true", "false"); 51 | ИначеЕсли (Тип = Тип("УникальныйИдентификатор")) Тогда 52 | Возврат """" + Значение + """"; 53 | КонецЕсли; 54 | Возврат Строка(Значение); 55 | КонецФункции 56 | 57 | Функция ДатаJSON(Знач Дата) 58 | 59 | Если Не ЗначениеЗаполнено(Дата) Тогда 60 | Возврат ""; 61 | КонецЕсли; 62 | 63 | Возврат "" + Год(Дата) + "-" + ФорматДвузначноеЧисло(Месяц(Дата)) + "-" + ФорматДвузначноеЧисло(День(Дата)) + "T" 64 | + ФорматДвузначноеЧисло(Час(Дата)) + ":" + ФорматДвузначноеЧисло(Минута(Дата)) + ":" + ФорматДвузначноеЧисло(Секунда(Дата)); 65 | 66 | КонецФункции 67 | 68 | Функция ФорматДвузначноеЧисло(ЗначениеЧисло) 69 | С = Строка(ЗначениеЧисло); 70 | Если СтрДлина(С) < 2 Тогда 71 | С = "0" + С; 72 | КонецЕсли; 73 | Возврат С; 74 | КонецФункции 75 | 76 | Функция ИсключениеНедопустимыйПараметрЗапроса(ИмяПараметра) 77 | Возврат "В запрос передан недопустимый параметр " + ИмяПараметра; 78 | КонецФункции -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Реализация API Яндекс.Диска для 1Script 2 | 3 | Библиотека предоставляет возможность взаимодействия с [REST API Яндекс.Диска](https://tech.yandex.ru/disk/rest/) на языке [1Script](http://oscript.io). 4 | 5 | Реализована поддержка всех методов REST API Яндекс.Диска за исключением [метода установки дополнительных (custom) свойств](https://tech.yandex.ru/disk/api/reference/meta-add-docpage/) ресурсов (папок или файлов). 6 | 7 | ## Установка 8 | 9 | Для работы библиотеки необходимо **oscript-yadisk** предварительно установить [Стандартную библиотеку скриптов](http://oscript.io/library) 1Script. 10 | 11 | ### Из исходников 12 | 13 | 1. Клонируйте репозиторий библиотеки: 14 | 15 | ``` 16 | git clone https://github.com/kuntashov/oscript-yadisk.git 17 | ``` 18 | 19 | 2. Добавьте в конфигурационном файле 1Script `oscript.cfg` в список дополнительных библиотек путь к каталогу, в который вы клонировали репозиторий: 20 | 21 | ``` 22 | lib.additional = C:\libs\oscript-yadisk; 23 | ``` 24 | 25 | ### Из пакетов opm 26 | 27 | opm install yadisk 28 | 29 | ## Использование 30 | 31 | Библиотека к вашему скрипту подключается с помощью директивы `#Использовать yadisk`. После этого в области видимости скрипта будет доступен класс `ЯндексДиск`: 32 | 33 | #Использовать yadisk 34 | 35 | Перем OAuth_Токен; 36 | 37 | OAuth_Токен = "..."; // Используйте полученный токен для вашего приложения. 38 | 39 | ЯндексДиск = Новый ЯндексДиск; 40 | ЯндексДиск.УстановитьТокенАвторизации(OAuth_Токен); 41 | 42 | СвойстваДиска = ЯндексДиск.ПолучитьСвойстваДиска(); 43 | Сообщить(СтрШаблон("Всего доступно %1 байт", СвойстваДиска.total_space)); 44 | Сообщить(СтрШаблон("Из них занято %1 байт", СвойстваДиска.used_space)); 45 | 46 | С другими примерами использования возможностей библиотеки можно познакомиться, изучив код автоматических тестов, которые поставляются вместе с библиотекой в каталоге `tests`. 47 | 48 | **Примечание.** В linux для корректной работы HTTPS-соединения может потребоваться выполнить команду 49 | 50 | mozroots --import --sync 51 | 52 | ## Запуск тестов библиотеки 53 | 54 | Запуск тестов библиотеки осуществляется при помощи скрипта `testrunner.os`, который входит в состав [исходных кодов 1Script](https://bitbucket.org/EvilBeaver/1script/src/) (находится в папке `tests`). 55 | 56 | ### OAuth-токен авторизации для запуска тестов 57 | 58 | Для запуска автоматических тестов библиотеки необходимо тестам передать [OAuth-токен авторизации](https://tech.yandex.ru/oauth/). 59 | 60 | Получить токен авторизации можно вручную, перейдя в браузере по ссылке вида: 61 | 62 | https://oauth.yandex.ru/authorize?response_type=token&client_id= 63 | 64 | где `` - идентификатор вашего приложения, зарегистрированного на Яндексе (https://oauth.yandex.ru/client/new). 65 | 66 | Приложению необходимо назначить права на использование Яндекс.Диск REST API в том объеме, в котором необходимо для вашего приложения. Для целей запуска автоматизированных тестов необходимо указать все права (Доступ к информации о Диске, Доступ к папке приложения на Диске, Запись в любом месте на Диске, Чтение всего Диска). 67 | 68 | Токен авторизации в тесты может быть передан либо через переменную окружения `YADISK_OAUTH_TOKEN`, либо через файл `oauth_token.txt`, в который надо сохранить полученный токен авторизации. Сам файл необходимо разместить рядом с тестами в папке `tests`. 69 | 70 | **Важно!** Не рекомедуется запускать тесты для действующего аккаунта Яндекс.Диска, т.к. в процессе выполнения тестов выполняются различные операции над содержимым Диска. Рекомендуется для целей тестирования создать отдельную учетную запись на сервисах Яндекса и использовать ее. 71 | 72 | ## Лицензия 73 | 74 | Библиотека **oscript-yadisk** распространяется под лицензией *Apache 2.0*, ее текст находится в файле [LICENSE](LICENSE). Лицензия распространяется только на код библиотеки **oscript-yadisk**. Использование API Яндекс.Диска регламентируется [Условиями использования сервиса "API Яндекс.Диска"](https://yandex.ru/legal/disk_api/) (https://yandex.ru/legal/disk_api/). 75 | -------------------------------------------------------------------------------- /tests/urlhelpers-test.os: -------------------------------------------------------------------------------- 1 | #Использовать ".." 2 | 3 | Перем юТест; 4 | 5 | Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт 6 | 7 | юТест = ЮнитТестирование; 8 | 9 | СписокТестов = Новый Массив; 10 | 11 | СписокТестов.Добавить("ТестДолжен_ПроверитьФормированиеСтрокиЗапроса"); 12 | СписокТестов.Добавить("ТестДолжен_ПроверитьФормированиеСтрокиЗапросаЕслиПараметрОдин"); 13 | СписокТестов.Добавить("ТестДолжен_ПроверитьФормированиеСтрокиЗапросаЕслиСписокПараметровПуст"); 14 | СписокТестов.Добавить("ТестДолжен_ПроверитьФормированиеСтрокиЗапросаКогдаКлючиЭлементыМассива"); 15 | 16 | СписокТестов.Добавить("ТестДолжен_ПроверитьФормированиеСтруктурыПараметровЗапроса"); 17 | СписокТестов.Добавить("ТестДолжен_ПроверитьФормированиеСтруктурыПараметровЗапросаСЛишнимПараметром"); 18 | 19 | Возврат СписокТестов; 20 | 21 | КонецФункции 22 | 23 | Процедура ТестДолжен_ПроверитьФормированиеСтрокиЗапроса() Экспорт 24 | 25 | 26 | Эталон1 = "param=value&%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80=%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5"; 27 | 28 | Параметры1 = Новый Соответствие; 29 | Параметры1.Вставить("param", "value"); 30 | Параметры1.Вставить("параметр", "значение"); 31 | 32 | юТест.ПроверитьРавенство(Эталон1, РаботаСUrl.СформироватьСтрокуЗапроса(Параметры1)); 33 | 34 | КонецПроцедуры 35 | 36 | Процедура ТестДолжен_ПроверитьФормированиеСтрокиЗапросаЕслиСписокПараметровПуст() Экспорт 37 | 38 | Эталон1 = ""; 39 | 40 | Параметры1 = Новый Соответствие; 41 | 42 | юТест.ПроверитьРавенство(Эталон1, РаботаСUrl.СформироватьСтрокуЗапроса(Параметры1)); 43 | 44 | КонецПроцедуры 45 | 46 | Процедура ТестДолжен_ПроверитьФормированиеСтрокиЗапросаЕслиПараметрОдин() Экспорт 47 | 48 | Эталон1 = "param=value"; 49 | 50 | Параметры1 = Новый Соответствие; 51 | Параметры1.Вставить("param", "value"); 52 | 53 | юТест.ПроверитьРавенство(Эталон1, РаботаСUrl.СформироватьСтрокуЗапроса(Параметры1)); 54 | 55 | КонецПроцедуры 56 | 57 | Процедура ТестДолжен_ПроверитьФормированиеСтрокиЗапросаКогдаКлючиЭлементыМассива() Экспорт 58 | 59 | Эталон1 = "F%5B0%5D=val1&F%5B1%5D=val2&F%5B2%5D=val3&F%5B3%5D=val4"; 60 | 61 | Параметры1 = Новый Соответствие; 62 | Параметры1.Вставить("F[0]", "val1"); 63 | Параметры1.Вставить("F[1]", "val2"); 64 | Параметры1.Вставить("F[2]", "val3"); 65 | Параметры1.Вставить("F[3]", "val4"); 66 | 67 | юТест.ПроверитьРавенство(Эталон1, РаботаСUrl.СформироватьСтрокуЗапроса(Параметры1)); 68 | 69 | КонецПроцедуры 70 | 71 | Процедура ТестДолжен_ПроверитьФормированиеСтруктурыПараметровЗапроса() Экспорт 72 | 73 | Эталон = Новый Структура("param1,param2,param3", "required", "value1", "value2"); 74 | 75 | ОбязательныеПараметры = Новый Структура("param1", "required"); 76 | ДополнительныеПараметры = Новый Структура("param2,param3", "value1", "value2"); 77 | 78 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса( 79 | "param1,param2,param3,param4", 80 | ОбязательныеПараметры, 81 | ДополнительныеПараметры 82 | ); 83 | 84 | юТест.ПроверитьИстину(СтруктурыИдентичны(Эталон, ПараметрыЗапроса), "Ожидали, что Эталон и ПараметрыЗапроса будут идентичны, а на самом деле - нет"); 85 | 86 | КонецПроцедуры 87 | 88 | Процедура ТестДолжен_ПроверитьФормированиеСтруктурыПараметровЗапросаСЛишнимПараметром() Экспорт 89 | 90 | Параметры = Новый Структура("param1,param2,param3", "value1", "value2", "value3"); 91 | 92 | МассивАргументов = Новый Массив; 93 | МассивАргументов.Добавить("param1,param2"); 94 | МассивАргументов.Добавить(Параметры); 95 | МассивАргументов.Добавить(Неопределено); 96 | 97 | ПроверитьЧтоВызовВыбрасываетИсключение(РаботаСUrl, "СформироватьСтруктуруПараметровЗапроса", МассивАргументов, "В запрос передан недопустимый параметр param3"); 98 | 99 | КонецПроцедуры 100 | 101 | Процедура ПроверитьЧтоВызовВыбрасываетИсключение(Объект, ИмяМетода, МассивАргументовМетода, ФрагментИсключения="") 102 | 103 | ИсключениеВозникло = Ложь; 104 | 105 | Попытка 106 | Рефлектор = Новый Рефлектор; 107 | Рефлектор.ВызватьМетод(Объект, ИмяМетода, МассивАргументовМетода); 108 | Исключение 109 | ИсключениеВозникло = Истина; 110 | ТекстИсключения = ОписаниеОшибки(); 111 | КонецПопытки; 112 | 113 | юТест.ПроверитьИстину( 114 | ИсключениеВозникло И Найти(ТекстИсключения, ФрагментИсключения) > 0, 115 | "Ожидали, что " + ИмяМетода + " ВЫБРОСИТ ИСКЛЮЧЕНИЕ" + 116 | ?(ЗначениеЗаполнено(ФрагментИсключения), " СОДЕРЖАЩЕЕ ТЕКСТ <" + ФрагментИсключения + ">, а был текст <" + ТекстИсключения + ">.", "") 117 | ); 118 | 119 | КонецПроцедуры 120 | 121 | Функция СтруктурыИдентичны(Структура1, Структура2) 122 | Если Структура1.Количество() = Структура2.Количество() Тогда 123 | Для каждого ЭлементСтруктуры из Структура1 Цикл 124 | Если НЕ Структура2.Свойство(ЭлементСтруктуры.Ключ) Тогда 125 | Возврат Ложь; 126 | КонецЕсли; 127 | Если Структура1[ЭлементСтруктуры.Ключ] <> Структура2[ЭлементСтруктуры.Ключ] Тогда 128 | Возврат Ложь; 129 | КонецЕсли 130 | КонецЦикла; 131 | КонецЕсли; 132 | Возврат Истина; 133 | КонецФункции -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | 203 | -------------------------------------------------------------------------------- /tests/yadisk-test.os: -------------------------------------------------------------------------------- 1 | #Использовать ".." 2 | 3 | Перем юТест; 4 | Перем ЯндексДиск; 5 | 6 | Перем Лог; 7 | 8 | Функция Инициализировать() 9 | 10 | ЯндексДиск = Новый ЯндексДиск; 11 | ЯндексДиск.УстановитьРежимОтладки(РежимОтладки()); 12 | Лог = ЯндексДиск.ПолучитьЛог(); 13 | 14 | OAuth_Токен = ПолучитьТокенАвторизации(); 15 | ЯндексДиск.УстановитьТокенАвторизации(OAuth_Токен); 16 | 17 | КонецФункции 18 | 19 | Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт 20 | 21 | юТест = ЮнитТестирование; 22 | 23 | СписокТестов = Новый Массив; 24 | 25 | СписокТестов.Добавить("ТестДолжен_ПроверитьПолучениеСвойствДиска"); 26 | 27 | СписокТестов.Добавить("ТестДолжен_ПроверитьПолучениеСвойствФайла"); 28 | СписокТестов.Добавить("ТестДолжен_ПроверитьПолучениеСвойствПапки"); 29 | СписокТестов.Добавить("ТестДолжен_ПроверитьПолучениеСвойствНесуществующегоФайла"); 30 | 31 | СписокТестов.Добавить("ТестДолжен_ПроверитьПолучениеСвойствФайлаВКорзине"); 32 | 33 | СписокТестов.Добавить("ТестДолжен_ПроверитьПолучениеСпискаФайлов_БезАргументов"); 34 | СписокТестов.Добавить("ТестДолжен_ПроверитьПолучениеСпискаФайлов_САргументами"); 35 | 36 | СписокТестов.Добавить("ТестДолжен_ПроверитьПолучениеСпискаПоследнихЗагруженныхФайлов"); 37 | 38 | СписокТестов.Добавить("ТестДолжен_ПроверитьЗагрузкуФайлаНаДиск"); 39 | 40 | СписокТестов.Добавить("ТестДолжен_ПроверитьУстановкуПроизвольногоСвойстваФайла"); 41 | 42 | СписокТестов.Добавить("ТестДолжен_ПроверитьСкачиваниеФайлаИзИнтернета"); 43 | 44 | СписокТестов.Добавить("ТестДолжен_ПроверитьСкачиваниеФайлаСДиска_ССохранениемОригинальногоИмени"); 45 | СписокТестов.Добавить("ТестДолжен_ПроверитьСкачиваниеФайлаСДиска_СНазначениемНовогоИмени"); 46 | СписокТестов.Добавить("ТестДолжен_ПроверитьСкачиваниеФайлаСДиска_ВНесуществующийКаталог"); 47 | СписокТестов.Добавить("ТестДолжен_ПроверитьСкачиваниеФайлаСДиска_КогдаЦелевойФайлСуществуетИПерезаписыватьНельзя"); 48 | СписокТестов.Добавить("ТестДолжен_ПроверитьСкачиваниеФайлаСДиска_КогдаЦелевойФайлСуществуетИНадоПерезаписать"); 49 | СписокТестов.Добавить("ТестДолжен_ПроверитьСкачиваниеФайлаСДиска_КогдаСкачиваетсяПапка"); 50 | 51 | СписокТестов.Добавить("ТестДолжен_ПроверитьУдалениеФайла_ВКорзину"); 52 | СписокТестов.Добавить("ТестДолжен_ПроверитьУдалениеФайла_Безвозвратно"); 53 | 54 | СписокТестов.Добавить("ТестДолжен_ПроверитьКопированиеФайла"); 55 | СписокТестов.Добавить("ТестДолжен_ПроверитьПеремещениеФайла"); 56 | СписокТестов.Добавить("ТестДолжен_ПроверитьСозданиеПапки"); 57 | 58 | СписокТестов.Добавить("ТестДолжен_ПроверитьПубликациюРесурсаИОтменуПубликации"); 59 | СписокТестов.Добавить("ТестДолжен_ПроверитьСкачиваниеПубличногоРесурса"); 60 | СписокТестов.Добавить("ТестДолжен_ПроверитьСкачиваниеОтдельногоФайлаИзПубличнойПапки"); 61 | СписокТестов.Добавить("ТестДолжен_ПроверитьСкачиваниеПубличногоРесурсаВЗагрузки"); 62 | 63 | СписокТестов.Добавить("ТестДолжен_ПроверитьОчисткуКорзины"); 64 | СписокТестов.Добавить("ТестДолжен_ПроверитьВосстановлениеИзКорзины"); 65 | 66 | Возврат СписокТестов; 67 | 68 | КонецФункции 69 | 70 | /////////////////////////////////////////////////////////////////// 71 | // Тесты 72 | 73 | Процедура ТестДолжен_ПроверитьПолучениеСвойствДиска() Экспорт 74 | 75 | СвойстваДиска = ЯндексДиск.ПолучитьСвойстваДиска(); 76 | юТест.ПроверитьРавенство(Тип("Структура"), ТипЗнч(СвойстваДиска)); 77 | юТест.ПроверитьИстину(СвойстваДиска.Свойство("trash_size")); 78 | юТест.ПроверитьИстину(СвойстваДиска.Свойство("total_space")); 79 | юТест.ПроверитьИстину(СвойстваДиска.Свойство("used_space")); 80 | юТест.ПроверитьИстину(СвойстваДиска.Свойство("system_folders")); 81 | юТест.ПроверитьРавенство(Тип("Структура"), ТипЗнч(СвойстваДиска.system_folders)); 82 | 83 | КонецПроцедуры 84 | 85 | Процедура ТестДолжен_ПроверитьПолучениеСпискаФайлов_БезАргументов() Экспорт 86 | 87 | СписокФайлов = ЯндексДиск.ПолучитьСписокВсехФайлов(); 88 | 89 | юТест.ПроверитьИстину(СписокФайлов.Свойство("items")); 90 | юТест.ПроверитьРавенство(Тип("Массив"), ТипЗнч(СписокФайлов.items)); 91 | 92 | юТест.ПроверитьРавенство(20, СписокФайлов.limit); 93 | юТест.ПроверитьРавенство(0, СписокФайлов.offset); 94 | 95 | КонецПроцедуры 96 | 97 | Процедура ТестДолжен_ПроверитьПолучениеСпискаФайлов_САргументами() Экспорт 98 | 99 | Параметры = Новый Структура(); 100 | Параметры.Вставить("limit", 2); 101 | Параметры.Вставить("offset", 1); 102 | 103 | СписокФайлов = ЯндексДиск.ПолучитьСписокВсехФайлов(Параметры); 104 | 105 | юТест.ПроверитьИстину(СписокФайлов.Свойство("items")); 106 | юТест.ПроверитьРавенство(Тип("Массив"), ТипЗнч(СписокФайлов.items)); 107 | юТест.ПроверитьРавенство(2, СписокФайлов.items.Количество()); 108 | 109 | юТест.ПроверитьРавенство(2, СписокФайлов.limit); 110 | юТест.ПроверитьРавенство(1, СписокФайлов.offset); 111 | 112 | КонецПроцедуры 113 | 114 | Процедура ТестДолжен_ПроверитьПолучениеСвойствФайла() Экспорт 115 | 116 | СвойстваФайла = ЯндексДиск.ПолучитьСвойстваРесурса("/test-folder/file1.txt"); 117 | 118 | юТест.ПроверитьИстину(СвойстваФайла.Свойство("name")); 119 | юТест.ПроверитьРавенство("file1.txt", СвойстваФайла.name); 120 | 121 | КонецПроцедуры 122 | 123 | Процедура ТестДолжен_ПроверитьПолучениеСвойствПапки() Экспорт 124 | 125 | СвойстваПапки = ЯндексДиск.ПолучитьСвойстваРесурса("/test-folder"); 126 | 127 | юТест.ПроверитьИстину(СвойстваПапки.Свойство("name")); 128 | юТест.ПроверитьРавенство("test-folder", СвойстваПапки.name); 129 | юТест.ПроверитьРавенство("dir", СвойстваПапки.type); 130 | 131 | КонецПроцедуры 132 | 133 | Процедура ТестДолжен_ПроверитьПолучениеСвойствНесуществующегоФайла() Экспорт 134 | 135 | МассивАргументов = Новый Массив; 136 | МассивАргументов.Добавить("/test-folder/file-does-not-exists.txt"); 137 | МассивАргументов.Добавить(Неопределено); 138 | 139 | ПроверитьЧтоВызовВыбрасываетИсключение(ЯндексДиск, "ПолучитьСвойстваРесурса", МассивАргументов, "Яндекс.Диск ответил кодом ошибки 404: Resource not found"); 140 | 141 | КонецПроцедуры 142 | 143 | Процедура ТестДолжен_ПроверитьПолучениеСвойствФайлаВКорзине() Экспорт 144 | 145 | ИмяФайла = Строка(Новый УникальныйИдентификатор) + ".txt"; 146 | ПутьНаДиске = "/test-folder/" + ИмяФайла; 147 | ЯндексДиск.ЗагрузитьНаДиск(ПолучитьАбсолютныйПуть("data/file-to-upload.txt"), ПутьНаДиске); 148 | ЯндексДиск.Удалить(ПутьНаДиске, Ложь, Истина); 149 | 150 | СвойстваФайла = ЯндексДиск.ПолучитьСвойстваРесурсаВКорзине(ИмяФайла); 151 | 152 | юТест.ПроверитьИстину(СвойстваФайла.Свойство("name")); 153 | юТест.ПроверитьРавенство(ИмяФайла, СвойстваФайла.name); 154 | 155 | // Прибираем за собой. 156 | ЯндексДиск.ОчиститьКорзину(); 157 | 158 | КонецПроцедуры 159 | 160 | Процедура ТестДолжен_ПроверитьПолучениеСпискаПоследнихЗагруженныхФайлов() Экспорт 161 | 162 | Параметры = Новый Структура; 163 | Параметры.Вставить("limit", 2); 164 | 165 | СписокПоследних = ЯндексДиск.ПолучитьСписокПоследнихЗагруженныхФайлов(Параметры); 166 | 167 | юТест.ПроверитьИстину(СписокПоследних.Свойство("items")); 168 | юТест.ПроверитьРавенство(Тип("Массив"), ТипЗнч(СписокПоследних.items)); 169 | юТест.ПроверитьРавенство(2, СписокПоследних.limit); 170 | 171 | КонецПроцедуры 172 | 173 | Процедура ТестДолжен_ПроверитьЗагрузкуФайлаНаДиск() Экспорт 174 | 175 | ИмяФайла = Строка(Новый УникальныйИдентификатор) + ".txt"; 176 | ПутьНаДиске = "/test-folder/" + ИмяФайла; 177 | 178 | ЯндексДиск.ЗагрузитьНаДиск(ПолучитьАбсолютныйПуть("data/file-to-upload.txt"), ПутьНаДиске); 179 | 180 | СвойстваФайла = ЯндексДиск.ПолучитьСвойстваРесурса(ПутьНаДиске); 181 | юТест.ПроверитьРавенство(ИмяФайла, СвойстваФайла.name); 182 | 183 | КонецПроцедуры 184 | 185 | Процедура ТестДолжен_ПроверитьУстановкуПроизвольногоСвойстваФайла() Экспорт 186 | 187 | ЗначениеСвойства = Строка(Новый УникальныйИдентификатор); 188 | 189 | ЯндексДиск.УстановитьДопСвойствоРесурса("/test-folder/file1.txt", "MyProperty", ЗначениеСвойства); 190 | 191 | юТест.ПроверитьРавенство(ЗначениеСвойства, ЯндексДиск.ПолучитьДопСвойствоРесурса("/test-folder/file1.txt", "MyProperty")); 192 | 193 | КонецПроцедуры 194 | 195 | Процедура ТестДолжен_ПроверитьСкачиваниеФайлаИзИнтернета() Экспорт 196 | 197 | СсылкаПроверкиСтатуса = ЯндексДиск.СкачатьНаДискИзИнтернета("/test-folder/onescript-nightly.zip", "http://oscript.io/downloads/night-build/zip"); 198 | СтатусОперации = ЯндексДиск.ПолучитьСтатусОперации(СсылкаПроверкиСтатуса); 199 | юТест.ПроверитьВхождение("in-progress,success,failure", СтатусОперации); 200 | 201 | КонецПроцедуры 202 | 203 | Процедура ТестДолжен_ПроверитьСкачиваниеФайлаСДиска_ССохранениемОригинальногоИмени() Экспорт 204 | 205 | ЦелевойКаталог = КаталогВременныхФайлов(); 206 | ПутьКЦелевомуФайлу = ОбъединитьПути(ЦелевойКаталог, "file1.txt"); 207 | Если (Новый Файл(ПутьКЦелевомуФайлу)).Существует() Тогда 208 | УдалитьФайлы(ПутьКЦелевомуФайлу); 209 | КонецЕсли; 210 | 211 | ПутьКСкачанномуФайлу = ЯндексДиск.СкачатьФайлСДиска(ЦелевойКаталог, "/test-folder/file1.txt"); 212 | 213 | юТест.ПроверитьИстину((Новый Файл(ПутьКСкачанномуФайлу)).Существует()); 214 | юТест.ПроверитьРавенство(ПутьКЦелевомуФайлу, ПутьКСкачанномуФайлу); 215 | 216 | Попытка 217 | УдалитьФайлы(ПутьКЦелевомуФайлу); 218 | Исключение 219 | КонецПопытки; 220 | 221 | КонецПроцедуры 222 | 223 | Процедура ТестДолжен_ПроверитьСкачиваниеФайлаСДиска_СНазначениемНовогоИмени() Экспорт 224 | 225 | ПутьКЦелевомуФайлу = ОбъединитьПути(КаталогВременныхФайлов(), Строка(Новый УникальныйИдентификатор)); 226 | 227 | ПутьКСкачанномуФайлу = ЯндексДиск.СкачатьФайлСДиска(ПутьКЦелевомуФайлу, "/test-folder/file1.txt"); 228 | 229 | юТест.ПроверитьИстину((Новый Файл(ПутьКСкачанномуФайлу)).Существует()); 230 | юТест.ПроверитьРавенство(ПутьКЦелевомуФайлу, ПутьКСкачанномуФайлу); 231 | 232 | Попытка 233 | УдалитьФайлы(ПутьКЦелевомуФайлу); 234 | Исключение 235 | КонецПопытки; 236 | 237 | КонецПроцедуры 238 | 239 | Процедура ТестДолжен_ПроверитьСкачиваниеФайлаСДиска_ВНесуществующийКаталог() Экспорт 240 | 241 | ФайлВНесуществующемКаталоге = ОбъединитьПути(КаталогВременныхФайлов(), Строка(Новый УникальныйИдентификатор), "test.txt"); 242 | 243 | МассивАргументов = Новый Массив; 244 | МассивАргументов.Добавить(ФайлВНесуществующемКаталоге); 245 | МассивАргументов.Добавить("/test-folder/file1.txt"); 246 | МассивАргументов.Добавить(Ложь); 247 | 248 | ПроверитьЧтоВызовВыбрасываетИсключение(ЯндексДиск, "СкачатьФайлСДиска", МассивАргументов, "Каталог не существует"); 249 | 250 | КонецПроцедуры 251 | 252 | Процедура ТестДолжен_ПроверитьСкачиваниеФайлаСДиска_КогдаЦелевойФайлСуществуетИПерезаписыватьНельзя() Экспорт 253 | 254 | ИмяФайла = ОбъединитьПути(КаталогВременныхФайлов(), Строка(Новый УникальныйИдентификатор)); 255 | 256 | ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла); 257 | ЗаписьТекста.Закрыть(); 258 | 259 | МассивАргументов = Новый Массив; 260 | МассивАргументов.Добавить(ИмяФайла); 261 | МассивАргументов.Добавить("/test-folder/file1.txt"); 262 | МассивАргументов.Добавить(Ложь); 263 | 264 | ПроверитьЧтоВызовВыбрасываетИсключение(ЯндексДиск, "СкачатьФайлСДиска", МассивАргументов, "Файл существует"); 265 | 266 | Попытка 267 | УдалитьФайлы(ИмяФайла); 268 | Исключение 269 | КонецПопытки; 270 | 271 | КонецПроцедуры 272 | 273 | Процедура ТестДолжен_ПроверитьСкачиваниеФайлаСДиска_КогдаЦелевойФайлСуществуетИНадоПерезаписать() Экспорт 274 | 275 | ПутьКЦелевомуФайлу = ОбъединитьПути(КаталогВременныхФайлов(), Строка(Новый УникальныйИдентификатор)); 276 | ЗаписьТекста = Новый ЗаписьТекста(ПутьКЦелевомуФайлу); 277 | ЗаписьТекста.Закрыть(); 278 | 279 | ПутьКСкачанномуФайлу = ЯндексДиск.СкачатьФайлСДиска(ПутьКЦелевомуФайлу, "/test-folder/file1.txt", Истина); 280 | 281 | юТест.ПроверитьИстину((Новый Файл(ПутьКСкачанномуФайлу)).Существует()); 282 | юТест.ПроверитьРавенство(ПутьКЦелевомуФайлу, ПутьКСкачанномуФайлу); 283 | 284 | // Проверим, по содержимому, что это именно тот файл, что мы скачивали. 285 | ЧтениеТекста = Новый ЧтениеТекста(ПутьКЦелевомуФайлу); 286 | Содержимое = ЧтениеТекста.Прочитать(); 287 | ЧтениеТекста.Закрыть(); 288 | 289 | юТест.ПроверитьРавенство("Hello!", СокрЛП(Содержимое)); 290 | 291 | Попытка 292 | УдалитьФайлы(ПутьКЦелевомуФайлу); 293 | Исключение 294 | КонецПопытки; 295 | 296 | КонецПроцедуры 297 | 298 | Процедура ТестДолжен_ПроверитьСкачиваниеФайлаСДиска_КогдаСкачиваетсяПапка() Экспорт 299 | 300 | ЦелевойКаталог = КаталогВременныхФайлов(); 301 | ПутьКЦелевомуФайлу = ОбъединитьПути(ЦелевойКаталог, "test-folder.zip"); 302 | Если (Новый Файл(ПутьКЦелевомуФайлу)).Существует() Тогда 303 | УдалитьФайлы(ПутьКЦелевомуФайлу); 304 | КонецЕсли; 305 | 306 | ПутьКСкачанномуФайлу = ЯндексДиск.СкачатьФайлСДиска(ПутьКЦелевомуФайлу, "/test-folder"); 307 | 308 | юТест.ПроверитьИстину((Новый Файл(ПутьКСкачанномуФайлу)).Существует()); 309 | юТест.ПроверитьРавенство(ПутьКЦелевомуФайлу, ПутьКСкачанномуФайлу); 310 | 311 | Попытка 312 | УдалитьФайлы(ПутьКЦелевомуФайлу); 313 | Исключение 314 | КонецПопытки; 315 | 316 | КонецПроцедуры 317 | 318 | Процедура ТестДолжен_ПроверитьУдалениеФайла_ВКорзину() Экспорт 319 | 320 | ПутьКЦелевомуФайлу = "/" + Строка(Новый УникальныйИдентификатор) + ".txt"; 321 | ЯндексДиск.ЗагрузитьНаДиск(ПолучитьАбсолютныйПуть("data/file-to-upload.txt"), ПутьКЦелевомуФайлу); 322 | 323 | юТест.ПроверитьИстину(ЯндексДиск.Удалить(ПутьКЦелевомуФайлу)); 324 | 325 | // Проверяем, что на диске файла больше нет. 326 | МассивАргументов = Новый Массив; 327 | МассивАргументов.Добавить(ПутьКЦелевомуФайлу); 328 | МассивАргументов.Добавить(Новый Структура("fields", "name")); 329 | ПроверитьЧтоВызовВыбрасываетИсключение(ЯндексДиск, "ПолучитьСвойстваРесурса", МассивАргументов, "404"); 330 | 331 | // Но при этом файл оказался в корзине. 332 | СвойстваУдаленногоФайла = ЯндексДиск.ПолучитьСвойстваРесурсаВКорзине(ПутьКЦелевомуФайлу, Новый Структура("fields", "name")); 333 | юТест.ПроверитьРавенство(Тип("Структура"), ТипЗнч(СвойстваУдаленногоФайла)); 334 | 335 | КонецПроцедуры 336 | 337 | Процедура ТестДолжен_ПроверитьУдалениеФайла_Безвозвратно() Экспорт 338 | 339 | ПутьКЦелевомуФайлу = "/" + Строка(Новый УникальныйИдентификатор) + ".txt"; 340 | ЯндексДиск.ЗагрузитьНаДиск(ПолучитьАбсолютныйПуть("data/file-to-upload.txt"), ПутьКЦелевомуФайлу); 341 | 342 | юТест.ПроверитьИстину(ЯндексДиск.Удалить(ПутьКЦелевомуФайлу, Истина)); 343 | 344 | // Проверяем, что файла больше нет. 345 | МассивАргументов = Новый Массив; 346 | МассивАргументов.Добавить(ПутьКЦелевомуФайлу); 347 | МассивАргументов.Добавить(Новый Структура("fields", "name")); 348 | ПроверитьЧтоВызовВыбрасываетИсключение(ЯндексДиск, "ПолучитьСвойстваРесурса", МассивАргументов, "404"); 349 | 350 | // Проверяем, что в корзине файла тоже нет. 351 | ПроверитьЧтоВызовВыбрасываетИсключение(ЯндексДиск, "ПолучитьСвойстваРесурсаВКорзине", МассивАргументов, "404") 352 | 353 | КонецПроцедуры 354 | 355 | Процедура ТестДолжен_ПроверитьКопированиеФайла() Экспорт 356 | 357 | ИмяФайла = Строка(Новый УникальныйИдентификатор) + ".txt"; 358 | ПутьКИсходномуФайлу = "/" + ИмяФайла; 359 | ЯндексДиск.ЗагрузитьНаДиск(ПолучитьАбсолютныйПуть("data/file-to-upload.txt"), ПутьКИсходномуФайлу); 360 | 361 | ПутьККопии = "/test-folder/" + ИмяФайла; 362 | 363 | юТест.ПроверитьИстину(ЯндексДиск.Копировать(ПутьКИсходномуФайлу, ПутьККопии)); 364 | 365 | // Проверяем, что файл скопировался. 366 | СвойстваУдаленногоФайла = ЯндексДиск.ПолучитьСвойстваРесурса(ПутьККопии, Новый Структура("fields", "name")); 367 | юТест.ПроверитьРавенство(Тип("Структура"), ТипЗнч(СвойстваУдаленногоФайла)); 368 | 369 | // Прибираем за собой. 370 | ЯндексДиск.Удалить(ПутьКИсходномуФайлу, Истина); 371 | ЯндексДиск.Удалить(ПутьККопии, Истина); 372 | 373 | КонецПроцедуры 374 | 375 | Процедура ТестДолжен_ПроверитьПеремещениеФайла() Экспорт 376 | 377 | ИмяФайла = Строка(Новый УникальныйИдентификатор) + ".txt"; 378 | ПутьКИсходномуФайлу = "/" + ИмяФайла; 379 | ЯндексДиск.ЗагрузитьНаДиск(ПолучитьАбсолютныйПуть("data/file-to-upload.txt"), ПутьКИсходномуФайлу); 380 | 381 | ПутьВПапкеНазначения = "/test-folder/" + ИмяФайла; 382 | 383 | юТест.ПроверитьИстину(ЯндексДиск.Переместить(ПутьКИсходномуФайлу, ПутьВПапкеНазначения)); 384 | 385 | // Проверяем, что файл Переместился: по пути назначения он появился 386 | СвойстваУдаленногоФайла = ЯндексДиск.ПолучитьСвойстваРесурса(ПутьВПапкеНазначения, Новый Структура("fields", "name")); 387 | юТест.ПроверитьРавенство(Тип("Структура"), ТипЗнч(СвойстваУдаленногоФайла)); 388 | 389 | // а по исходному пути его больше нет. 390 | МассивАргументов = Новый Массив; 391 | МассивАргументов.Добавить(ПутьКИсходномуФайлу); 392 | МассивАргументов.Добавить(Новый Структура("fields", "name")); 393 | ПроверитьЧтоВызовВыбрасываетИсключение(ЯндексДиск, "ПолучитьСвойстваРесурса", МассивАргументов, "404"); 394 | 395 | // Прибираем за собой. 396 | ЯндексДиск.Удалить(ПутьВПапкеНазначения, Истина); 397 | 398 | КонецПроцедуры 399 | 400 | Процедура ТестДолжен_ПроверитьСозданиеПапки() Экспорт 401 | 402 | ПутьКНовойПапке = "/test-folder/" + Строка(Новый УникальныйИдентификатор); 403 | 404 | ЯндексДиск.СоздатьПапку(ПутьКНовойПапке); 405 | 406 | // Проверяем, что папка была создана. 407 | СвойстваПапки = ЯндексДиск.ПолучитьСвойстваРесурса(ПутьКНовойПапке, Новый Структура("fields", "name")); 408 | юТест.ПроверитьРавенство(Тип("Структура"), ТипЗнч(СвойстваПапки)); 409 | 410 | // Прибираем за собой. 411 | ЯндексДиск.Удалить(ПутьКНовойПапке, Истина); 412 | 413 | КонецПроцедуры 414 | 415 | Процедура ТестДолжен_ПроверитьПубликациюРесурсаИОтменуПубликации() Экспорт 416 | 417 | ПутьКИсходномуФайлу = "/test-folder/" + Строка(Новый УникальныйИдентификатор) + ".txt"; 418 | ЯндексДиск.ЗагрузитьНаДиск(ПолучитьАбсолютныйПуть("data/file-to-upload.txt"), ПутьКИсходномуФайлу); 419 | 420 | ПубличныйUrl = ЯндексДиск.Опубликовать(ПутьКИсходномуФайлу); 421 | 422 | // Получили публичную ссылку. 423 | юТест.ПроверитьВхождение(ПубличныйUrl, "https://yadi.sk"); 424 | 425 | // Стал доступен публичный ключ файла. 426 | СвойстваФайла = ЯндексДиск.ПолучитьСвойстваРесурса(ПутьКИсходномуФайлу); 427 | юТест.ПроверитьИстину(СвойстваФайла.Свойство("public_key")); 428 | 429 | ЯндексДиск.ОтменитьПубликацию(ПутьКИсходномуФайлу); 430 | 431 | // Теперь публичный ключ больше не доступен. 432 | СвойстваФайла = ЯндексДиск.ПолучитьСвойстваРесурса(ПутьКИсходномуФайлу); 433 | юТест.ПроверитьЛожь(СвойстваФайла.Свойство("public_key")); 434 | 435 | // Прибираем за собой. 436 | ЯндексДиск.Удалить(ПутьКИсходномуФайлу, Истина); 437 | 438 | КонецПроцедуры 439 | 440 | Процедура ТестДолжен_ПроверитьСкачиваниеПубличногоРесурса() Экспорт 441 | 442 | ПутьКИсходномуФайлу = "/test-folder/" + Строка(Новый УникальныйИдентификатор) + ".txt"; 443 | ЯндексДиск.ЗагрузитьНаДиск(ПолучитьАбсолютныйПуть("data/file-to-upload.txt"), ПутьКИсходномуФайлу); 444 | ПубличныйUrl = ЯндексДиск.Опубликовать(ПутьКИсходномуФайлу); 445 | 446 | ЦелевойКаталог = КаталогВременныхФайлов(); 447 | ПутьКСкачанномуФайлу = ЯндексДиск.СкачатьПубличныйРесурс(ЦелевойКаталог, ПубличныйUrl); 448 | 449 | юТест.ПроверитьИстину((Новый Файл(ПутьКСкачанномуФайлу)).Существует()); 450 | 451 | // Прибираем за собой. 452 | ЯндексДиск.Удалить(ПутьКИсходномуФайлу, Истина); 453 | УдалитьФайлы(ПутьКСкачанномуФайлу); 454 | 455 | КонецПроцедуры 456 | 457 | Процедура ТестДолжен_ПроверитьСкачиваниеОтдельногоФайлаИзПубличнойПапки() Экспорт 458 | 459 | // Ссылка на публичную папку https://yadi.sk/d/Skw4ZnU8meYy8 460 | СвойстваПубличнойПапки = ЯндексДиск.ПолучитьСвойстваРесурса("/public_folder", Новый Структура("fields", "public_key")); 461 | 462 | ЦелевойКаталог = КаталогВременныхФайлов(); 463 | ПутьКСкачанномуФайлу = ЯндексДиск.СкачатьПубличныйРесурс(ЦелевойКаталог, СвойстваПубличнойПапки.public_key, "/file_from_public_folder.txt"); 464 | 465 | юТест.ПроверитьИстину((Новый Файл(ПутьКСкачанномуФайлу)).Существует()); 466 | 467 | // Прибираем за собой. 468 | УдалитьФайлы(ПутьКСкачанномуФайлу); 469 | 470 | КонецПроцедуры 471 | 472 | Процедура ТестДолжен_ПроверитьСкачиваниеПубличногоРесурсаВЗагрузки() Экспорт 473 | 474 | // Ссылка на публичную папку https://yadi.sk/d/Skw4ZnU8meYy8 475 | СвойстваПубличногоФайла = ЯндексДиск.ПолучитьСвойстваРесурса("/public_folder/public_file.txt"); 476 | 477 | юТест.ПроверитьИстину(ЯндексДиск.СохранитьПубличныйРесурсВЗагрузки(СвойстваПубличногоФайла.public_key)); 478 | 479 | // Убедимся, что файл появился в папке "Загрузки": 480 | СвойстваСкачанногоФайла = ЯндексДиск.ПолучитьСвойстваРесурса("/Загрузки/public_file.txt", Новый Структура("fields", "name")); 481 | юТест.ПроверитьРавенство(Тип("Структура"), ТипЗнч(СвойстваСкачанногоФайла)); 482 | 483 | // Прибираем за собой. 484 | ЯндексДиск.Удалить("/Загрузки/public_file.txt", Истина); 485 | 486 | КонецПроцедуры 487 | 488 | Процедура ТестДолжен_ПроверитьОчисткуКорзины() Экспорт 489 | 490 | ПутьКИсходномуФайлу = "/test-folder/" + Строка(Новый УникальныйИдентификатор) + ".txt"; 491 | ЯндексДиск.ЗагрузитьНаДиск(ПолучитьАбсолютныйПуть("data/file-to-upload.txt"), ПутьКИсходномуФайлу); 492 | 493 | ЯндексДиск.Удалить(ПутьКИсходномуФайлу); 494 | 495 | СписокФайловВКорзине = ЯндексДиск.ПолучитьСвойстваРесурсаВКорзине("/", Новый Структура("fields", "_embedded.items.name")); 496 | юТест.ПроверитьБольше(СписокФайловВКорзине._embedded.items.Количество(), 0); 497 | 498 | СсылкаНаСостояниеОперации = ЯндексДиск.ОчиститьКорзину(); 499 | юТест.ПроверитьРавенство(Тип("Структура"), ТипЗнч(СсылкаНаСостояниеОперации)); 500 | 501 | КонецПроцедуры 502 | 503 | Процедура ТестДолжен_ПроверитьВосстановлениеИзКорзины() Экспорт 504 | 505 | ИмяФайла = Строка(Новый УникальныйИдентификатор) + ".txt"; 506 | 507 | ПутьКИсходномуФайлу = "/test-folder/" + ИмяФайла; 508 | 509 | ЯндексДиск.ЗагрузитьНаДиск(ПолучитьАбсолютныйПуть("data/file-to-upload.txt"), ПутьКИсходномуФайлу); 510 | ЯндексДиск.Удалить(ПутьКИсходномуФайлу, Ложь, Истина); 511 | 512 | юТест.ПроверитьИстину(ЯндексДиск.ВосстановитьРесурсИзКорзины(ИмяФайла,,,Истина)); 513 | 514 | // Убедимся, что файл восстановлен. 515 | СвойстваФайла = ЯндексДиск.ПолучитьСвойстваРесурса(ПутьКИсходномуФайлу, Новый Структура("fields", "name")); 516 | юТест.ПроверитьРавенство(Тип("Структура"), ТипЗнч(СвойстваФайла)); 517 | 518 | // Прибираем за собой. 519 | ЯндексДиск.Удалить(ПутьКИсходномуФайлу, Истина); 520 | 521 | КонецПроцедуры 522 | 523 | /////////////////////////////////////////////////////////////////// 524 | // ВСПОМОГАТЕЛЬНЫЕ МЕТОДЫ 525 | /////////////////////////////////////////////////////////////////// 526 | 527 | Процедура ПроверитьЧтоВызовВыбрасываетИсключение(Объект, ИмяМетода, МассивАргументовМетода, ФрагментИсключения="") 528 | 529 | ИсключениеВозникло = Ложь; 530 | 531 | Попытка 532 | Рефлектор = Новый Рефлектор; 533 | Рефлектор.ВызватьМетод(Объект, ИмяМетода, МассивАргументовМетода); 534 | Исключение 535 | ИсключениеВозникло = Истина; 536 | ТекстИсключения = ОписаниеОшибки(); 537 | КонецПопытки; 538 | 539 | юТест.ПроверитьИстину( 540 | ИсключениеВозникло И Найти(ТекстИсключения, ФрагментИсключения) > 0, 541 | "Ожидали, что " + ИмяМетода + " ВЫБРОСИТ ИСКЛЮЧЕНИЕ" + 542 | ?(ЗначениеЗаполнено(ФрагментИсключения), " СОДЕРЖАЩЕЕ ТЕКСТ <" + ФрагментИсключения + ">, а был текст <" + ТекстИсключения + ">.", "") 543 | ); 544 | 545 | КонецПроцедуры 546 | 547 | Функция ПолучитьАбсолютныйПуть(ОтносительныйПуть) 548 | ТекущийПуть = Новый Файл(ТекущийСценарий().Источник).Путь; 549 | Возврат ОбъединитьПути(ТекущийПуть, ОтносительныйПуть); 550 | КонецФункции 551 | 552 | Функция РежимОтладки() 553 | Для каждого АргументКомСтроки из АргументыКоманднойСтроки Цикл 554 | Если НРег(АргументКомСтроки) = "--debug" Тогда 555 | Возврат Истина; 556 | КонецЕсли; 557 | КонецЦикла; 558 | Возврат Ложь; 559 | КонецФункции 560 | 561 | Функция ПолучитьПеременнуюСреды(ИмяПеременной) 562 | СистемнаяИнформация = Новый СистемнаяИнформация; 563 | Возврат СистемнаяИнформация.ПолучитьПеременнуюСреды(ИмяПеременной); 564 | КонецФункции 565 | 566 | Функция ПолучитьТокенАвторизации() 567 | Токен = ПолучитьПеременнуюСреды("YADISK_OAUTH_TOKEN"); 568 | Если ПустаяСтрока(Токен) Тогда 569 | ПутьКФайлуСТокеном = ОбъединитьПути(Новый Файл(ТекущийСценарий().Источник).Путь, "oauth_token.txt"); 570 | Если (Новый Файл(ПутьКФайлуСТокеном)).Существует() Тогда 571 | ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлуСТокеном); 572 | Токен = СокрЛП(ЧтениеТекста.Прочитать()); 573 | ЧтениеТекста.Закрыть(); 574 | Лог.Отладка("Токен получен из файла " + ПутьКФайлуСТокеном); 575 | КонецЕсли; 576 | Иначе 577 | Лог.Отладка("Токен получен из переменной среды YADISK_OAUTH_TOKEN"); 578 | КонецЕсли; 579 | Если ПустаяСтрока(Токен) Тогда 580 | Лог.Отладка("Токен пустой"); 581 | КонецЕсли; 582 | Возврат Токен; 583 | КонецФункции 584 | 585 | /////////////////////////////////////////////////////////////////// 586 | // Точка входа 587 | 588 | Инициализировать(); -------------------------------------------------------------------------------- /src/yadisk.os: -------------------------------------------------------------------------------- 1 | #Использовать json 2 | #Использовать logos 3 | 4 | Перем ТокенАвторизации; 5 | Перем АдресСервиса; 6 | Перем ВерсияAPI; 7 | 8 | Перем Соединение; 9 | Перем ПарсерJSON; 10 | Перем Лог; 11 | 12 | // Важно!!! Под linux для корректной работы HTTPS-соединения нужно выполнить команду 13 | // mozroots --import --sync 14 | 15 | Процедура Инициализировать() 16 | 17 | АдресСервиса = "https://cloud-api.yandex.net"; 18 | ВерсияAPI = "v1"; 19 | 20 | Соединение = Новый HTTPСоединение(ПолучитьАдресСервиса()); 21 | ПарсерJSON = Новый ПарсерJSON; 22 | 23 | Лог = Логирование.ПолучитьЛог("oscript.lib.yadisk"); 24 | 25 | КонецПроцедуры 26 | 27 | /////////////////////////////////////////////////////////////////////////////// 28 | // ПУБЛИЧНЫЕ МЕТОДЫ 29 | /////////////////////////////////////////////////////////////////////////////// 30 | 31 | Процедура УстановитьТокенАвторизации(Токен) Экспорт 32 | ТокенАвторизации = Токен; 33 | КонецПроцедуры 34 | 35 | Процедура УстановитьРежимОтладки(Включить=Истина) Экспорт 36 | Лог.УстановитьУровень(?(Включить, УровниЛога.Отладка, УровниЛога.Информация)); 37 | КонецПроцедуры 38 | 39 | Функция ПолучитьВерсиюAPI() Экспорт 40 | Возврат ВерсияAPI; 41 | КонецФункции 42 | 43 | Функция ПолучитьАдресСервиса() Экспорт 44 | Возврат АдресСервиса; 45 | КонецФункции 46 | 47 | Функция ПолучитьАдресРесурса(Ресурс, ПараметрыЗапроса=Неопределено, Относительный=Истина) Экспорт 48 | 49 | СтрокаЗапроса = ?(ПараметрыЗапроса = Неопределено, "", РаботаСUrl.СформироватьСтрокуЗапроса(ПараметрыЗапроса)); 50 | Если НЕ ПустаяСтрока(СтрокаЗапроса) Тогда 51 | СтрокаЗапроса = "?" + СтрокаЗапроса; 52 | КонецЕсли; 53 | 54 | Возврат ?(Относительный, "", ПолучитьАдресСервиса()) + "/" + ПолучитьВерсиюAPI() + Ресурс + СтрокаЗапроса; 55 | 56 | КонецФункции 57 | 58 | Функция ПолучитьЛог() Экспорт 59 | Возврат Лог; 60 | КонецФункции 61 | 62 | /////////////////////////////////////////////////////////////////////////////// 63 | // API Яндекс.Диска 64 | /////////////////////////////////////////////////////////////////////////////// 65 | 66 | //@see https://tech.yandex.ru/disk/api/reference/capacity-docpage/ 67 | Функция ПолучитьСвойстваДиска() Экспорт 68 | 69 | Возврат ВыполнитьЗапросМетодомGET("/disk"); 70 | 71 | КонецФункции 72 | 73 | //@see https://tech.yandex.ru/disk/api/reference/meta-docpage/ 74 | Функция ПолучитьСвойстваРесурса(ПутьНаДиске, СтруктураДополнительныхПараметров=Неопределено) Экспорт 75 | 76 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса( 77 | "path,sort,limit,offset,fields,preview_size,preview_crop", 78 | Новый Структура("path", ПутьНаДиске), 79 | СтруктураДополнительныхПараметров 80 | ); 81 | 82 | Возврат ВыполнитьЗапросМетодомGET("/disk/resources", ПараметрыЗапроса); 83 | 84 | КонецФункции 85 | 86 | //@see https://tech.yandex.ru/disk/api/reference/meta-docpage/ 87 | Функция ПолучитьСвойстваРесурсаВКорзине(ПутьВКорзине, СтруктураДополнительныхПараметров=Неопределено) Экспорт 88 | 89 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса( 90 | "path,sort,limit,offset,fields,preview_size,preview_crop", 91 | Новый Структура("path", ПутьВКорзине), 92 | СтруктураДополнительныхПараметров 93 | ); 94 | 95 | Возврат ВыполнитьЗапросМетодомGET("/disk/trash/resources", ПараметрыЗапроса); 96 | 97 | КонецФункции 98 | 99 | //@see https://tech.yandex.ru/disk/api/reference/all-files-docpage/ 100 | Функция ПолучитьСписокВсехФайлов(СтруктураДополнительныхПараметров=Неопределено) Экспорт 101 | 102 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса( 103 | "limit,media_type,offset,fields,preview_size,preview_crop", 104 | Неопределено, 105 | СтруктураДополнительныхПараметров 106 | ); 107 | 108 | Возврат ВыполнитьЗапросМетодомGET("/disk/resources/files", ПараметрыЗапроса); 109 | 110 | КонецФункции 111 | 112 | //@see https://tech.yandex.ru/disk/api/reference/recent-upload-docpage/ 113 | Функция ПолучитьСписокПоследнихЗагруженныхФайлов(СтруктураДополнительныхПараметров=Неопределено) Экспорт 114 | 115 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса( 116 | "limit,media_type,fields,preview_size,preview_crop", //WTF? В запросе почему-то нет параметра offset (в документации Яндекса его тоже нет) 117 | Неопределено, 118 | СтруктураДополнительныхПараметров 119 | ); 120 | 121 | Возврат ВыполнитьЗапросМетодомGET("/disk/resources/last-uploaded", ПараметрыЗапроса); 122 | 123 | КонецФункции 124 | 125 | //@see https://tech.yandex.ru/disk/api/reference/meta-add-docpage/ 126 | Функция УстановитьДопСвойстваРесурса(ПутьНаДиске, Свойства) Экспорт 127 | 128 | ВызватьИсключение ИсключениеМетодНеПоддерживается("HTTPСоединение в 1Script не поддерживает отправку запросов методом PATCH"); 129 | 130 | КонецФункции 131 | 132 | Функция ПолучитьДопСвойстваРесурса(ПутьНаДиске, ИменаСвойств="") Экспорт 133 | 134 | ВызватьИсключение ИсключениеМетодНеПоддерживается(); 135 | 136 | КонецФункции 137 | 138 | Функция УстановитьДопСвойствоРесурса(ПутьНаДиске, ИмяСвойства, ЗначениеСвойства) Экспорт 139 | 140 | Свойства = Новый Соответствие; 141 | Свойства.Вставить(ИмяСвойства, ЗначениеСвойства); 142 | 143 | Возврат УстановитьДопСвойстваРесурса(ПутьНаДиске, Свойства); 144 | 145 | КонецФункции 146 | 147 | Функция ПолучитьДопСвойствоРесурса(ПутьНаДиске, ИмяСвойства) Экспорт 148 | 149 | Свойства = ПолучитьДопСвойстваРесурса(ПутьНаДиске, ИмяСвойства); 150 | 151 | Возврат ?(Свойства = Неопределено, Неопределено, Свойства[ИмяСвойства]); 152 | 153 | КонецФункции 154 | 155 | //@see https://tech.yandex.ru/disk/api/reference/upload-docpage/ 156 | Процедура ЗагрузитьНаДиск(ЛокальныйПуть, ПутьНаДиске, Перезаписывать=Ложь) Экспорт 157 | 158 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса( 159 | "path,overwrite,fields", 160 | Новый Структура("path", ПутьНаДиске), 161 | Новый Структура("overwrite", Перезаписывать) 162 | ); 163 | 164 | Ссылка = ВыполнитьЗапросМетодомGET("/disk/resources/upload", ПараметрыЗапроса); 165 | 166 | Запрос = Новый HTTPЗапрос(Ссылка.href, СформироватьHTTPЗаголовки(Ложь)); 167 | Запрос.УстановитьИмяФайлаТела(ЛокальныйПуть); 168 | 169 | Ответ = Соединение.Записать(Запрос); 170 | Если Ответ.КодСостояния <> 201 Тогда 171 | ВызватьИсключение ИсключениеЯндексДиска(Ответ,"ЗагрузитьНаДиск"); 172 | КонецЕсли; 173 | 174 | КонецПроцедуры 175 | 176 | //@see https://tech.yandex.ru/disk/api/reference/upload-ext-docpage/ 177 | Функция СкачатьНаДискИзИнтернета(ПутьНаДиске, UrlФайла, ЗапретитьРедитекты=Ложь) Экспорт 178 | 179 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса( 180 | "url,path,fields,disable_redirects", 181 | Новый Структура("url,path", UrlФайла, ПутьНаДиске), 182 | Новый Структура("disable_redirects", ЗапретитьРедитекты) 183 | ); 184 | 185 | Ответ = Соединение.ОтправитьДляОбработки(Новый HTTPЗапрос( 186 | ПолучитьАдресРесурса("/disk/resources/upload", ПараметрыЗапроса), 187 | СформироватьHTTPЗаголовки() 188 | )); 189 | 190 | Если Ответ.КодСостояния = 202 Тогда 191 | СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку(); 192 | Лог.Отладка(СтрокаОтвета); 193 | Ссылка = ПарсерJSON.ПрочитатьJSON(СтрокаОтвета,,,Истина); 194 | Возврат Ссылка; 195 | КонецЕсли; 196 | 197 | ВызватьИсключение ИсключениеЯндексДиска(Ответ); 198 | 199 | КонецФункции 200 | 201 | //@see https://tech.yandex.ru/disk/api/reference/content-docpage/ 202 | Функция СкачатьФайлСДиска(ЛокальныйПуть, ПутьНаДиске, Перезаписывать=Ложь) Экспорт 203 | 204 | ЛокальныйПутьКФайлу = СформироватьПроверитьЛокальныйПутьСкачиваемогоФайла(ЛокальныйПуть, ПутьНаДиске, Неопределено, Перезаписывать); 205 | 206 | Параметры = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса( 207 | "path,fields", 208 | Новый Структура("path", ПутьНаДиске) 209 | ); 210 | 211 | СсылкаДляСкачивания = ВыполнитьЗапросМетодомGET("/disk/resources/download", Параметры); 212 | 213 | Запрос = Новый HTTPЗапрос(СсылкаДляСкачивания.href, СформироватьHTTPЗаголовки()); 214 | 215 | Ответ = Соединение.Получить(Запрос); 216 | Если Ответ.КодСостояния = 200 Тогда 217 | 218 | ДвоичныеДанные = Ответ.ПолучитьТелоКакДвоичныеДанные(); 219 | ДвоичныеДанные.Записать(ЛокальныйПутьКФайлу); 220 | 221 | Возврат ЛокальныйПутьКФайлу; 222 | 223 | КонецЕсли; 224 | 225 | ВызватьИсключение ИсключениеЯндексДиска(Ответ); 226 | 227 | КонецФункции 228 | 229 | //@see https://tech.yandex.ru/disk/api/reference/copy-docpage/ 230 | Функция Копировать(ПутьИсточникаНаДиске, ПутьНазначенияНаДиске, Перезаписывать=Ложь, ДожидатьсяРезультатаВыполнения=Ложь) Экспорт 231 | 232 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса( 233 | "from,path,overwrite,fields", 234 | Новый Структура("from,path", ПутьИсточникаНаДиске, ПутьНазначенияНаДиске), 235 | Новый Структура("overwrite", Перезаписывать) 236 | ); 237 | 238 | Ответ = Соединение.ОтправитьДляОбработки(Новый HTTPЗапрос( 239 | ПолучитьАдресРесурса("/disk/resources/copy", ПараметрыЗапроса), 240 | СформироватьHTTPЗаголовки() 241 | )); 242 | 243 | Если Ответ.КодСостояния = 202 Тогда 244 | 245 | // Копируется непуская папка 246 | СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку(); 247 | Лог.Отладка(СтрокаОтвета); 248 | СсылкаНаСтатусОперации = ПарсерJSON.ПрочитатьJSON(СтрокаОтвета,,,Истина); 249 | 250 | Если ДожидатьсяРезультатаВыполнения Тогда 251 | Возврат (ДождатьсяРезультатаВыполненияОперации(СсылкаНаСтатусОперации, "Копировать") = "success"); 252 | КонецЕсли; 253 | 254 | Возврат СсылкаНаСтатусОперации; 255 | 256 | ИначеЕсли Ответ.КодСостояния = 201 Тогда 257 | Возврат Истина; 258 | КонецЕсли; 259 | 260 | ВызватьИсключение ИсключениеЯндексДиска(Ответ); 261 | 262 | КонецФункции 263 | 264 | //@see https://tech.yandex.ru/disk/api/reference/move-docpage/ 265 | Функция Переместить(ПутьИсточникаНаДиске, ПутьНазначенияНаДиске, Перезаписывать=Ложь, ДожидатьсяРезультатаВыполнения=Ложь) Экспорт 266 | 267 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса( 268 | "from,path,overwrite,fields", 269 | Новый Структура("from,path", ПутьИсточникаНаДиске, ПутьНазначенияНаДиске), 270 | Новый Структура("overwrite", Перезаписывать) 271 | ); 272 | 273 | Ответ = Соединение.ОтправитьДляОбработки(Новый HTTPЗапрос( 274 | ПолучитьАдресРесурса("/disk/resources/move", ПараметрыЗапроса), 275 | СформироватьHTTPЗаголовки() 276 | )); 277 | 278 | Если Ответ.КодСостояния = 202 Тогда 279 | 280 | // Перемещается непуская папка 281 | СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку(); 282 | Лог.Отладка(СтрокаОтвета); 283 | СсылкаНаСтатусОперации = ПарсерJSON.ПрочитатьJSON(СтрокаОтвета,,,Истина); 284 | 285 | Если ДожидатьсяРезультатаВыполнения Тогда 286 | Возврат (ДождатьсяРезультатаВыполненияОперации(СсылкаНаСтатусОперации, "Переместить") = "success"); 287 | КонецЕсли; 288 | 289 | Возврат СсылкаНаСтатусОперации; 290 | 291 | ИначеЕсли Ответ.КодСостояния = 201 Тогда 292 | Возврат Истина; 293 | КонецЕсли; 294 | 295 | ВызватьИсключение ИсключениеЯндексДиска(Ответ); 296 | 297 | КонецФункции 298 | 299 | //@see https://tech.yandex.ru/disk/api/reference/delete-docpage/ 300 | Функция Удалить(ПутьНаДиске, Безвозвратно=Ложь, ДожидатьсяРезультатаВыполнения=Ложь) Экспорт 301 | 302 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса( 303 | "path,permanently,fields", 304 | Новый Структура("path", ПутьНаДиске), 305 | Новый Структура("permanently", Безвозвратно) 306 | ); 307 | 308 | Лог.Отладка(ПолучитьАдресРесурса("/disk/resources", ПараметрыЗапроса)); 309 | 310 | Ответ = Соединение.Удалить(Новый HTTPЗапрос( 311 | ПолучитьАдресРесурса("/disk/resources", ПараметрыЗапроса), 312 | СформироватьHTTPЗаголовки() 313 | )); 314 | 315 | Если Ответ.КодСостояния = 202 Тогда 316 | 317 | СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку(); 318 | Лог.Отладка(СтрокаОтвета); 319 | СсылкаНаСтатусОперации = ПарсерJSON.ПрочитатьJSON(СтрокаОтвета,,,Истина); 320 | 321 | Если ДожидатьсяРезультатаВыполнения Тогда 322 | Возврат (ДождатьсяРезультатаВыполненияОперации(СсылкаНаСтатусОперации, "Удалить") = "success"); 323 | КонецЕсли; 324 | 325 | Возврат СсылкаНаСтатусОперации; 326 | 327 | ИначеЕсли Ответ.КодСостояния = 204 Тогда 328 | Возврат Истина; 329 | КонецЕсли; 330 | 331 | ВызватьИсключение ИсключениеЯндексДиска(Ответ); 332 | 333 | КонецФункции 334 | 335 | Функция ИсключениеТаймаутОжиданияВыполненияОперации(ИмяОперации) 336 | Возврат "Таймаут ожидания завершени операции " + ИмяОперации; 337 | КонецФункции 338 | 339 | //@see https://tech.yandex.ru/disk/api/reference/create-folder-docpage/ 340 | Функция СоздатьПапку(ПутьНаДиске) Экспорт 341 | 342 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса( 343 | "path,fields", 344 | Новый Структура("path", ПутьНаДиске), 345 | Неопределено 346 | ); 347 | 348 | Ответ = Соединение.Записать(Новый HTTPЗапрос( 349 | ПолучитьАдресРесурса("/disk/resources", ПараметрыЗапроса), 350 | СформироватьHTTPЗаголовки() 351 | )); 352 | 353 | Если Ответ.КодСостояния <> 201 Тогда 354 | ВызватьИсключение ИсключениеЯндексДиска(Ответ,"СоздатьПапку"); 355 | КонецЕсли; 356 | 357 | КонецФункции 358 | 359 | //@see https://tech.yandex.ru/disk/api/reference/publish-docpage/ 360 | Функция Опубликовать(ПутьНаДиске) Экспорт 361 | 362 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса( 363 | "path", 364 | Новый Структура("path", ПутьНаДиске), 365 | Неопределено 366 | ); 367 | 368 | Ответ = Соединение.Записать(Новый HTTPЗапрос( 369 | ПолучитьАдресРесурса("/disk/resources/publish", ПараметрыЗапроса), 370 | СформироватьHTTPЗаголовки() 371 | )); 372 | 373 | Если Ответ.КодСостояния = 200 Тогда 374 | // Получим публичный URL. 375 | СвойстваРесурса = ПолучитьСвойстваРесурса(ПутьНаДиске, Новый Структура("fields", "public_url")); 376 | Возврат СвойстваРесурса.public_url; 377 | КонецЕсли; 378 | 379 | ВызватьИсключение ИсключениеЯндексДиска(Ответ,"СоздатьПапку"); 380 | 381 | КонецФункции 382 | 383 | //@see https://tech.yandex.ru/disk/api/reference/publish-docpage/#unpublish-q 384 | Функция ОтменитьПубликацию(ПутьНаДиске) Экспорт 385 | 386 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса( 387 | "path", 388 | Новый Структура("path", ПутьНаДиске), 389 | Неопределено 390 | ); 391 | 392 | Ответ = Соединение.Записать(Новый HTTPЗапрос( 393 | ПолучитьАдресРесурса("/disk/resources/unpublish", ПараметрыЗапроса), 394 | СформироватьHTTPЗаголовки() 395 | )); 396 | 397 | Если Ответ.КодСостояния <> 200 Тогда 398 | ВызватьИсключение ИсключениеЯндексДиска(Ответ,"СоздатьПапку"); 399 | КонецЕсли; 400 | 401 | КонецФункции 402 | 403 | //@see https://tech.yandex.ru/disk/api/reference/public-docpage/#meta 404 | Функция ПолучитьСвойстваПубличногоРесурса(КлючПубличногоРесурса, СтруктураДополнительныхПараметров=Неопределено) Экспорт 405 | 406 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса( 407 | "public_key,path,sort,limit,offset,preview_size,preview_crop", 408 | Новый Структура("public_key", КлючПубличногоРесурса), 409 | СтруктураДополнительныхПараметров 410 | ); 411 | 412 | Возврат ВыполнитьЗапросМетодомGET("/disk/public/resources", ПараметрыЗапроса); 413 | 414 | КонецФункции 415 | 416 | //@see https://tech.yandex.ru/disk/api/reference/public-docpage/#download 417 | Функция СкачатьПубличныйРесурс(ЛокальныйПуть, КлючПубличногоРесурса, ПутьВнутриПубличнойПапки="", Перезаписывать=Ложь) Экспорт 418 | 419 | ЛокальныйПутьКФайлу = СформироватьПроверитьЛокальныйПутьСкачиваемогоФайла(ЛокальныйПуть, ПутьВнутриПубличнойПапки, КлючПубличногоРесурса, Перезаписывать); 420 | 421 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса( 422 | "public_key,path", 423 | Новый Структура("public_key", КлючПубличногоРесурса), 424 | ?(ПустаяСтрока(ПутьВнутриПубличнойПапки), Неопределено, Новый Структура("path", ПутьВнутриПубличнойПапки)) 425 | ); 426 | 427 | СсылкаДляСкачивания = ВыполнитьЗапросМетодомGET("/disk/public/resources/download", ПараметрыЗапроса); 428 | 429 | Запрос = Новый HTTPЗапрос(СсылкаДляСкачивания.href, СформироватьHTTPЗаголовки()); 430 | 431 | Ответ = Соединение.Получить(Запрос); 432 | Если Ответ.КодСостояния = 200 Тогда 433 | 434 | ДвоичныеДанные = Ответ.ПолучитьТелоКакДвоичныеДанные(); 435 | ДвоичныеДанные.Записать(ЛокальныйПутьКФайлу); 436 | 437 | Возврат ЛокальныйПутьКФайлу; 438 | 439 | КонецЕсли; 440 | 441 | ВызватьИсключение ИсключениеЯндексДиска(Ответ); 442 | 443 | КонецФункции 444 | 445 | //@see https://tech.yandex.ru/disk/api/reference/public-docpage/#save 446 | Функция СохранитьПубличныйРесурсВЗагрузки(КлючПубличногоРесурса, ПутьВнутриПубличнойПапки="", НовоеИмя="") Экспорт 447 | 448 | СтруктураДополнительныхПараметров = Новый Структура; 449 | Если НЕ ПустаяСтрока(ПутьВнутриПубличнойПапки) Тогда 450 | СтруктураДополнительныхПараметров.Вставить("path", ПутьВнутриПубличнойПапки); 451 | КонецЕсли; 452 | Если НЕ ПустаяСтрока(НовоеИмя) Тогда 453 | СтруктураДополнительныхПараметров.Вставить("name", НовоеИмя); 454 | КонецЕсли; 455 | 456 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса( 457 | "public_key,path,name", 458 | Новый Структура("public_key", КлючПубличногоРесурса), 459 | СтруктураДополнительныхПараметров 460 | ); 461 | 462 | Ответ = Соединение.ОтправитьДляОбработки(Новый HTTPЗапрос( 463 | ПолучитьАдресРесурса("/disk/public/resources/save-to-disk/", ПараметрыЗапроса), 464 | СформироватьHTTPЗаголовки() 465 | )); 466 | 467 | Если Ответ.КодСостояния = 202 Тогда 468 | СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку(); 469 | Лог.Отладка(СтрокаОтвета); 470 | Ссылка = ПарсерJSON.ПрочитатьJSON(СтрокаОтвета,,,Истина); 471 | Возврат Ссылка; 472 | ИначеЕсли Ответ.КодСостояния = 201 Тогда 473 | Возврат Истина; 474 | КонецЕсли; 475 | 476 | ВызватьИсключение ИсключениеЯндексДиска(Ответ); 477 | 478 | КонецФункции 479 | 480 | //@see https://tech.yandex.ru/disk/api/reference/recent-public-docpage/ 481 | Функция ПолучитьСписокОпубликованныхРесурсов(СтруктураДополнительныхПараметров=Неопределено) Экспорт 482 | 483 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса( 484 | "limit,offset,type,fields,preview_size", 485 | Неопределено, 486 | СтруктураДополнительныхПараметров 487 | ); 488 | 489 | Возврат ВыполнитьЗапросМетодомGET("/disk/resources/public", ПараметрыЗапроса); 490 | 491 | КонецФункции 492 | 493 | Функция ПолучитьФайлыВКорзине() Экспорт 494 | Возврат ВыполнитьЗапросМетодомGET("/disk/trash/resources/"); 495 | КонецФункции 496 | 497 | //@see https://tech.yandex.ru/disk/api/reference/trash-delete-docpage/ 498 | Функция ОчиститьКорзину(ПутьВКорзине="", ДожидатьсяРезультатаВыполнения=Ложь) Экспорт 499 | 500 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса( 501 | "path", 502 | Неопределено, 503 | ?(ПустаяСтрока(ПутьВКорзине), Неопределено, Новый Структура("path", ПутьВКорзине)) 504 | ); 505 | 506 | Ответ = Соединение.Удалить(Новый HTTPЗапрос( 507 | ПолучитьАдресРесурса("/disk/trash/resources/", ПараметрыЗапроса), 508 | СформироватьHTTPЗаголовки() 509 | )); 510 | 511 | Если Ответ.КодСостояния = 202 Тогда 512 | 513 | СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку(); 514 | Лог.Отладка(СтрокаОтвета); 515 | СсылкаНаСтатусОперации = ПарсерJSON.ПрочитатьJSON(СтрокаОтвета,,,Истина); 516 | 517 | Если ДожидатьсяРезультатаВыполнения Тогда 518 | Возврат (ДождатьсяРезультатаВыполненияОперации(СсылкаНаСтатусОперации, "ОчиститьКорзину") = "success"); 519 | КонецЕсли; 520 | 521 | Возврат СсылкаНаСтатусОперации; 522 | 523 | ИначеЕсли Ответ.КодСостояния = 204 Тогда 524 | Возврат Истина; 525 | КонецЕсли; 526 | 527 | ВызватьИсключение ИсключениеЯндексДиска(Ответ); 528 | 529 | КонецФункции 530 | 531 | //@see https://tech.yandex.ru/disk/api/reference/trash-restore-docpage/ 532 | Функция ВосстановитьРесурсИзКорзины(ПутьВКорзине, НовоеИмя="", Перезаписывать=Ложь, ДожидатьсяРезультатаВыполнения=Ложь) Экспорт 533 | 534 | СтруктураДополнительныхПараметров = Новый Структура; 535 | Если НЕ ПустаяСтрока(НовоеИмя) Тогда 536 | СтруктураДополнительныхПараметров.Вставить("name", НовоеИмя); 537 | КонецЕсли; 538 | Если Перезаписывать Тогда 539 | СтруктураДополнительныхПараметров.Вставить("overwrite", Перезаписывать); 540 | КонецЕсли; 541 | 542 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса( 543 | "path,name,overwrite", 544 | Новый Структура("path", ПутьВКорзине), 545 | СтруктураДополнительныхПараметров 546 | ); 547 | 548 | Ответ = Соединение.Записать(Новый HTTPЗапрос( 549 | ПолучитьАдресРесурса("/disk/trash/resources/restore", ПараметрыЗапроса), 550 | СформироватьHTTPЗаголовки() 551 | )); 552 | 553 | Если Ответ.КодСостояния = 202 Тогда 554 | 555 | СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку(); 556 | Лог.Отладка(СтрокаОтвета); 557 | 558 | СсылкаНаСтатусОперации = ПарсерJSON.ПрочитатьJSON(СтрокаОтвета,,,Истина); 559 | 560 | Если ДожидатьсяРезультатаВыполнения Тогда 561 | Возврат (ДождатьсяРезультатаВыполненияОперации(СсылкаНаСтатусОперации, "ВосстановитьРесурсИзКорзины") = "success"); 562 | КонецЕсли; 563 | 564 | Возврат СсылкаНаСтатусОперации; 565 | 566 | ИначеЕсли Ответ.КодСостояния = 201 Тогда 567 | Возврат Истина; 568 | КонецЕсли; 569 | 570 | ВызватьИсключение ИсключениеЯндексДиска(Ответ); 571 | 572 | КонецФункции 573 | 574 | //@see https://tech.yandex.ru/disk/api/reference/operations-docpage/ 575 | Функция ПолучитьСтатусОперации(Ссылка) Экспорт 576 | 577 | Запрос = Новый HTTPЗапрос(Ссылка.href, СформироватьHTTPЗаголовки()); 578 | 579 | Ответ = Соединение.Получить(Запрос); 580 | 581 | Если Ответ.КодСостояния = 200 Тогда 582 | 583 | СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку(); 584 | Лог.Отладка(СтрокаОтвета); 585 | 586 | СтатусОперации = ПарсерJSON.ПрочитатьJSON(СтрокаОтвета,,,Истина); 587 | Возврат СтатусОперации.status; 588 | 589 | КонецЕсли; 590 | 591 | ВызватьИсключение ИсключениеЯндексДиска(Ответ); 592 | 593 | КонецФункции 594 | 595 | Функция ДождатьсяРезультатаВыполненияОперации(СсылкаНаСтатусОперации, ИмяОперации) Экспорт 596 | Лог.Отладка("Ожидаем результата выполнения операции " + ИмяОперации); 597 | 598 | КоличествоПопыток = 10; 599 | Пока Истина Цикл 600 | 601 | ТекущийСтатус = ПолучитьСтатусОперации(СсылкаНаСтатусОперации); 602 | Если ТекущийСтатус <> "in-progress" Тогда 603 | Лог.Отладка(СтрШаблон("Получен результат операции %1: %2", ИмяОперации, ТекущийСтатус)); 604 | Возврат ТекущийСтатус; 605 | КонецЕсли; 606 | 607 | КоличествоПопыток = КоличествоПопыток - 1; 608 | Если КоличествоПопыток = 0 Тогда 609 | ВызватьИсключение ИсключениеТаймаутОжиданияВыполненияОперации(ИмяОперации); 610 | КонецЕсли; 611 | 612 | Приостановить(1000); 613 | 614 | КонецЦикла; 615 | 616 | Возврат Неопределено; 617 | 618 | КонецФункции 619 | 620 | /////////////////////////////////////////////////////////////////////////////// 621 | // ВСПОМОГАТЕЛЬНЫЕ МЕТОДЫ 622 | /////////////////////////////////////////////////////////////////////////////// 623 | 624 | Функция ИсключениеМетодНеПоддерживается(ДополнительнаяИнформация = "") 625 | Возврат "Метод в настоящий момент не поддерживается" + ?(ПустаяСтрока(ДополнительнаяИнформация), "", ": " + ДополнительнаяИнформация); 626 | КонецФункции 627 | 628 | Функция ИсключениеКаталогНеСуществует(Путь) 629 | Возврат "Каталог не существует: " + Путь; 630 | КонецФункции 631 | 632 | Функция ИсключениеФайлСуществует(Путь) 633 | Возврат "Файл существует: " + Путь; 634 | КонецФункции 635 | 636 | Функция ИсключениеЯндексДиска(HTTPОтвет, МеткаДляОтладки="") 637 | ТелоОтвета = HTTPОтвет.ПолучитьТелоКакСтроку(); 638 | 639 | Попытка 640 | ОбъектОшибки = ПарсерJSON.ПрочитатьJSON(ТелоОтвета,,,Истина); 641 | ОписаниеОшибки = ОбъектОшибки.description; 642 | Исключение 643 | ОписаниеОшибки = ТелоОтвета; 644 | КонецПопытки; 645 | 646 | ТекстИсключения = СтрШаблон("Яндекс.Диск ответил кодом ошибки %1: %2", HTTPОтвет.КодСостояния, ОписаниеОшибки); 647 | 648 | Лог.Ошибка(?(ПустаяСтрока(МеткаДляОтладки), "", " [" + МеткаДляОтладки + "] ") + ТекстИсключения); 649 | 650 | Возврат ТекстИсключения; 651 | КонецФункции 652 | 653 | Функция СформироватьHTTPЗаголовки(ДобавлятьТокенАвторизации=Истина) 654 | Заголовки = Новый Соответствие(); 655 | Заголовки.Вставить("Accept", "application/json"); 656 | Заголовки.Вставить("Content-Type", "application/json"); 657 | Если ДобавлятьТокенАвторизации Тогда 658 | Заголовки.Вставить("Authorization", ТокенАвторизации); 659 | КонецЕсли; 660 | Возврат Заголовки; 661 | КонецФункции 662 | 663 | Функция ВыполнитьЗапросМетодомGET(Ресурс, ПараметрыЗапроса=Неопределено) 664 | Запрос = Новый HTTPЗапрос( 665 | ПолучитьАдресРесурса(Ресурс, ПараметрыЗапроса), 666 | СформироватьHTTPЗаголовки() 667 | ); 668 | 669 | Лог.Отладка(ПолучитьАдресРесурса(Ресурс, ПараметрыЗапроса)); 670 | 671 | Ответ = Соединение.Получить(Запрос); 672 | 673 | Если Ответ.КодСостояния = 200 Тогда 674 | СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку(); 675 | Лог.Отладка(СтрокаОтвета); 676 | Объект = ПарсерJSON.ПрочитатьJSON(СтрокаОтвета,,,Истина); 677 | Возврат Объект; 678 | КонецЕсли; 679 | 680 | ВызватьИсключение ИсключениеЯндексДиска(Ответ, "ВыполнитьЗапросМетодомGET"); 681 | КонецФункции 682 | 683 | Функция СформироватьПроверитьЛокальныйПутьСкачиваемогоФайла(ЛокальныйПуть, ПутьНаДиске, КлючПубличногоРесурса, Перезаписывать) 684 | 685 | // Определяем локальный каталог, в который будем скачивать файл и имя скачанного файла. 686 | ИмяФайла = ""; 687 | КаталогНазначения = Новый Файл(ЛокальныйПуть); 688 | 689 | Если КаталогНазначения.ЭтоФайл() Тогда 690 | 691 | Лог.Отладка("Локальный путь - это файл: " + ЛокальныйПуть); 692 | ИмяФайла = КаталогНазначения.Имя; 693 | КаталогНазначения = Новый Файл(КаталогНазначения.Путь); 694 | 695 | ИначеЕсли КаталогНазначения.ЭтоКаталог() Тогда 696 | 697 | // Если ЛокальныйПуть - это каталог, в который надо скачать файл, 698 | // то сохраним исходное имя файла, как оно было задано на Диске. 699 | Лог.Отладка("Локальный путь - это каталог: " + ЛокальныйПуть); 700 | СвойстваРесурса = ?(КлючПубличногоРесурса = Неопределено, 701 | ПолучитьСвойстваРесурса(ПутьНаДиске, Новый Структура("fields", "name,type")), 702 | ПолучитьСвойстваПубличногоРесурса(КлючПубличногоРесурса, Новый Структура("path", ПутьНаДиске)) 703 | ); 704 | 705 | ИмяФайла = СвойстваРесурса.name; 706 | Если СвойстваРесурса.type = "dir" Тогда 707 | // Папки скачиваются как zip-архив. 708 | ИмяФайла = ИмяФайла + ".zip"; 709 | КонецЕсли; 710 | 711 | КонецЕсли; 712 | 713 | // Каталог, в который скачиваем файл должен существовать. 714 | Если НЕ КаталогНазначения.Существует() Тогда 715 | ВызватьИсключение ИсключениеКаталогНеСуществует(КаталогНазначения); 716 | КонецЕсли; 717 | 718 | ФайлНазначения = Новый Файл(ОбъединитьПути(КаталогНазначения.ПолноеИмя, ИмяФайла)); 719 | Если ФайлНазначения.Существует() И НЕ Перезаписывать Тогда 720 | ВызватьИсключение ИсключениеФайлСуществует(ФайлНазначения.ПолноеИмя); 721 | КонецЕсли; 722 | 723 | Возврат ФайлНазначения.ПолноеИмя 724 | 725 | КонецФункции 726 | 727 | /////////////////////////////////////////////////////////////////////////////// 728 | // ТОЧКА ВХОДА 729 | /////////////////////////////////////////////////////////////////////////////// 730 | 731 | Инициализировать(); --------------------------------------------------------------------------------