1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2024-12-29 02:57:35 +02:00
OpenIntegrations/OInt/core/Modules/OPI_VK.os
2024-05-29 16:26:04 +00:00

2191 lines
120 KiB
Plaintext

// Расположение OS: ./OInt/core/Modules/OPI_VK.os
// Библиотека: VK
// Команда CLI: vk
// MIT License
// Copyright (c) 2023 Anton Tsitavets
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
// https://github.com/Bayselonarrend/OpenIntegrations
// Если в не знаете с чего начать, то стоит найти метод ПолучитьСтандартныеПараметры()
// и почитать комментарии
// BSLLS:NumberOfOptionalParams-off
// BSLLS:LatinAndCyrillicSymbolInWord-off
// BSLLS:IncorrectLineBreak-off
// BSLLS:NumberOfOptionalParams-off
// BSLLS:UsingServiceTag-off
// BSLLS:UnusedLocalVariable-off
//@skip-check method-too-many-params
//@skip-check wrong-string-literal-content
// Раскомментировать, если выполняется OneScript
#Использовать "../../tools"
#Область ПрограммныйИнтерфейс
#Область ПолучениеТокена
// Создать ссылку получения токена
// Получение ссылки для интерактивного получения токена (access_token), который необходим
// для дальнейших действий
//
// Параметры:
// app_id - Строка,Число - app_id из настроек приложения - app
//
// Возвращаемое значение:
// Строка - URL, по которому необходимо перейти в браузере
Функция СоздатьСсылкуПолученияТокена(Знач App_id) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(App_id);
// access_token нужно будет забрать из параметра в строке адреса браузера
Возврат "https://oauth.vk.com/authorize?client_id=" + App_id
+ "&scope=offline,wall,groups,photos,stats,stories,ads,market,video"
+ "&v=5.131&response_type=token&redirect_uri=https://api.vk.com/blank.html";
КонецФункции
#КонецОбласти
#Область РаботаСГруппой
// Создать пост
// Создает пост с картинками
//
// Параметры:
// Текст - Строка - Текст поста - text
// МассивКартинок - Массив из Строка,ДвоичныеДанные - Массив картинок - pictures
// Реклама - Булево - Признак ""Это реклама"" - ad
// СсылкаПодЗаписью - Строка - Ссылка (URL) под записью - url
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция СоздатьПост(Знач Текст
, Знач МассивКартинок
, Знач Реклама = Ложь
, Знач СсылкаПодЗаписью = ""
, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивКартинок);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
МассивВложений = Новый Массив;
Для Каждого КартинкаПоста Из МассивКартинок Цикл
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
ОтветСоответствие = ПолучитьСоответствиеКартинки(КартинкаПоста, Параметры_, "Пост");
OwnerId = ОтветСоответствие.Получить("owner_id");
ObjectId = ОтветСоответствие.Получить("id");
Если Не ЗначениеЗаполнено(OwnerId) Или Не ЗначениеЗаполнено(ObjectId) Тогда
Возврат ОтветСоответствие;
КонецЕсли;
OwnerId = OPI_Инструменты.ЧислоВСтроку(OwnerId);
ObjectId = OPI_Инструменты.ЧислоВСтроку(ObjectId);
ФотоID = "photo" + OwnerId + "_" + ObjectId;
МассивВложений.Добавить(ФотоID);
КонецЦикла;
Ответ = СоздатьСоставнойПост(Текст, МассивВложений, Реклама, СсылкаПодЗаписью, Параметры);
Возврат Ответ;
КонецФункции
// Создать составной пост
// Создает пост на основе массива идетификаторов объектов (картинок, видео и др.)
//
// Параметры:
// Текст - Строка - Текст поста - text
// Объекты - Массив из Строка - Массив идентификаторов вида photo123_123 - objects
// Реклама - Булево - Признак ""Это реклама"" - ad
// СсылкаПодЗаписью - Строка - Ссылка (URL) под записью - url
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция СоздатьСоставнойПост(Знач Текст
, Знач Объекты
, Знач Реклама = Ложь
, Знач СсылкаПодЗаписью = ""
, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст);
OPI_ПреобразованиеТипов.ПолучитьСтроку(СсылкаПодЗаписью);
OPI_ПреобразованиеТипов.ПолучитьБулево(Реклама);
Параметры = ПолучитьСтандартныеПараметры(Параметры);
СтрокаВложений = СтрСоединить(Объекты, ",");
СтрокаВложений = СтрокаВложений + СсылкаПодЗаписью;
Параметры.Вставить("message" , Текст);
Параметры.Вставить("attachments" , СтрокаВложений);
Параметры.Вставить("mark_as_ads" , ?(Реклама, 1, 0));
Параметры.Вставить("close_comments" , ?(Реклама, 1, 0));
Ответ = OPI_Инструменты.Get("api.vk.com/method/wall.post", Параметры);
Возврат Ответ;
КонецФункции
// Удалить пост
// Удаляет пост по id
//
// Параметры:
// IDПоста - Строка,Число - ID поста - post
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция УдалитьПост(Знач IDПоста, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDПоста);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Параметры_.Вставить("post_id", IDПоста);
Ответ = OPI_Инструменты.Get("api.vk.com/method/wall.delete", Параметры_);
Возврат Ответ;
КонецФункции
// Создать опрос
// Создает опрос с вариантами ответа
//
// Параметры:
// Вопрос - Строка - Вопрос опроса - question
// МассивОтветов - Массив из Строка - Массив вариантов ответа - options
// Картинка - Строка,ДвоичныеДанные - Картинка опроса - picture
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция СоздатьОпрос(Знач Вопрос, Знач МассивОтветов, Знач Картинка = "", Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Вопрос);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивОтветов);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Response = "response";
Если ЗначениеЗаполнено(Картинка) Тогда
Ответ = ЗагрузитьФотоНаСервер(Картинка, Параметры_, "Опрос");
Фото = Ответ.Получить(Response);
Если ЗначениеЗаполнено(Фото) Тогда
IDФото = Фото["id"];
Если Не ЗначениеЗаполнено(IDФото) Тогда
Возврат Ответ;
КонецЕсли;
Иначе
Возврат Ответ;
КонецЕсли;
КонецЕсли;
Параметры_.Вставить("is_anonymous", 1);
Параметры_.Вставить("is_multiple" , 0);
Ответы = СтрСоединить(МассивОтветов, """,""");
Ответы = "[""" + Ответы + """]";
Параметры_.Вставить("add_answers", Ответы);
Параметры_.Вставить("photo_id" , OPI_Инструменты.ЧислоВСтроку(IDФото));
Параметры_.Вставить("question" , Вопрос);
Опрос = OPI_Инструменты.Get("api.vk.com/method/polls.create", Параметры_);
ОпросСоответствие = Опрос.Получить(Response);
Если Не ЗначениеЗаполнено(ОпросСоответствие) Тогда
Возврат Опрос;
КонецЕсли;
OwnerId = ОпросСоответствие.Получить("owner_id");
ObjectId = ОпросСоответствие.Получить("id");
Если Не ЗначениеЗаполнено(OwnerId) Или Не ЗначениеЗаполнено(ObjectId) Тогда
Возврат Опрос;
КонецЕсли;
ОпросID = "poll"
+ OPI_Инструменты.ЧислоВСтроку(OwnerId)
+ "_"
+ OPI_Инструменты.ЧислоВСтроку(ObjectId);
Параметры_.Вставить("attachments", ОпросID);
Ответ = OPI_Инструменты.Get("api.vk.com/method/wall.post", Параметры_);
Возврат Ответ;
КонецФункции
// Создать альбом
// Создает альбом для хранения картинок
//
// Параметры:
// Наименование - Строка - Наименование альбома - title
// Описание - Строка - Описание альбома - description
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция СоздатьАльбом(Знач Наименование, Знач Описание = "", Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Описание);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Параметры_.Вставить("title" , Наименование);
Параметры_.Вставить("description" , Описание);
Параметры_.Вставить("upload_by_admins_only", 1);
Ответ = OPI_Инструменты.Get("api.vk.com/method/photos.createAlbum", Параметры_);
Возврат Ответ;
КонецФункции
// Удалить альбом
// Удаляет ранее созданный альбом
//
// Параметры:
// IDАльбома - Строка,Число - ID альбома - album
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция УдалитьАльбом(Знач IDАльбома, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDАльбома);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Параметры_.Вставить("album_id", OPI_Инструменты.ЧислоВСтроку(IDАльбома));
Ответ = OPI_Инструменты.Get("api.vk.com/method/photos.deleteAlbum", Параметры_);
Возврат Ответ;
КонецФункции
// Создать историю
// Создает историю из картинки
//
// Параметры:
// Картинка - Строка,ДвоичныеДанные - Фон истории - picture
// URL - Строка - URL для кнопки под историей - url
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция СоздатьИсторию(Знач Картинка, Знач URL = "", Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(URL);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Параметры_.Вставить("link_text" , "more");
Параметры_.Вставить("link_url" , URL);
Параметры_.Вставить("add_to_news", "1");
Ответ = ЗагрузитьФотоНаСервер(Картинка, Параметры_, "История");
Возврат Ответ;
КонецФункции
// Сохранить картинку в альбом
// Сохраняет картинку в альбом сообщества
//
// Параметры:
// IDАльбома - Строка,Число - ID альбома - album
// Картинка - ДвоичныеДанные,Строка - Файл картинки - picture
// Описание - Строка - Описание картинки - description
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция СохранитьКартинкуВАльбом(Знач IDАльбома, Знач Картинка, Знач Описание = "", Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDАльбома);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Описание);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Параметры_.Вставить("album_id", IDАльбома);
Параметры_.Вставить("caption" , Описание);
Возврат ЗагрузитьФотоНаСервер(Картинка, Параметры_, "Альбом");
КонецФункции
// Удалить картинку
// Удалить картинку из альбома
//
// Параметры:
// IDКартинки - Строка,Число - ID картинки - pictureid
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция УдалитьКартинку(Знач IDКартинки, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDКартинки);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Параметры_.Вставить("photo_id", IDКартинки);
Ответ = OPI_Инструменты.Get("api.vk.com/method/photos.delete", Параметры_);
Возврат Ответ;
КонецФункции
// Загрузить видео на сервер
// Загружает видео в группу с возможностью его дальнейшего использования
//
// Параметры:
// Видео - Строка, ДвоичныеДанные - Файл видео - file
// Наименование - Строка - Наименование видео - title
// Описание - Строка - Описание видео - description
// Альбом - Строка - ID альбома, если необходимо - album
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция ЗагрузитьВидеоНаСервер(Знач Видео
, Знач Наименование
, Знач Описание = ""
, Знач Альбом = ""
, Знач Параметры = "") Экспорт
Строка_ = "Строка";
Параметры = ПолучитьСтандартныеПараметры(Параметры);
OPI_Инструменты.ДобавитьПоле("name" , Наименование, Строка_, Параметры);
OPI_Инструменты.ДобавитьПоле("description", Описание , Строка_, Параметры);
OPI_Инструменты.ДобавитьПоле("album_id" , Альбом , Строка_, Параметры);
Ответ = OPI_Инструменты.Get("api.vk.com/method/video.save", Параметры);
Результат = Ответ["response"];
Если Не ЗначениеЗаполнено(Результат) Тогда
Возврат Ответ;
КонецЕсли;
URL = Результат["upload_url"];
Если Не ЗначениеЗаполнено(URL) Тогда
Возврат Ответ;
КонецЕсли;
СоответствиеФайлов = Новый Соответствие;
OPI_Инструменты.ДобавитьПоле("video_file.mp4", Видео, "ДвоичныеДанные", СоответствиеФайлов);
РазмерДанных = СоответствиеФайлов["video_file.mp4"].Размер();
РазмерДанных = OPI_Инструменты.ЧислоВСтроку(РазмерДанных);
Ответ = OPI_Инструменты.PostMultipart(URL, , СоответствиеФайлов, "video/mp4");
Возврат Ответ;
КонецФункции
// Загрузить фото на сервер
// Загружает фото на сервер для его дальнейшего использования
//
// Параметры:
// Картинка - Строка, ДвоичныеДанные - Файл картинки - file
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
// Вид - Строка - Вид загрузки (Пост, Товар, История, Опрос, Прочее) - type
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция ЗагрузитьФотоНаСервер(Знач Картинка, Знач Параметры = "", Знач Вид = "Пост") Экспорт
Параметры = ПолучитьСтандартныеПараметры(Параметры);
Метод = ОпределитьМетодЗагрузкиИзображений(Вид);
Файлы = Новый Соответствие;
Response = "response";
URL = "api.vk.com/method/";
Загрузка = URL + Метод["Загрузка"];
Сохранение = URL + Метод["Сохранение"];
Если ТипЗнч(Картинка) = Тип("Строка") Тогда
КлючКартинка = СтрЗаменить(Картинка, ".", "___");
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Картинка);
Иначе
КлючКартинка = "image___jpeg";
КонецЕсли;
Файлы.Вставить(КлючКартинка, Картинка);
Для Н = 1 По 5 Цикл
Ответ = OPI_Инструменты.Get(Загрузка, Параметры);
Результат = Ответ[Response];
Если ЗначениеЗаполнено(Результат) Тогда
URL = Результат["upload_url"];
Если Не ЗначениеЗаполнено(URL) Тогда
Возврат Ответ;
КонецЕсли;
Иначе
Возврат Ответ;
КонецЕсли;
Параметры.Вставить("upload_url", URL);
Ответ = OPI_Инструменты.PostMultipart(URL, Параметры, Файлы);
Если ТипЗнч(Ответ) = Тип("Соответствие") Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если ТипЗнч(Ответ) <> Тип("Соответствие") Тогда
Возврат ПолучитьСтрокуИзДвоичныхДанных(Ответ);
КонецЕсли;
ЗаполнитьПараметрыЗагрузкиФото(Метод, Ответ, Параметры);
Ответ = OPI_Инструменты.Get(Сохранение, Параметры);
Возврат Ответ;
КонецФункции
#КонецОбласти
#Область РаботаСОбсуждениями
// Создать обсуждение
// Создает новое обсуждение
//
// Параметры:
// Наименование - Строка - Наименование обсуждения - title
// ТекстПервогоСообщения - Строка - Текст первого сообщения - text
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция СоздатьОбсуждение(Знач Наименование, Знач ТекстПервогоСообщения, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ТекстПервогоСообщения);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Параметры_.Вставить("title", Наименование);
Параметры_.Вставить("text" , ТекстПервогоСообщения);
Ответ = OPI_Инструменты.Get("api.vk.com/method/board.addTopic", Параметры_);
Возврат Ответ;
КонецФункции
// Закрыть обсуждение
// Закрывает или удаляет обсуждение
//
// Параметры:
// IDОбсуждения - Строка,Число - ID обсуждения - topic
// УдалитьПолностью - Булево - Удалить полностью (Истина) или закрыть - remove
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция ЗакрытьОбсуждение(Знач IDОбсуждения, Знач УдалитьПолностью = Ложь, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDОбсуждения);
OPI_ПреобразованиеТипов.ПолучитьБулево(УдалитьПолностью);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Параметры_.Вставить("topic_id", IDОбсуждения);
Метод = ?(УдалитьПолностью, "deleteTopic", "closeTopic");
Ответ = OPI_Инструменты.Get("api.vk.com/method/board." + Метод, Параметры_);
Возврат Ответ;
КонецФункции
// Открыть обсуждение
// Открывает ранее закрытое обсуждение
//
// Параметры:
// IDОбсуждения - Строка,Число - ID обсуждения - topic
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция ОткрытьОбсуждение(Знач IDОбсуждения, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDОбсуждения);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Параметры_.Вставить("topic_id", IDОбсуждения);
Ответ = OPI_Инструменты.Get("api.vk.com/method/board.openTopic", Параметры_);
Возврат Ответ;
КонецФункции
// Написать в обсуждение
// Добавляет сообщение в обсуждение от имени группы
//
// Параметры:
// IDОбсуждения - Строка,Число - ID обсуждения - topic
// Текст - Строка - Текст сообщения - text
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция НаписатьВОбсуждение(Знач IDОбсуждения, Знач Текст, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDОбсуждения);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Параметры_.Вставить("topic_id", IDОбсуждения);
Параметры_.Вставить("message" , Текст);
Ответ = OPI_Инструменты.Get("api.vk.com/method/board.createComment", Параметры_);
Возврат Ответ;
КонецФункции
#КонецОбласти
#Область ИнтерактивныеДействия
// Поставить лайк
// Ставит лайк на пост
//
// Параметры:
// IDПоста - Строка,Число - ID поста - post
// IDСтены - Строка,Число - ID стены расположения поста - wall
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция ПоставитьЛайк(Знач IDПоста, Знач IDСтены = "", Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDПоста);
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDСтены);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
IDСтены = ?(ЗначениеЗаполнено(IDСтены), IDСтены, Параметры_["owner_id"]);
ОбъектВК = "wall" + IDСтены + "_" + OPI_Инструменты.ЧислоВСтроку(IDПоста);
Параметры_.Вставить("type" , "post");
Параметры_.Вставить("object" , ОбъектВК);
Параметры_.Вставить("item_id" , OPI_Инструменты.ЧислоВСтроку(IDПоста));
Параметры_.Вставить("owner_id" , OPI_Инструменты.ЧислоВСтроку(IDСтены));
Параметры_.Вставить("from_group" , 0);
Ответ = OPI_Инструменты.Get("api.vk.com/method/likes.add", Параметры_);
Возврат Ответ;
КонецФункции
// Сделать репост
// Делает репост записи
//
// Параметры:
// IDПоста - Строка,Число - ID поста - post
// IDСтены - Строка,Число - ID стены расположения поста - from
// ЦелеваяСтена - Строка,Число - ID целевой стены или группы - to
// Рекламный - Булево - Признак рекламного поста - ad
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция СделатьРепост(Знач IDПоста
, Знач IDСтены = ""
, Знач ЦелеваяСтена = ""
, Знач Рекламный = Ложь
, Знач Параметры = "") Экспорт
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
GroupId = Параметры_["group_id"];
OPI_ПреобразованиеТипов.ПолучитьСтроку(GroupId);
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDПоста);
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDСтены);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ЦелеваяСтена);
OPI_ПреобразованиеТипов.ПолучитьБулево(Рекламный);
Источник = ?(ЗначениеЗаполнено(IDСтены), IDСтены, GroupId);
Приемник = ?(ЗначениеЗаполнено(ЦелеваяСтена), ЦелеваяСтена, GroupId);
Параметры_.Вставить("object" , "wall" + Источник + "_" + OPI_Инструменты.ЧислоВСтроку(IDПоста));
Параметры_.Вставить("group_id" , СтрЗаменить(Приемник, "-", ""));
Параметры_.Вставить("mark_as_ads" , ?(Рекламный, 1, 0));
Ответ = OPI_Инструменты.Get("api.vk.com/method/wall.repost", Параметры_);
Возврат Ответ;
КонецФункции
// Написать сообщение
// Написать сообщение пользователю в диалоге сообщества
//
// Параметры:
// Текст - Строка - Текст сообщения - text
// IDПользователя - Строка - ID пользователя адресата - user
// Communitytoken - Строка - Токен бота чата сообщества, котрый можно получить в настройках - ct
// Клавиатура - Строка - JSON клавиатуры. См.СформироватьКлавиатуру - keyboard
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция НаписатьСообщение(Знач Текст
, Знач IDПользователя
, Знач Communitytoken
, Знач Клавиатура = ""
, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст);
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDПользователя);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Communitytoken);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Клавиатура);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Параметры_.Вставить("access_token", Communitytoken);
Параметры_.Вставить("user_id" , IDПользователя);
Параметры_.Вставить("peer_id" , IDПользователя);
Параметры_.Вставить("parse_mode" , "Markdown");
Параметры_.Вставить("random_id" , 0);
Параметры_.Вставить("message" , Текст);
Если ЗначениеЗаполнено(Клавиатура) Тогда
Параметры_.Вставить("keyboard", Клавиатура);
КонецЕсли;
Ответ = OPI_Инструменты.Get("api.vk.com/method/messages.send", Параметры_);
Возврат Ответ;
КонецФункции
// Написать комментарий
// Создает комментарий под выбранной записью
//
// Параметры:
// IDПоста - Строка,Число - ID целевого поста - post
// IDСтены - Строка,Число - ID стены расположения поста - wall
// Текст - Строка - Текст комментария - text
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция НаписатьКомментарий(Знач IDПоста, Знач IDСтены, Знач Текст, Знач Параметры = "") Экспорт
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
GroupId = Параметры_["group_id"];
OPI_ПреобразованиеТипов.ПолучитьСтроку(GroupId);
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDПоста);
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDСтены);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст);
Параметры_.Вставить("owner_id" , IDСтены);
Параметры_.Вставить("from_group" , GroupId);
Параметры_.Вставить("post_id" , IDПоста);
Параметры_.Вставить("message" , Текст);
Параметры_.Удалить("group_id");
Ответ = OPI_Инструменты.Get("api.vk.com/method/wall.createComment", Параметры_);
Возврат Ответ;
КонецФункции
// Сократить ссылку
// Создает сокращенный URL из обычного
//
// Параметры:
// URL - Строка - URL для сокращения - url
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Строка - Сокращенный URL
Функция СократитьСсылку(Знач URL, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(URL);
Response = "response";
Параметры_ = Новый Структура;
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Параметры_.Вставить("url", URL);
Ответ = OPI_Инструменты.Get("https://api.vk.com/method/utils.getShortLink", Параметры_);
Результат = Ответ[Response];
Если ЗначениеЗаполнено(Результат) Тогда
URL = Результат["short_url"];
Если ЗначениеЗаполнено(URL) Тогда
Возврат URL;
Иначе
Возврат Ответ;
КонецЕсли;
Иначе
Возврат Ответ;
КонецЕсли;
КонецФункции
#КонецОбласти
#Область Статистика
// Получить статистику
// Получает общую статистику сообщества за период
//
// Параметры:
// ДатаНачала - Дата - Дата начала периода - datefrom
// ДатаОкончания - Дата - Дата окончания периода - dateto
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция ПолучитьСтатистику(Знач ДатаНачала, Знач ДатаОкончания, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьДату(ДатаНачала);
OPI_ПреобразованиеТипов.ПолучитьДату(ДатаОкончания);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
ДатаНачала = OPI_Инструменты.UNIXTime(ДатаНачала);
ДатаОкончания = OPI_Инструменты.UNIXTime(ДатаОкончания);
Параметры_.Вставить("timestamp_from", ДатаНачала);
Параметры_.Вставить("timestamp_to" , ДатаОкончания);
Параметры_.Вставить("stats_groups" , "visitors, reach, activity");
Ответ = OPI_Инструменты.Get("api.vk.com/method/stats.get", Параметры_);
Возврат Ответ;
КонецФункции
// Получить статистику по постам
// Получает статистику в разрезе постов
//
// Параметры:
// МассивИДПостов - Массив из Строка,Число - Массив ID постов - posts
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Массив из Произвольный - Массив данных статистики по постам
Функция ПолучитьСтатистикуПостов(Знач МассивИДПостов, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивИДПостов);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
МассивОтветов = Новый Массив;
МассивНабора = Новый Массив;
МаксимумПостов = 30;
Response = "response";
Для Каждого Пост Из МассивИДПостов Цикл
МассивНабора.Добавить(OPI_Инструменты.ЧислоВСтроку(Пост));
Если МассивНабора.Количество() = МаксимумПостов Тогда
СтрокаНомеров = СтрСоединить(МассивНабора, ",");
Параметры_.Вставить("post_ids", СтрокаНомеров);
Статистика = OPI_Инструменты.Get("api.vk.com/method/stats.getPostReach", Параметры_);
МассивСтатистики = Статистика[Response];
Для Каждого ЭлементСтатистики Из МассивСтатистики Цикл
МассивОтветов.Добавить(ЭлементСтатистики);
КонецЦикла;
МассивНабора = Новый Массив;
КонецЕсли;
КонецЦикла;
СтрокаНомеров = СтрСоединить(МассивНабора, ",");
Параметры_.Вставить("post_ids", СтрокаНомеров);
Статистика = OPI_Инструменты.Get("api.vk.com/method/stats.getPostReach", Параметры_);
МассивСтатистики = Статистика[Response];
Если ТипЗнч(МассивСтатистики) = Тип("Массив") Тогда
Для Каждого ЭлементСтатистики Из МассивСтатистики Цикл
МассивОтветов.Добавить(ЭлементСтатистики);
КонецЦикла;
КонецЕсли;
Возврат МассивОтветов;
КонецФункции
#КонецОбласти
#Область РаботаСРекламнымКабинетом
// Создать рекламную кампанию
// Создает кампанию в выбранном рекламном кабинете
//
// Параметры:
// IDКабинета - Строка,Число - ID рекламного кабинета - cabinet
// Наименование - Строка - Наименование кампании - title
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция СоздатьРекламнуюКампанию(Знач IDКабинета, Знач Наименование, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDКабинета);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
ТекущаяДата = OPI_Инструменты.ПолучитьТекущуюДату();
КонечнаяДата = ДобавитьМесяц(ТекущаяДата, 24);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Параметры_.Вставить("account_id", IDКабинета);
МассивСтруктур = Новый Массив;
ДатаСтарт = OPI_Инструменты.UNIXTime(ТекущаяДата);
ДатаСтоп = OPI_Инструменты.UNIXTime(КонечнаяДата);
СтруктураКампании = Новый Структура;
СтруктураКампании.Вставить("type" , "promoted_posts");
СтруктураКампании.Вставить("name" , Наименование);
СтруктураКампании.Вставить("day_limit" , 0);
СтруктураКампании.Вставить("all_limit" , 0);
СтруктураКампании.Вставить("start_time" , ДатаСтарт);
СтруктураКампании.Вставить("stop_time" , ДатаСтоп);
СтруктураКампании.Вставить("status" , 1);
МассивСтруктур.Добавить(СтруктураКампании);
JSONДата = OPI_Инструменты.JSONСтрокой(МассивСтруктур);
Параметры_.Вставить("data", JSONДата);
Ответ = OPI_Инструменты.Get("api.vk.com/method/ads.createCampaigns", Параметры_);
Возврат Ответ;
КонецФункции
// Создать рекламное объявление
// Создает рекламное объявление на основе поста
//
// Параметры:
// НомерКампании - Строка,Число - ID рекламной кампании - campaign
// ДневнойЛимит - Строка,Число - Дневной лимит в рублях - limit
// НомерКатегории - Строка,Число - Номер рекламной категории - category
// IDПоста - Строка,Число - ID поста, используемого в качетсве рекламы - post
// IDКабинета - Строка,Число - ID рекламного кабинета - cabinet
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция СоздатьРекламноеОбъявление(Знач НомерКампании
, Знач ДневнойЛимит
, Знач НомерКатегории
, Знач IDПоста
, Знач IDКабинета
, Знач Параметры = "") Экспорт
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
GroupId = Параметры_["group_id"];
OPI_ПреобразованиеТипов.ПолучитьСтроку(GroupId);
OPI_ПреобразованиеТипов.ПолучитьСтроку(НомерКампании);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ДневнойЛимит);
OPI_ПреобразованиеТипов.ПолучитьСтроку(НомерКатегории);
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDПоста);
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDКабинета);
Линк = "https://vk.com/wall-" + GroupId + "_" + IDПоста;
МассивСтруктур = Новый Массив;
СтруктураКампании = Новый Структура;
СтруктураКампании.Вставить("campaign_id" , НомерКампании);
СтруктураКампании.Вставить("ad_format" , 9);
СтруктураКампании.Вставить("conversion_event_id" , 1);
СтруктураКампании.Вставить("autobidding" , 1);
СтруктураКампании.Вставить("cost_type" , 3);
СтруктураКампании.Вставить("goal_type" , 2);
СтруктураКампании.Вставить("ad_platform" , "all");
СтруктураКампании.Вставить("publisher_platforms" , "vk");
СтруктураКампании.Вставить("publisher_platforms_auto" , "1");
СтруктураКампании.Вставить("day_limit" , ДневнойЛимит);
СтруктураКампании.Вставить("all_limit" , "0");
СтруктураКампании.Вставить("category1_id" , НомерКатегории);
СтруктураКампании.Вставить("age_restriction" , 0);
СтруктураКампании.Вставить("status" , 1);
СтруктураКампании.Вставить("name" , "Объявление");
СтруктураКампании.Вставить("link_url" , Линк);
МассивСтруктур.Добавить(СтруктураКампании);
OPI_ПреобразованиеТипов.ПолучитьСтроку(МассивСтруктур, Истина);
Параметры_.Вставить("data" , МассивСтруктур);
Параметры_.Вставить("account_id" , IDКабинета);
Ответ = OPI_Инструменты.Get("api.vk.com/method/ads.createAds", Параметры_);
Возврат Ответ;
КонецФункции
// Приостановить рекламное объявление
// Приостанавливает показ рекламного объявления
//
// Параметры:
// IDКабинета - Строка,Число - ID рекламного кабинета - cabinet
// IDОбъявления - Строка,Число - ID объявления - adv
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция ПриостановитьРекламноеОбъявление(Знач IDКабинета, Знач IDОбъявления, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDКабинета);
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDОбъявления);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Параметры_.Вставить("account_id", IDКабинета);
МассивСтруктур = Новый Массив;
СтруктураКампании = Новый Структура;
СтруктураКампании.Вставить("ad_id" , IDОбъявления);
СтруктураКампании.Вставить("status" , 0);
МассивСтруктур.Добавить(СтруктураКампании);
OPI_ПреобразованиеТипов.ПолучитьСтроку(МассивСтруктур, Истина);
Параметры_.Вставить("data", МассивСтруктур);
Ответ = OPI_Инструменты.Get("api.vk.com/method/ads.updateAds", Параметры_);
Возврат Ответ;
КонецФункции
// Получить список рекламных категорий
// Получает список id рекламных категорий для создания рекламного объявления
//
// Параметры:
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция ПолучитьСписокРекламныхКатегорий(Знач Параметры = "") Экспорт
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Ответ = OPI_Инструменты.Get("api.vk.com/method/ads.getCategories", Параметры_);
Возврат Ответ;
КонецФункции
#КонецОбласти
#Область РаботаСТоварами
// Получить список категорий товаров
// Получает список ID товарных категорий для указания при создании товара
//
// Параметры:
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из Строка - Ключ - ID, Значение - Имя
Функция ПолучитьСписокКатегорийТоваров(Знач Параметры = "") Экспорт
Response = "response";
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Ответ = OPI_Инструменты.Get("api.vk.com/method/market.getCategories", Параметры_);
Результат = Ответ[Response];
Если ЗначениеЗаполнено(Результат) Тогда
Количество = Результат["count"];
Если Не ЗначениеЗаполнено(Количество) Тогда
Возврат Ответ;
КонецЕсли;
Иначе
Возврат Ответ;
КонецЕсли;
Параметры_.Вставить("count", Количество);
Ответ = OPI_Инструменты.Get("api.vk.com/method/market.getCategories", Параметры_);
Результат = Ответ[Response];
Если ЗначениеЗаполнено(Результат) Тогда
Категории = Результат["items"];
Если Не ЗначениеЗаполнено(Категории) Тогда
Возврат Ответ;
КонецЕсли;
Иначе
Возврат Ответ;
КонецЕсли;
СоответствиеКатегорий = Новый Соответствие;
Для Каждого Категория Из Категории Цикл
СоответствиеКатегорий.Вставить(Категория["id"], Категория["name"]);
КонецЦикла;
Возврат СоответствиеКатегорий;
КонецФункции
// Получить список товаров
// Получает список товаров сообщества
//
// Параметры:
// Подборка - Строка,Число - ID подборки, если нужен отбор - sel
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - Массив соответствий товаров
Функция ПолучитьСписокТоваров(Знач Подборка = "", Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Подборка);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Параметры_.Вставить("count" , 200);
Параметры_.Вставить("extended" , 1);
Параметры_.Вставить("with_disabled", 1);
Если ЗначениеЗаполнено(Подборка) Тогда
Параметры_.Вставить("album_id", Подборка);
КонецЕсли;
МассивТоваров = Новый Массив;
ПолучитьСписокТоваровРекурсивно(МассивТоваров, Параметры_);
Возврат МассивТоваров;
КонецФункции
// Получить товары по ID
// Получает информацию о товарах по массиву ID
//
// Параметры:
// Товары - Строка, Массив Из Строка - Массив ID товаров - items
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция ПолучитьТоварыПоИД(Знач Товары, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Товары);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
СтрокаТоваров = "";
Owner = "owner_id";
Для Каждого Товар Из Товары Цикл
ТекущийТовар = Параметры_[Owner] + "_" + Товар;
ТекущийТовар = OPI_Инструменты.ЧислоВСтроку(ТекущийТовар);
СтрокаТоваров = СтрокаТоваров + ТекущийТовар + ",";
КонецЦикла;
СтрокаТоваров = Лев(СтрокаТоваров, СтрДлина(СтрокаТоваров) - 1);
Параметры_.Вставить("item_ids", СтрокаТоваров);
Параметры_.Вставить("extended", 1);
Ответ = OPI_Инструменты.Get("api.vk.com/method/market.getById", Параметры_);
Возврат Ответ;
КонецФункции
// Добавить товар
// Добавляет новый товар в каталог сообщества
//
// Параметры:
// ОписаниеТовара - Соответствие Из КлючИЗначение - См.ПолучитьОписаниеТовара - product - JSON описание товара или путь
// Подборка - Строка - ID подборка для помещения товара, если необходимо - sel
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция ДобавитьТовар(Знач ОписаниеТовара, Знач Подборка = "", Знач Параметры = "") Экспорт
Возврат УправлениеТоваром(ОписаниеТовара, , Подборка, Параметры);
КонецФункции
// Изменить товар
// Изменяет ранее созданный товар
//
// Параметры:
// Товар - Число,Строка - Идентификатор изменяемого товара - item
// ОписаниеТовара - Соответствие Из КлючИЗначение - См.ПолучитьОписаниеТовара - product - JSON описание товара или путь
// Подборка - Строка - Идентификатор новой подборки, если необходимо - sel
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция ИзменитьТовар(Знач Товар, Знач ОписаниеТовара, Знач Подборка = "", Знач Параметры = "") Экспорт
Возврат УправлениеТоваром(ОписаниеТовара, Товар, Подборка, Параметры);
КонецФункции
// Удалить товар
// Удаляет ранее созданный товар
//
// Параметры:
// Товар - Строка,Число - ID товара - item
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция УдалитьТовар(Знач Товар, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Товар);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Параметры_.Вставить("item_id", Товар);
Ответ = OPI_Инструменты.Get("api.vk.com/method/market.delete", Параметры_);
Возврат Ответ;
КонецФункции
// Сгруппировать товары
// Группирует товары на основе одинаковых наборов свойств
//
// Параметры:
// МассивТоваров - Массив Из Строка - Массив ID товаров - items
// СуществующаяГруппа - Строка - ID существующей группы, если необходимо - sellgroup
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция СгруппироватьТовары(Знач МассивТоваров, Знач СуществующаяГруппа = "", Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(СуществующаяГруппа);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивТоваров);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
МассивТоваров_ = Новый Массив;
Для Каждого Товар Из МассивТоваров Цикл
МассивТоваров_.Добавить(OPI_Инструменты.ЧислоВСтроку(Товар));
КонецЦикла;
Товары = СтрСоединить(МассивТоваров_, ",");
Параметры_.Вставить("item_ids", Товары);
Если ЗначениеЗаполнено(СуществующаяГруппа) Тогда
Параметры_.Вставить("item_group_id", СуществующаяГруппа);
КонецЕсли;
Ответ = OPI_Инструменты.Get("api.vk.com/method/market.groupItems", Параметры_);
Возврат Ответ;
КонецФункции
// Получить описание товара. !NOCLI
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - Пустое описание товара:
// *Имя - Строка - Имя товара
// *Описание - Строка - Описание товара
// *Категория - Строка - См. ПолучитьСписокКатегорийТоваров
// *Цена - Число - Цена товара
// *СтараяЦена - Число - Для отображения скидки/изменения цены
// *ОсновноеФото - Строка,ДвоичныеДанные - Двоичные данные или путь к фото
// *URL - Строка - Ссылка на страницу сайта магазина
// *ДополнительныеФото - Массив Из Строка - Двоичные данные или пути к фото
// *ЗначенияСвойств - Массив Из Строка - См.ДобавитьВариантСвойстваТовара
// *ГлавныйВГруппе - Булево - Главный в группе, если есть в группе
// *Ширина - Число - Ширина товара в мм.
// *Высота - Число - Высота товара в мм.
// *Глубина - Число - Глубина товара в мм.
// *Вес - Число - Вес в гр.
// *SKU - Строка - SKU
// *ДоступныйОстаток - Число - Остаток. -1 - не ограничено
Функция ПолучитьОписаниеТовара() Экспорт
Товар = Новый Соответствие();
Товар.Вставить("Имя" , "Новый товар"); // Имя товара
Товар.Вставить("Описание" , "Описание товара"); // Описание товара
Товар.Вставить("Категория" , "20173"); // См ПолучитьСписокКатегорийТоваров()
Товар.Вставить("Цена" , 1); // Цена.
Товар.Вставить("СтараяЦена" , Неопределено); // Для отражения изменения цены
Товар.Вставить("ОсновноеФото" , Неопределено); // ДД или путь к осн. фото
Товар.Вставить("URL" , Неопределено); // Ссылка на страницу магазина
Товар.Вставить("ДополнительныеФото" , Новый Массив); // Массив путей или ДД для доп. фото
Товар.Вставить("ЗначенияСвойств" , Новый Массив); // Значения свойств (варианты). Максимум 2
Товар.Вставить("ГлавныйВГруппе" , Ложь); // Сделать главным в своей группе
Товар.Вставить("Ширина" , Неопределено); // В миллиметрах
Товар.Вставить("Высота" , Неопределено); // В миллиметрах
Товар.Вставить("Глубина" , Неопределено); // В миллиметрах
Товар.Вставить("Вес" , Неопределено); // В граммах
Товар.Вставить("SKU" , Неопределено); // Артикул
Товар.Вставить("ДоступныйОстаток" , 1);
Возврат Товар;
КонецФункции
#КонецОбласти
#Область РаботаСПодборкамиТоваров
// Получить список подборок
// Получает список подборок товаров
//
// Параметры:
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - Массив соответствий подборок
Функция ПолучитьСписокПодборок(Знач Параметры = "") Экспорт
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Параметры_.Вставить("count", 100);
МассивАльбомов = Новый Массив;
ПолучитьСписокАльбомовРекурсивно(МассивАльбомов, Параметры_);
Возврат МассивАльбомов;
КонецФункции
// Получить подборки по ID
// Получить список подборок по массиву ID
//
// Параметры:
// Подборки - Строка, Массив Из Строка - ID подборок - sels
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция ПолучитьПодборкиПоИД(Знач Подборки, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Подборки);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Подборки_ = Новый Массив;
СтрокаПодборок = "";
Для Каждого Подборка Из Подборки Цикл
Подборки_.Добавить(OPI_Инструменты.ЧислоВСтроку(Подборка));
КонецЦикла;
СтрокаПодборок = СтрСоединить(Подборки_, ",");
Параметры_.Вставить("album_ids", СтрокаПодборок);
Ответ = OPI_Инструменты.Get("api.vk.com/method/market.getAlbumById", Параметры_);
Возврат Ответ;
КонецФункции
// Создать подборку товаров
// Создает пустую подборку товаров
//
// Параметры:
// Название - Строка - Название подборки - title
// Картинка - Строка,ДвоичныеДанные - Файл картинки - picture
// Основная - Булево - Основная - main
// Скрытая - Булево - Скрытая - hidden
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция СоздатьПодборкуТоваров(Знач Название
, Знач Картинка
, Знач Основная = Ложь
, Знач Скрытая = Ложь
, Знач Параметры = "") Экспорт
Возврат УправлениеПодборкой(Название, Картинка, , Основная, Скрытая, Параметры);
КонецФункции
// Изменить подборку товаров
// Изменяет свойства подборки товаров
//
// Параметры:
// Название - Строка - Новое название подборки - title
// Подборка - Строка - ID подборки - sel
// Картинка - Строка,ДвоичныеДанные - Новая картинка подборки - picture
// Основная - Булево - Основная - main
// Скрытая - Булево - Скрытая - hidden
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция ИзменитьПодборкуТоваров(Знач Название
, Знач Подборка
, Знач Картинка = ""
, Знач Основная = Ложь
, Знач Скрытая = Ложь
, Знач Параметры = "") Экспорт
Возврат УправлениеПодборкой(Название, Картинка, Подборка, Основная, Скрытая, Параметры);
КонецФункции
// Добавить товар в подборку
// Добавляет товар в подборку
//
// Параметры:
// МассивТоваров - Массив из Строка, Число - Массив товаров или товар - items
// Подборка - Строка - ID подборки - sel
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция ДобавитьТоварВПодборку(Знач МассивТоваров, Знач Подборка, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивТоваров);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Подборка);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
МассивТоваров_ = Новый Массив;
Для Каждого Товар Из МассивТоваров Цикл
МассивТоваров_.Добавить(OPI_Инструменты.ЧислоВСтроку(Товар));
КонецЦикла;
СписокТоваров = СтрСоединить(МассивТоваров_, ",");
Параметры_.Вставить("item_ids" , СписокТоваров);
Параметры_.Вставить("album_ids", Подборка);
Ответ = OPI_Инструменты.Get("api.vk.com/method/market.addToAlbum", Параметры_);
Возврат Ответ;
КонецФункции
// Удалить товар из подборки
// Удаляет ранее добавленный товар из подборки
//
// Параметры:
// Товар - Строка - ID товара - item
// Подборка - Строка - ID подборки - sel
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция УдалитьТоварИзПодборки(Знач Товар, Знач Подборка, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Товар);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Подборка);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Параметры_.Вставить("item_id" , Товар);
Параметры_.Вставить("album_ids", Подборка);
Ответ = OPI_Инструменты.Get("api.vk.com/method/market.removeFromAlbum", Параметры_);
Возврат Ответ;
КонецФункции
// Удалить подборку
// Удаляет подборку по ID
//
// Параметры:
// Подборка - Строка - ID подборки - sel
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция УдалитьПодборку(Знач Подборка, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Подборка);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Параметры_.Вставить("album_id", Подборка);
Ответ = OPI_Инструменты.Get("api.vk.com/method/market.deleteAlbum", Параметры_);
Возврат Ответ;
КонецФункции
#КонецОбласти
#Область РаботаСоСвойствамиТоваров
// Получить список свойств
// Получает список свойств товаров группы
//
// Параметры:
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция ПолучитьСписокСвойств(Знач Параметры = "") Экспорт
Response = "response";
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Ответ = OPI_Инструменты.Get("api.vk.com/method/market.getProperties", Параметры_);
Свойства = Ответ[Response]["items"];
Возврат Свойства;
КонецФункции
// Создать свойство товара
// Создает новое свойство для использования в товарах
//
// Параметры:
// Название - Строка - Название свойства - title
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция СоздатьСвойствоТовара(Знач Название, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Название);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Параметры_.Вставить("title", Название);
Ответ = OPI_Инструменты.Get("api.vk.com/method/market.addProperty", Параметры_);
Возврат Ответ;
КонецФункции
// Изменить свойство товара
// Изменяет существующее свойство товара
//
// Параметры:
// Название - Строка - Новое название - title
// Свойство - Строка,Число - ID свойства - prop
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция ИзменитьСвойствоТовара(Знач Название, Знач Свойство, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Название);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Свойство);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Параметры_.Вставить("title" , Название);
Параметры_.Вставить("property_id", Свойство);
Параметры_.Вставить("type" , "text");
Ответ = OPI_Инструменты.Get("api.vk.com/method/market.editProperty", Параметры_);
Возврат Ответ;
КонецФункции
// Удалить свойство товара
// Удаляет существующее свойство товара
//
// Параметры:
// Свойство - Строка,Число - ID свойства - prop
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция УдалитьСвойствоТовара(Знач Свойство, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Свойство);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Параметры_.Вставить("property_id", Свойство);
Ответ = OPI_Инструменты.Get("api.vk.com/method/market.deleteProperty", Параметры_);
Возврат Ответ;
КонецФункции
// Добавить вариант свойства товара
// Добавляет вариант для существующего свойства
//
// Параметры:
// Значение - Строка - Значение свойства - value
// Свойство - Строка,Число - ID свойства, куда добавляется вариант - prop
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция ДобавитьВариантСвойстваТовара(Знач Значение, Знач Свойство, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Свойство);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Значение);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Параметры_.Вставить("property_id", Свойство);
Параметры_.Вставить("title" , Значение);
Ответ = OPI_Инструменты.Get("api.vk.com/method/market.addPropertyVariant", Параметры_);
Возврат Ответ;
КонецФункции
// Изменить вариант свойства товара
// Изменяет значение варианта существующего свойства товара
//
// Параметры:
// Значение - Строка - Новое значение свойства - value
// Свойство - Строка,Число - ID свойства - prop
// Вариант - Строка,Число - ID варианта - option
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция ИзменитьВариантСвойстваТовара(Знач Значение, Знач Свойство, Знач Вариант, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Значение);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Свойство);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Вариант);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Параметры_.Вставить("property_id", Свойство);
Параметры_.Вставить("variant_id" , Вариант);
Параметры_.Вставить("title" , Значение);
Ответ = OPI_Инструменты.Get("api.vk.com/method/market.editPropertyVariant", Параметры_);
Возврат Ответ;
КонецФункции
// Удалить вариант свойства товара
// Удаляет ранее созданный вариант свойства
//
// Параметры:
// Вариант - Строка,Число - ID варианта - option
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция УдалитьВариантСвойстваТовара(Знач Вариант, Знач Параметры = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Вариант);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Параметры_.Вставить("variant_id", Вариант);
Ответ = OPI_Инструменты.Get("api.vk.com/method/market.deletePropertyVariant", Параметры_);
Возврат Ответ;
КонецФункции
#КонецОбласти
#Область РаботаСЗаказами
// Получить список заказов
// Возвращает список заказов сообщества
//
// Параметры:
// Параметры - Структура из Строка - См.ПолучитьСтандартныеПараметры - auth - JSON авторизации или путь к .json
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK
Функция ПолучитьСписокЗаказов(Знач Параметры = "") Экспорт
Параметры = ПолучитьСтандартныеПараметры(Параметры);
Параметры.Вставить("count", 50);
МассивЗаказов = Новый Массив;
ПолучитьСписокЗаказовРекурсивно(МассивЗаказов, Параметры);
Возврат МассивЗаказов;
КонецФункции
#КонецОбласти
#Область Прочие
// Сформировать клавиатуру
// Формирует клавиатуру по массиву кнопок
//
// Параметры:
// МассивКнопок - Массив из Строка - Массив заголовков кнопок - buttons
//
// Возвращаемое значение:
// Строка - JSON клавиатуры
Функция СформироватьКлавиатуру(Знач МассивКнопок) Экспорт
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивКнопок);
Клавиатура = Новый Структура;
МассивКлавиатуры = Новый Массив;
МассивБлока = Новый Массив;
Для Каждого Действие Из МассивКнопок Цикл
Кнопка = Новый Структура;
Выражение = Новый Структура;
Выражение.Вставить("type" , "text");
Выражение.Вставить("label", Действие);
Кнопка.Вставить("action", Выражение);
МассивБлока.Добавить(Кнопка);
КонецЦикла;
МассивКлавиатуры.Добавить(МассивБлока);
Клавиатура.Вставить("buttons" , МассивКлавиатуры);
Клавиатура.Вставить("one_time", Ложь);
Возврат OPI_Инструменты.JSONСтрокой(Клавиатура);
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция ПолучитьСтандартныеПараметры(Знач Параметры = "")
// Здесь собрано определение данных для работы с VK API
// Вы можете переопределять их, передавая в качестве параметра
// Совпадающие поля будут перезаписаны с приоритетом параметра функции
Параметры_ = Новый Структура;
// access_token - можно получить в браузере по URL из функции СоздатьСсылкуПолученияТокена()
// from_group - действия будут выполняться от лица группы
// owner_id - id группы с "-" в начале. Можно найти в настройках группы ВК или в ее URL, если не был
// установлен свой
// app_id - id приложения, которое необходимо создать в профиле на странице для разработчиков
// group_id - owner_id, но без "-"
Параметры_.Вставить("access_token" , "");
Параметры_.Вставить("from_group" , "1");
Параметры_.Вставить("owner_id" , "");
Параметры_.Вставить("v" , "5.131");
Параметры_.Вставить("app_id" , "");
Параметры_.Вставить("group_id" , "");
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Параметры);
Если ТипЗнч(Параметры) = Тип("Структура") Или ТипЗнч(Параметры) = Тип("Соответствие") Тогда
Для Каждого ПереданныйПараметр Из Параметры Цикл
Параметры_.Вставить(ПереданныйПараметр.Ключ, OPI_Инструменты.ЧислоВСтроку(ПереданныйПараметр.Значение));
КонецЦикла;
КонецЕсли;
Возврат Параметры_;
КонецФункции
Функция ПолучитьИДКартинки(Знач Картинка, Знач Параметры, Знач Вид)
Response = "response";
Ответ = ЗагрузитьФотоНаСервер(Картинка, Параметры, Вид);
Результат = Ответ[Response];
Если ЗначениеЗаполнено(Результат) Тогда
ИДФото = Результат["photo_id"];
Если Не ЗначениеЗаполнено(ИДФото) Тогда
Возврат Ответ;
КонецЕсли;
Иначе
Возврат Ответ;
КонецЕсли;
ИДФото = OPI_Инструменты.ЧислоВСтроку(ИДФото);
Возврат ИДФото;
КонецФункции
Функция ПолучитьСоответствиеКартинки(Знач Картинка, Знач Параметры, Знач Вид)
Ответ = ЗагрузитьФотоНаСервер(Картинка, Параметры, Вид);
ОтветМассив = Ответ.Получить("response");
Если Не ЗначениеЗаполнено(ОтветМассив) Или Не ТипЗнч(ОтветМассив) = Тип("Массив") Тогда
Возврат Ответ;
Иначе
Если ОтветМассив.Количество() = 0 Тогда
Возврат Ответ;
Иначе
ОтветСоответствие = ОтветМассив[0];
КонецЕсли;
КонецЕсли;
Возврат ОтветСоответствие;
КонецФункции
Функция ПолучитьМассивПодборок(Знач Подборки, Знач Параметры = "")
Response = "response";
Подборки = ПолучитьПодборкиПоИД(Подборки, Параметры);
Результат = Подборки[Response];
Если ЗначениеЗаполнено(Результат) Тогда
МассивПодборок = Результат["items"];
Если Не ЗначениеЗаполнено(МассивПодборок) Тогда
Возврат Подборки;
КонецЕсли;
Иначе
Возврат Подборки;
КонецЕсли;
Возврат МассивПодборок;
КонецФункции
Функция ОпределитьМетодЗагрузкиИзображений(Знач Вид)
СоответствиеМетодов = Новый Соответствие;
Загрузка = "Загрузка";
Сохранение = "Сохранение";
Способ = "Способ";
Фото = "Фото";
Если Вид = "Пост" Тогда
СоответствиеМетодов.Вставить(Загрузка , "photos.getWallUploadServer");
СоответствиеМетодов.Вставить(Сохранение, "photos.saveWallPhoto");
СоответствиеМетодов.Вставить(Фото , "photo");
СоответствиеМетодов.Вставить(Способ , 1);
ИначеЕсли Вид = "Товар" Тогда
СоответствиеМетодов.Вставить(Загрузка , "market.getProductPhotoUploadServer");
СоответствиеМетодов.Вставить(Сохранение, "market.saveProductPhoto");
СоответствиеМетодов.Вставить(Способ , 2);
ИначеЕсли Вид = "История" Тогда
СоответствиеМетодов.Вставить(Загрузка , "stories.getPhotoUploadServer");
СоответствиеМетодов.Вставить(Сохранение, "stories.save");
СоответствиеМетодов.Вставить(Способ , 3);
ИначеЕсли Вид = "Опрос" Тогда
СоответствиеМетодов.Вставить(Загрузка , "polls.getPhotoUploadServer");
СоответствиеМетодов.Вставить(Сохранение, "polls.savePhoto");
СоответствиеМетодов.Вставить(Фото , "photo");
СоответствиеМетодов.Вставить(Способ , 1);
Иначе
СоответствиеМетодов.Вставить(Загрузка , "photos.getUploadServer");
СоответствиеМетодов.Вставить(Сохранение, "photos.save");
СоответствиеМетодов.Вставить(Фото , "photos_list");
СоответствиеМетодов.Вставить(Способ , 1);
КонецЕсли;
Возврат СоответствиеМетодов;
КонецФункции
Функция ПолучитьСоответствиеПараметровТовара()
Поля = Новый Соответствие();
Поля.Вставить("Имя" , "name");
Поля.Вставить("Описание" , "description");
Поля.Вставить("Категория" , "category_id");
Поля.Вставить("Цена" , "price");
Поля.Вставить("СтараяЦена" , "old_price");
Поля.Вставить("URL" , "url");
Поля.Вставить("ГлавныйВГруппе" , "is_main_variant");
Поля.Вставить("Ширина" , "dimension_width");
Поля.Вставить("Высота" , "dimension_height");
Поля.Вставить("Глубина" , "dimension_length");
Поля.Вставить("Вес" , "weight");
Поля.Вставить("SKU" , "sku");
Поля.Вставить("ДоступныйОстаток" , "stock_amount");
Возврат Поля;
КонецФункции
Функция УправлениеТоваром(Знач ОписаниеТовара, Знач ИДТовара = "", Знач Подборка = "", Знач Параметры = "")
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДТовара);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Подборка);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(ОписаниеТовара);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Параметры_.Вставить("v", "5.199");
Response = "response";
ЗаполнитьПоляЗапросаТовара(ОписаниеТовара, Параметры_);
Если ЗначениеЗаполнено(ИДТовара) Тогда
Параметры_.Вставить("item_id", ИДТовара);
Метод = "edit";
Иначе
Метод = "add";
КонецЕсли;
Ответ = OPI_Инструменты.Get("api.vk.com/method/market." + Метод, Параметры_);
Результат = Ответ[Response];
Если Не ЗначениеЗаполнено(ИДТовара) И ЗначениеЗаполнено(Результат) Тогда
ИДТовара = Результат["market_item_id"];
Если Не ЗначениеЗаполнено(ИДТовара) Тогда
Возврат Ответ;
КонецЕсли;
Иначе
Возврат Ответ;
КонецЕсли;
Если ЗначениеЗаполнено(Подборка) И ЗначениеЗаполнено(ИДТовара) Тогда
ДобавитьТоварВПодборку(ИДТовара, Подборка, Параметры_);
КонецЕсли;
Возврат Ответ;
КонецФункции
Функция УправлениеПодборкой(Знач Название
, Знач Картинка = ""
, Знач ИДПодборки = ""
, Знач Основная = Ложь
, Знач Скрытая = Ложь
, Знач Параметры = "")
OPI_ПреобразованиеТипов.ПолучитьСтроку(Название);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДПодборки);
OPI_ПреобразованиеТипов.ПолучитьБулево(Основная);
OPI_ПреобразованиеТипов.ПолучитьБулево(Скрытая);
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Ответ = ДобавитьПараметрКартинки(Картинка, ИДПодборки, Параметры_);
Если ЗначениеЗаполнено(Ответ) Тогда
Возврат Ответ;
КонецЕсли;
Параметры_.Вставить("title" , Название);
Параметры_.Вставить("main_album" , ?(Основная, 1, 0));
Параметры_.Вставить("is_hidden" , ?(Скрытая, 1, 0));
Если ЗначениеЗаполнено(ИДПодборки) Тогда
Параметры_.Вставить("album_id", ИДПодборки);
Метод = "editAlbum";
Иначе
Метод = "addAlbum";
КонецЕсли;
Ответ = OPI_Инструменты.Get("api.vk.com/method/market." + Метод, Параметры_);
Возврат Ответ;
КонецФункции
Функция ДобавитьПараметрКартинки(Знач Картинка, Знач ИДПодборки, Параметры)
PhotoID = "photo_id";
Если ЗначениеЗаполнено(Картинка) Тогда
ИДФото = ПолучитьИДКартинки(Картинка, Параметры, "Товар");
Если Не ТипЗнч(ИДФото) = Тип("Строка") Тогда
Возврат ИДФото;
КонецЕсли;
Параметры.Вставить(PhotoID, ИДФото);
Иначе
Если ЗначениеЗаполнено(ИДПодборки) Тогда
Подборки = ПолучитьМассивПодборок(ИДПодборки, Параметры);
Если Не ТипЗнч(Подборки) = Тип("Массив") Тогда
Возврат Подборки;
КонецЕсли;
Если Не Подборки.Количество() = 0 Тогда
ИДФото = Подборки[0]["photo"]["id"];
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДФото);
Параметры.Вставить(PhotoID, ИДФото);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат "";
КонецФункции
Процедура ЗаполнитьПараметрыЗагрузкиФото(Знач Метод, Знач Ответ, Параметры)
Response = "response";
Способ = Метод["Способ"];
СтандартныйСпособ = 1;
НовыйСпособ = 2;
Если Способ = СтандартныйСпособ Тогда
Hash = "hash";
Serv = "server";
Aid = "aid";
Фото = Метод["Фото"];
Параметры.Вставить(Hash, Ответ[Hash]);
Параметры.Вставить(Фото, Ответ[Фото]);
СерверФото = Ответ.Получить(Serv);
Если ЗначениеЗаполнено(СерверФото) Тогда
СерверФото = OPI_Инструменты.ЧислоВСтроку(СерверФото);
Параметры.Вставить(Serv, СерверФото);
КонецЕсли;
Идентификатор = Ответ.Получить(Aid);
Если ЗначениеЗаполнено(Идентификатор) Тогда
Идентификатор = OPI_Инструменты.ЧислоВСтроку(Идентификатор);
Параметры.Вставить(Aid , Идентификатор);
КонецЕсли;
ИначеЕсли Способ = НовыйСпособ Тогда
ОтветСтрокой = OPI_Инструменты.JSONСтрокой(Ответ);
Параметры.Вставить("upload_response", ОтветСтрокой);
Иначе
Параметры.Вставить("upload_results", Ответ[Response]["upload_result"]);
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьПоляЗапросаТовара(Знач ОписаниеТовара, Параметры)
Response = "response";
ОсновноеФото = ОписаниеТовара["ОсновноеФото"];
ДопФото = ОписаниеТовара["ДополнительныеФото"];
Свойства = ОписаниеТовара["ЗначенияСвойств"];
Если ЗначениеЗаполнено(ОсновноеФото) Тогда
Ответ = ЗагрузитьФотоНаСервер(ОсновноеФото, Параметры, "Товар");
Результат = Ответ[Response];
Если ЗначениеЗаполнено(Результат) Тогда
ИДФото = Результат["photo_id"];
Если Не ЗначениеЗаполнено(ИДФото) Тогда
Возврат;
КонецЕсли;
Иначе
Возврат;
КонецЕсли;
ИДФото = OPI_Инструменты.ЧислоВСтроку(ИДФото);
Параметры.Вставить("main_photo_id", ИДФото);
КонецЕсли;
Если ТипЗнч(Свойства) = Тип("Массив") Тогда
Свойства_ = Новый Массив;
Для Каждого Свойство Из Свойства Цикл
Свойства_.Добавить(OPI_Инструменты.ЧислоВСтроку(Свойство));
КонецЦикла;
Свойства = СтрСоединить(Свойства_, ",");
КонецЕсли;
Если ЗначениеЗаполнено(Свойства) Тогда
Параметры.Вставить("variant_ids", OPI_Инструменты.ЧислоВСтроку(Свойства));
КонецЕсли;
ДобавитьДополнительныеФотоТовара(ДопФото, Параметры);
Для Каждого Поле Из ПолучитьСоответствиеПараметровТовара() Цикл
Значение = ОписаниеТовара[Поле.Ключ];
Если Значение <> Неопределено Тогда
Параметры.Вставить(Поле.Значение, ОписаниеТовара[Поле.Ключ]);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ДобавитьДополнительныеФотоТовара(Знач МассивФото, Параметры)
Если ТипЗнч(МассивФото) = Тип("Массив") Тогда
Если МассивФото.Количество() > 0 Тогда
СтрокаФотографий = "";
Для Каждого Фото Из МассивФото Цикл
ИДФото = ПолучитьИДКартинки(Фото, Параметры, "Товар");
Если Не ТипЗнч(ИДФото) = Тип("Строка") Тогда
Возврат;
КонецЕсли;
СтрокаФотографий = СтрокаФотографий + ИДФото + ",";
КонецЦикла;
СтрокаФотографий = Лев(СтрокаФотографий, СтрДлина(СтрокаФотографий) - 1);
Параметры.Вставить("photo_ids", СтрокаФотографий);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ПолучитьСписокТоваровРекурсивно(МассивТоваров, Параметры, Сдвиг = 0)
Response = "response";
МаксимумВЗапросе = 200;
Ответ = OPI_Инструменты.Get("api.vk.com/method/market.get", Параметры);
Товары = Ответ[Response]["items"];
Если Товары.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Для Каждого Товар Из Товары Цикл
МассивТоваров.Добавить(Товар);
КонецЦикла;
Сдвиг = Сдвиг + МаксимумВЗапросе;
Параметры.Вставить("offset", Сдвиг);
ПолучитьСписокТоваровРекурсивно(МассивТоваров, Параметры, Сдвиг);
КонецПроцедуры
Процедура ПолучитьСписокАльбомовРекурсивно(МассивАльбомов, Параметры, Сдвиг = 0)
Response = "response";
МаксимумВЗапросе = 100;
Ответ = OPI_Инструменты.Get("api.vk.com/method/market.getAlbums", Параметры);
Альбомы = Ответ[Response]["items"];
Если Альбомы.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Для Каждого Альбом Из Альбомы Цикл
МассивАльбомов.Добавить(Альбом);
КонецЦикла;
Сдвиг = Сдвиг + МаксимумВЗапросе;
Параметры.Вставить("offset", Сдвиг);
ПолучитьСписокАльбомовРекурсивно(МассивАльбомов, Параметры, Сдвиг);
КонецПроцедуры
Процедура ПолучитьСписокЗаказовРекурсивно(МассивЗаказов, Параметры, Сдвиг = 0)
Response = "response";
МаксимумВЗапросе = 50;
Ответ = OPI_Инструменты.Get("api.vk.com/method/market.getGroupOrders", Параметры);
Заказы = Ответ[Response]["items"];
Если Заказы.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Для Каждого Заказ Из Заказы Цикл
МассивЗаказов.Добавить(Заказ);
КонецЦикла;
Сдвиг = Сдвиг + МаксимумВЗапросе;
Параметры.Вставить("offset", Сдвиг);
ПолучитьСписокЗаказовРекурсивно(МассивЗаказов, Параметры, Сдвиг);
КонецПроцедуры
#КонецОбласти