mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2025-01-12 04:34:10 +02:00
Доработал библиотеку твиттера
This commit is contained in:
parent
8e835dfedf
commit
c4def3141e
@ -131,23 +131,42 @@
|
||||
|
||||
#Область Твиты
|
||||
|
||||
Функция СоздатьПроизвольныйТвит(Знач Текст, Знач МассивМедиа = "", Знач МассивВариантов = "", Знач Параметры = "") Экспорт
|
||||
Функция СоздатьПроизвольныйТвит(Знач Текст = ""
|
||||
, Знач МассивМедиа = ""
|
||||
, Знач МассивВариантовОпроса = ""
|
||||
, Знач ДлительностьОпроса = ""
|
||||
, Знач Параметры = "") Экспорт
|
||||
|
||||
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
|
||||
URL = "https://api.twitter.com/2/tweets";
|
||||
|
||||
Если Не ТипЗнч(МассивМедиа) = Тип("Массив") Тогда
|
||||
МассивМедиа_ = Новый Массив;
|
||||
|
||||
Если ЗначениеЗаполнено(МассивМедиа) Тогда
|
||||
МассивМедиа_.Добавить(МассивМедиа);
|
||||
КонецЕсли;
|
||||
|
||||
МассивМедиа = МассивМедиа_;
|
||||
КонецЕсли;
|
||||
|
||||
Поля = Новый Соответствие;
|
||||
Поля.Вставить("text", Текст);
|
||||
|
||||
Если ЗначениеЗаполнено(Текст) Тогда
|
||||
Поля.Вставить("text", Текст);
|
||||
КонецЕсли;
|
||||
|
||||
Если ТипЗнч(МассивВариантовОпроса) = Тип("Массив") И ЗначениеЗаполнено(ДлительностьОпроса) Тогда
|
||||
Если МассивВариантовОпроса.Количество()> 0 Тогда
|
||||
Поля.Вставить("poll", Новый Структура("options,duration_minutes", МассивВариантовОпроса, ДлительностьОпроса));
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
Если ТипЗнч(МассивМедиа) = Тип("Массив") Тогда
|
||||
Если МассивМедиа.Количество() > 0 Тогда
|
||||
Поля.Вставить("media", Новый Структура("media_ids", МассивМедиа));
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
Авторизация = СоздатьЗаголовокАвторизацииV2(Параметры_);
|
||||
Ответ = OPI_Инструменты.Post(URL, Поля, Авторизация);
|
||||
@ -157,30 +176,34 @@
|
||||
КонецФункции
|
||||
|
||||
Функция СоздатьТекстовыйТвит(Знач Текст, Знач Параметры = "") Экспорт
|
||||
Возврат СоздатьПроизвольныйТвит(Текст, , Параметры);
|
||||
Возврат СоздатьПроизвольныйТвит(Текст, , , , Параметры);
|
||||
КонецФункции
|
||||
|
||||
Функция СоздатьТвитКартинки(Знач Текст, Знач МассивКартинок, Знач Параметры = "") Экспорт
|
||||
|
||||
МассивМедиа = ЗагрузитьМассивВложений(МассивКартинок, "tweet_image", Параметры);
|
||||
Возврат СоздатьПроизвольныйТвит(Текст, МассивМедиа, Параметры);
|
||||
Возврат СоздатьПроизвольныйТвит(Текст, МассивМедиа, , , Параметры);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СоздатьТвитГифки(Знач Текст, Знач МассивГифок, Знач Параметры = "") Экспорт
|
||||
|
||||
МассивМедиа = ЗагрузитьМассивВложений(МассивГифок, "tweet_gif", Параметры);
|
||||
Возврат СоздатьПроизвольныйТвит(Текст, МассивМедиа, Параметры);
|
||||
Возврат СоздатьПроизвольныйТвит(Текст, МассивМедиа, , , Параметры);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СоздатьТвитВидео(Знач Текст, Знач МассивВидео, Знач Параметры = "") Экспорт
|
||||
|
||||
МассивМедиа = ЗагрузитьМассивВложений(МассивВидео, "tweet_video", Параметры);
|
||||
Возврат СоздатьПроизвольныйТвит(Текст, МассивМедиа, Параметры);
|
||||
Возврат СоздатьПроизвольныйТвит(Текст, МассивМедиа, , , Параметры);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СоздатьТвитОпрос(Знач Текст, Знач МассивВариантов, Знач Длительность, Знач Параметры = "") Экспорт
|
||||
Возврат СоздатьПроизвольныйТвит(Текст, , МассивВариантов, Длительность, Параметры);
|
||||
КонецФункции
|
||||
|
||||
Функция ЗагрузитьМассивВложений(Знач МассивФайлов, Знач ТипВложений, Знач Параметры = "") Экспорт
|
||||
|
||||
МассивМедиа = Новый Массив;
|
||||
@ -246,7 +269,7 @@
|
||||
Иначе
|
||||
|
||||
ЧтениеДанных = Новый ЧтениеДанных(Файл);
|
||||
МассивЧтения = ЧтениеДанных.РазделитьНаЧастиПо(5000000);
|
||||
МассивЧтения = ЧтениеДанных.РазделитьНаЧастиПо(4*1024*1024);
|
||||
|
||||
Поля = Новый Структура;
|
||||
Поля.Вставить("command" , "INIT");
|
||||
@ -256,35 +279,52 @@
|
||||
|
||||
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Поля, "POST", URL);
|
||||
|
||||
ID = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь)["media_id_string"];
|
||||
ОтветИнициализации = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь);
|
||||
KeyИнициализации = ОтветИнициализации["media_key"];
|
||||
IDИнициализации = ОтветИнициализации["media_id_string"];
|
||||
Счетчик = 0;
|
||||
|
||||
Для Каждого Часть Из МассивЧтения Цикл
|
||||
|
||||
ДвоичныеЧасти = Часть.ПолучитьДвоичныеДанные();
|
||||
B64Части = Base64Строка(ДвоичныеЧасти);
|
||||
|
||||
Поля = Новый Структура;
|
||||
Поля.Вставить("command" , "APPEND");
|
||||
Поля.Вставить("media_id" , ID);
|
||||
Поля.Вставить("media_data" , B64Части);
|
||||
Поля.Вставить("media_key" , KeyИнициализации);
|
||||
Поля.Вставить("segment_index" , OPI_Инструменты.ЧислоВСтроку(Счетчик));
|
||||
Поля.Вставить("media" , ДвоичныеЧасти);
|
||||
|
||||
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Поля, "POST", URL);
|
||||
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Новый Структура, "POST", URL);
|
||||
|
||||
OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь);
|
||||
ОтветЧасти = OPI_Инструменты.PostMultipart(URL, Поля, , , Авторизация);
|
||||
|
||||
Счетчик = Счетчик + 1;
|
||||
КонецЦикла;
|
||||
|
||||
|
||||
Поля = Новый Структура;
|
||||
Поля.Вставить("command" , "FINALIZE");
|
||||
Поля.Вставить("media_id" , ID);
|
||||
Поля.Вставить("media_id" , IDИнициализации);
|
||||
|
||||
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Поля, "POST", URL);
|
||||
|
||||
Ответ = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь);
|
||||
СтатусОбработки = Ответ["processing_info"]["state"];
|
||||
Поля = Новый Структура;
|
||||
|
||||
Поля.Вставить("command" , "STATUS");
|
||||
Поля.Вставить("media_id" , IDИнициализации);
|
||||
|
||||
Пока Строка(СтатусОбработки) = "pending" Или Строка(СтатусОбработки) = "in_progress" Цикл
|
||||
|
||||
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Поля, "GET", URL);
|
||||
Ответ = OPI_Инструменты.Get(URL, Поля, Авторизация);
|
||||
СтатусОбработки = Ответ["processing_info"]["state"];
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если СтатусОбработки = "failed" Тогда
|
||||
ВызватьИсключение "Твиттер не смог обработать загруженное вами видео";
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
@ -299,7 +339,7 @@
|
||||
//которые, при этом, созданы не для разныз задач, но просто являются версиями друг друга.
|
||||
//Актуальной версией API является v2 и она требует получения временных токенов. Несмотря на то,
|
||||
//что Twitter настаивает на использовании этой актуальной версии, они как-то умудрились не перенести
|
||||
//механизм загрузки файлов и некоторые другие из старой версии - v1.1. По-этому что-то нужно делать
|
||||
//механизм загрузки файлов и некоторые другие из старой версии - v1.1. Поэтому что-то нужно делать
|
||||
//на версии 1.1, а что-то на 2: вплоть до того что они убрали возможность постить твиты из v1.1,
|
||||
//но только через нее в твит можно добавить картинку. При этом способы авторизации и токены у них разные
|
||||
|
||||
|
@ -98,7 +98,13 @@
|
||||
ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""" + Параметр.Ключ + """");
|
||||
ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
|
||||
ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
|
||||
|
||||
Если ТипЗнч(Параметр.Значение) = Тип("Строка") Тогда
|
||||
ЗаписьТекста.ЗаписатьСтроку(Параметр.Значение);
|
||||
Иначе
|
||||
ЗаписьТекста.Записать(Параметр.Значение);
|
||||
КонецЕсли;
|
||||
|
||||
ЗаписьТекста.ЗаписатьСтроку(РазделительСтрок);
|
||||
|
||||
КонецЦикла;
|
||||
@ -137,11 +143,12 @@
|
||||
|
||||
Ответ = Соединение.ВызватьHTTPМетод("POST", НовыйЗапрос);
|
||||
|
||||
Если Ответ.Заголовки.Получить("Content-Encoding") <> Неопределено Тогда
|
||||
Если Ответ.Заголовки.Получить("Content-Encoding") = "gzip" Тогда
|
||||
НужнаРаспаковка = Ответ.Заголовки.Получить("Content-Encoding") = "gzip" Или
|
||||
Ответ.Заголовки.Получить("content-encoding") = "gzip";
|
||||
|
||||
Если НужнаРаспаковка Тогда
|
||||
Ответ = РаспаковатьОтвет(Ответ);
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ?(ТипЗнч(Ответ) = Тип("ДвоичныеДанные"), JsonВСтруктуру(Ответ), JsonВСтруктуру(Ответ.ПолучитьТелоКакДвоичныеДанные()));
|
||||
|
||||
@ -287,6 +294,10 @@
|
||||
|
||||
Функция JsonВСтруктуру(Знач Текст, Знач Кодировка = "utf-8") Экспорт
|
||||
|
||||
Если Не ЗначениеЗаполнено(Текст) Тогда
|
||||
Возврат "";
|
||||
КонецЕсли;
|
||||
|
||||
ЧтениеJSON = Новый ЧтениеJSON;
|
||||
ЧтениеJSON.ОткрытьПоток(Текст.ОткрытьПотокДляЧтения());
|
||||
|
||||
@ -329,6 +340,15 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция РазмерДанныхB64(Знач Base64Строка) Экспорт
|
||||
|
||||
РазмерДанных = СтрДлина(Base64Строка)
|
||||
- ?(Прав(Base64Строка, 1) = "=", 1, 0)
|
||||
- ?(Прав(Base64Строка, 2) = "==", 1, 0);
|
||||
|
||||
Возврат Цел(РазмерДанных / 4 * 3);
|
||||
|
||||
Конецфункции
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -36,11 +36,11 @@
|
||||
<languageCode>ru</languageCode>
|
||||
</languages>
|
||||
<commonModules>CommonModule.OPI_Инструменты</commonModules>
|
||||
<commonModules>CommonModule.OPI_Криптография</commonModules>
|
||||
<commonModules>CommonModule.OPI_Telegram</commonModules>
|
||||
<commonModules>CommonModule.OPI_VK</commonModules>
|
||||
<commonModules>CommonModule.OPI_Viber</commonModules>
|
||||
<commonModules>CommonModule.OPI_Twitter</commonModules>
|
||||
<commonModules>CommonModule.OPI_Криптография</commonModules>
|
||||
<httpServices>HTTPService.Twitter</httpServices>
|
||||
<constants>Constant.TwitterRefresh</constants>
|
||||
<constants>Constant.TwitterToken</constants>
|
||||
|
@ -3,6 +3,16 @@
|
||||
|
||||
Параметры = Новый Соответствие;
|
||||
|
||||
Параметры.Вставить("redirect_uri" , "https://api.athenaeum.digital/opi/hs/twitter");
|
||||
Параметры.Вставить("client_id" , "ZG1vSmxlVTJXYi05M2c0ek9iV246MTpjaQ");
|
||||
Параметры.Вставить("client_secret" , "6Yy_dyoguUb6W-TaRrYfj1N5_8AlKxq-yjiD2sNN4l1H7BcUnd");
|
||||
Параметры.Вставить("access_token" , Константы.TwitterToken.Получить());
|
||||
Параметры.Вставить("refresh_token" , Константы.TwitterRefresh.Получить());
|
||||
Параметры.Вставить("v1_access_token" , "929248194101501953-4O78tyw6zsnKiHK34DAMjnzDn6wYBlo");
|
||||
Параметры.Вставить("v1_access_secret", "YYC8ly1f5wtkiVFVzJooLb39ChMeLxjSGBxvidRzWuWuJ");
|
||||
Параметры.Вставить("api_key" , "2OQgEn51Kqd9SAiimcFIcHmSP");
|
||||
Параметры.Вставить("api_secret" , "Oerbr7max2rQG30QLBMXCcXpdzPmycg0qws6kMObHFJGREfDzj");
|
||||
|
||||
|
||||
Код = Запрос.ПараметрыЗапроса["code"];
|
||||
ОтветТокен = OPI_Twitter.ПолучитьТокен(Код, Параметры);
|
||||
|
Loading…
Reference in New Issue
Block a user