Вверх ↑
Этот топик читают: Гость
Ответов: 204
Рейтинг: 2
#1: 2018-04-17 20:15:54 ЛС | профиль | цитата
Сегодня наткнулся на API youtube: https://www.youtube.com/yt/dev/ru/api-resources.html

Насколько мог ознакомился с документацией и тутже возникла мысль: А возможно ли на основе данного API сделать для HiAsm полноценный компонент (или набор компонентов) для работы с ютубом?

Допустим получать статистические данные со своего канала или оповещения о стримах и новых видео с подписанных каналов. например того как приходят оповещения на почту???

Есть ли у нас такая возможность подружить HiAsm с youtube?

Редактировалось 1 раз(а), последний 2018-04-17 20:34:29
карма: 1

0
vip
#1.1контекстная реклама от партнеров
Ответов: 4621
Рейтинг: 746
#2: 2018-04-18 10:42:48 ЛС | профиль | цитата
Не думаю, что для этого надо целые компоненты делать. Всё API - это HTTP протокол (cookie, SSL, пользовательское тело запроса - JSON). Достаточно будет HTTPClient. Возможно, что-то небольшое нужно будет доделать для генерации авторизационных данных (типа HMAC, если требуется).
карма: 26

0
Ответов: 204
Рейтинг: 2
#3: 2018-04-18 10:56:11 ЛС | профиль | цитата
Для меня это оказалось несколько сложным. с моим знанием английского разобраться в документации оказалось сложновато (переводчик не всегда спасает)
Впрочем главный посыл понял, в рамках HiAsm работать с ютубом можно! Буду потихонечку пробовать освоить. Спасибо.
карма: 1

0
Ответов: 4621
Рейтинг: 746
#4: 2018-04-18 11:02:21 ЛС | профиль | цитата
Для начала настраиваешь API у себя в профиле и пробуешь примеры на JavaScript - думаю, достаточно будет сделать простую HTML страничку, подключить в неё клиентские библиотеки JS и попробовать отобразить данные канала.
карма: 26

0
Ответов: 204
Рейтинг: 2
#5: 2018-04-18 14:26:27 ЛС | профиль | цитата
Немного начало получаться.
Например, по запросу: https://www.googleapis.com/youtube/v3/channels?key=<API_KEY>&part=snippet,contentDetails,statistics&id=UCIi2Tk2POJkRgWHD7HGBa7Q
(<API_KEY> = вставил зарегистрированный мой API youtub)

получил вот такой результат:

тык
kind "youtube#channelListResponse"
etag "\"adhdwwnzlC1WiY00i7th8QwqOGQ/kHu1n2UyHlD3lDH_OQzFTYswGhQ\""
pageInfo
totalResults 1
resultsPerPage 1
items
0
kind "youtube#channel"
etag "\"adhdwwnzlC1WiY00i7th8QwqOGQ/reV_ijPI0BYojKRaaEzCnnv8Ahc\""
id "UCIi2Tk2POJkRgWHD7HGBa7Q"
snippet
title "Наука 2.0"
description "Официальный канал \"Наука 2.0\". \nНаучно-популярный познавательный канал о достижениях российской и мировой науки: человек, техника, технологии и космос. Специальные проекты и программы. \n\n\"Наука 2.0\" – канал для тех, кто интересуется настоящим и хочет знать, каким будет наше будущее.\nБольшинство зрителей даже не представляет, что такое современная наука и над чем сегодня работают ученые всего мира. Наша основная задача – рассказывать о значимых изобретениях, технологиях и открытиях. Ведь в 21 веке развитый интеллект, эрудированность и способность к нестандартному мышлению - настоящий ключ к успеху."
customUrl "naukatv"
publishedAt "2015-08-28T09:40:10.000Z"
thumbnails
default
url "https://yt3.ggpht.com/-8B_Z21pTQNI/AAAAAAAAAAI/AAAAAAAAAAA/p6n9PtEPBCg/s88-c-k-no-mo-rj-c0xffffff/photo.jpg"
width 88
height 88
medium
url "https://yt3.ggpht.com/-8B_Z21pTQNI/AAAAAAAAAAI/AAAAAAAAAAA/p6n9PtEPBCg/s240-c-k-no-mo-rj-c0xffffff/photo.jpg"
width 240
height 240
high
url "https://yt3.ggpht.com/-8B_Z21pTQNI/AAAAAAAAAAI/AAAAAAAAAAA/p6n9PtEPBCg/s800-c-k-no-mo-rj-c0xffffff/photo.jpg"
width 800
height 800
defaultLanguage "ru"
localized
title "Science"
description "Официальный канал \"Наука 2.0\". \nНаучно-популярный познавательный канал о достижениях российской и мировой науки: человек, техника, технологии и космос. Специальные проекты и программы. \n\n\"Наука 2.0\" – канал для тех, кто интересуется настоящим и хочет знать, каким будет наше будущее.\nБольшинство зрителей даже не представляет, что такое современная наука и над чем сегодня работают ученые всего мира. Наша основная задача – рассказывать о значимых изобретениях, технологиях и открытиях. Ведь в 21 веке развитый интеллект, эрудированность и способность к нестандартному мышлению - настоящий ключ к успеху."
country "RU"
contentDetails
relatedPlaylists
uploads "UUIi2Tk2POJkRgWHD7HGBa7Q"
watchHistory "HL"
watchLater "WL"
statistics
viewCount "85302961"
commentCount "0"
subscriberCount "631599"
hiddenSubscriberCount false
videoCount "1063"

Из всего этого можно получить: описание канала, количество просмотров, комментариев, видео.

А вот как запросить наличие стрима? То есть как понять онлайн сейчас канал или нет??? Существует ли вообще возможность такого запроса? В документах API я такого не обнаружил, либо просто не нашел!

И да, считаю что компонент "API ютуб" для HiAsm всеже нужен! Хотя бы ради облегчения работы. Возможно когда освою полноценно этот кактус попробую сварганить компонент.
карма: 1

0
Ответов: 204
Рейтинг: 2
#6: 2018-04-18 17:54:48 ЛС | профиль | цитата
Как оказалось за запрос о наличии онлайна на канале отвечает параметр: broadcastStatus

Но что-то у меня ничего не выходит с запросом о наличии онлайна на канале

запрос вывожу так: https://www.googleapis.com/youtube/v3/liveBroadcasts?key=<API_KEY>&part=id,snippet,cdn&status=UCIi2Tk2POJkRgWHD7HGBa7Q

Выходит ошибка:
error
errors
0
domain "global"
reason "required"
message "Login Required"
locationType "header"
location "Authorization"
code 401
message "Login Required"

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

0
Ответов: 4621
Рейтинг: 746
#7: 2018-04-19 11:02:11 ЛС | профиль | цитата
https://developers.google.com/youtube/v3/live/docs/liveBroadcasts/list писал(а):
Request

HTTP request

GET https://www.googleapis.com/youtube/v3/liveBroadcasts

Authorization

This request requires authorization with at least one of the following scopes (read more about authentication and authorization).


Редактировалось 1 раз(а), последний 2018-04-19 11:02:43
карма: 26

0
Ответов: 204
Рейтинг: 2
#8: 2018-04-19 13:39:05 ЛС | профиль | цитата
Netspirit писал(а):
https://developers.google.com/youtube/v3/live/docs/liveBroadcasts/list


Блин, я до последнего надеялся что что-то не так понимаю. ((((

Но согласитесь, ведь это тотальная глупость требовать авторизацию при запросе наличия онлайна! Не могу понять их логики в этом вопросе!

Редактировалось 1 раз(а), последний 2018-04-19 13:40:13
карма: 1

0
Ответов: 204
Рейтинг: 2
#9: 2018-04-19 16:53:02 ЛС | профиль | цитата
Ну что же, свершилось! Мой скудный разум освоил маленькую толику знаний по API youtube/
Я вынес мозг доброй половине программистов на "тостере" и "киберфоруме" в итоге решение мне помог найти человек который уже не раз спасал меня в плане программирования! За что ему огромное спасибо! Ты мега крут!!!! )))

И так запрос на наличие стрима/онлайна канала на ютуб выглядит следующим образом:

https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=ИД_КАНАЛА&eventType=live&maxResults=1&order=date&type=video&key=ВАШ API КЛЮЧЬ

Если стрим присутствует то ответ будет выглядеть так:


Если нет ни стрима ни оповещения о нем, то раздел: items будет пустым


Всё что я хотел получить от API youtube, я получил. Теперь дело за малым собрать все это в схему и по возможности запилить компонент. )))
карма: 1

0
Ответов: 204
Рейтинг: 2
#10: 2018-04-19 20:27:28 ЛС | профиль | цитата
Схема готова. Вроде все что замыслил получилось. Наверняка из API youtube можно получить значительно больше, но я в эти дебри не лез. Если кто нибудь захочет. то дополнит моё творение. ))

Правда сам компонент сделать не получилось так как в схеме использовал нестандартный компонент HTTPClient. Тот что посоветовал Netspirit. Кстати спасибо ему отдельное. В нужный момент пнул меня в нужном направлении! ))

Собственно сама схема.

Add(MainForm,11567121,63,253)
{
Width=783
Height=526
}
Add(Button,10550242,385,386)
{
Left=90
Top=120
Caption="statistics"
link(onClick,5252399:doStatistics,[])
}
Add(Edit,16664417,532,259)
{
Left=10
Top=30
Width=310
Text=""
}
Add(Memo,7194871,777,379)
{
Left=330
Top=15
Width=425
Height=155
ScrollBars=3
}
Add(MultiElementEx,5252399,532,386)
{
link(APIKey,16664417:Text,[])
link(IDchannel,5506683:Text,[])
link(onStatistics,8203864:doEvent1,[])
link(onIine,7419020:doEvent1,[])
}
BEGIN_SDK
Add(EditMultiEx,2374688,21,21)
{
WorkCount=#56:doStatistics=получить общую статистику канала на youtube|50:doLive=проверить статус канала online-1, offline-0|
EventCount=#103:onStatistics=событие происходит после получения статитики канала и выводит полученный результат в поток|61:onIine=Наличие видеотрансляции на канале. 1-online, 0-offline|
VarCount=#22:NameChannel=Имя канала|27:description=описание канала|31:viewCount=Количество просмотров|39:subscriber Count=Количество подписчиков|44:videoCount=Количество видеороликов на канале|27:Name stream=Название стрима|33:DescriptionStream=Описание стрима|
DataCount=#58:APIKey=Ваш API key. Без него компонент работать не будет!|29:IDChannel=ID канла на youtube|
Width=1602
Height=900
VOffset=150
HOffset=250
link(doStatistics,10492591:doString,[(140,177)(140,301)])
link(doLive,11296329:doString,[(129,184)(129,441)])
link(NameChannel,10740601:Value,[(277,698)(580,698)])
link(description,616303:Value,[(284,707)(720,707)])
link(viewCount,16302207:Value,[(291,718)(860,718)])
link(subscriber Count,14210032:Value,[(298,727)(1000,727)])
link(videoCount,11997303:Value,[(305,739)(1140,739)])
link(Name stream,16052978:Value,[(312,879)(524,879)])
link(DescriptionStream,13852999:Value,[(319,890)(664,890)])
}
Add(HTTPClient,5090119,623,302)
{
@Hint=#27:Скачиваю, получаю ответы...|
Headers="Connection: Close"
Point(Proxy)
Point(Stream)
Point(doLoadStream)
link(onFinish,2355244:doCharset,[])
}
Add(Charset,2355244,700,309)
{
Type=7
link(onCharset,6023524:doEvent1,[])
}
Add(FormatStr,10492591,238,295)
{
@Hint=#30:запрос общей статистики канала|
Mask="https://www.googleapis.com/youtube/v3/channels?key=%1&part=snippet,contentDetails,statistics&id=%2\r\n "
link(onFString,13196461:doEvent1,[])
link(Str1,15607216:getVar,[])
link(Str2,6092438:getVar,[])
AddHint(63,-24,186,13,@Hint)
}
Add(LineBreakEx,9017796,271,63)
{
Caption="APIkey"
Type=3
link(_Data,2374688:APIKey,[])
}
Add(FormatStr,11296329,231,435)
{
@Hint=#32:запрос наличия онлайна на канале|
Mask="https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=%2&eventType=live&maxResults=1&order=date&type=video&key=%1\r\n"
link(onFString,6151234:doEvent1,[(282,441)(282,441)])
link(Str1,9608230:getVar,[])
link(Str2,4652379:getVar,[])
AddHint(67,29,194,13,@Hint)
}
Add(HubEx,5526199,574,302)
{
link(onEvent,5090119:doLoadString,[])
}
Add(LineBreakEx,6241923,278,42)
{
Caption="ID_channel"
Type=3
link(_Data,2374688:IDchannel,[])
}
Add(LineBreakEx,15607216,238,203)
{
Caption="APIkey"
Type=2
}
Add(LineBreakEx,6092438,245,231)
{
Caption="ID_channel"
Type=2
}
Add(LineBreakEx,9608230,231,350)
{
Caption="APIkey"
Type=2
}
Add(LineBreakEx,4652379,238,378)
{
Caption="ID_channel"
Type=2
}
Add(Hub,6023524,777,309)
{
link(onEvent1,2374688:onStatistics,[(1207,315)(1207,177)])
link(onEvent2,12577696:doEvent1,[(803,322)(803,395)(646,395)(646,475)])
}
Add(IndexToChanel,13203765,966,462)
{
Point(Index)
Point(Data)
link(onEvent1,1347603:doSearch,[(1038,468)(1038,578)(499,578)(499,629)])
link(onEvent2,8969744:doSearch,[])
link(Index,8064973:Value,[])
link(Data,2107277:Var3,[(979,450)(942,450)(942,525)])
}
Add(ChanelToIndex,98241,413,329)
{
link(onIndex,12330542:In,[])
}
Add(Memory,8064973,966,399)
{
Default=Integer(0)
}
Add(Hub,13196461,308,295)
{
link(onEvent1,98241:doWork1,[(368,301)(368,335)])
link(onEvent2,5526199:doWork2,[])
}
Add(Hub,6151234,301,435)
{
link(onEvent1,98241:doWork2,[(364,441)(364,342)])
link(onEvent2,5526199:doWork3,[(578,448)])
}
Add(LineBreak,3974112,917,399)
{
link(Out,8064973:doValue,[])
Primary=[12330542,-455,-70]
}
Add(StrList,352530,784,462)
{
}
Add(Hub,12577696,672,469)
{
OutCount=3
link(onEvent1,352530:doClear,[])
link(onEvent2,352530:doAdd,[(770,482)(770,468)])
link(onEvent3,12341515:doTrim,[(763,489)(763,545)])
}
Add(BlockFind,1347603,511,623)
{
IncludeBlock=1
StartBlock=""snippet": {
"title":"
EndBlock=","
link(onSearch,10740601:doValue,[])
link(Text,2445723:Var2,[])
}
Add(GetDataEx,2107277,784,520)
{
link(Data,352530:Text,[])
}
Add(Trim,12341515,784,539)
{
Mode=7
link(onTrim,4087216:doEvent1,[])
link(Text,2107277:Var2,[])
}
Add(Hub,4087216,833,539)
{
link(onEvent1,352530:doText,[(859,545)(859,517)(772,517)(772,489)])
link(onEvent2,13203765:doEvent,[(907,552)(907,468)])
}
Add(Memory,10740601,574,623)
{
link(onData,9612997:doSearch,[])
}
Add(BlockFind,9612997,644,623)
{
IncludeBlock=1
StartBlock=""description":"
EndBlock=""customUrl""
link(onSearch,616303:doValue,[])
link(Text,12817863:Var2,[])
}
Add(GetDataEx,12277095,644,520)
{
Angle=1
link(Data,2107277:Var1,[])
}
Add(Memory,616303,714,623)
{
link(onData,12687951:doSearch,[])
}
Add(BlockFind,12687951,791,623)
{
IncludeBlock=1
StartBlock=""viewCount": ""
EndBlock="","
link(onSearch,16302207:doValue,[])
link(Text,3657358:Var2,[])
}
Add(GetDataEx,12817863,644,588)
{
link(Data,12277095:Var2,[])
}
Add(Memory,16302207,854,623)
{
link(onData,11693323:doSearch,[])
}
Add(BlockFind,11693323,924,623)
{
IncludeBlock=1
StartBlock=""subscriberCount": ""
EndBlock="","
link(onSearch,14210032:doValue,[])
link(Text,6086141:Var2,[])
}
Add(GetDataEx,3657358,791,588)
{
Angle=3
link(Data,12817863:Var3,[])
}
Add(Memory,14210032,994,623)
{
link(onData,1954815:doSearch,[])
}
Add(BlockFind,1954815,1064,623)
{
IncludeBlock=1
StartBlock=""videoCount": ""
EndBlock="""
link(onSearch,11997303:doValue,[])
link(Text,6086141:Var3,[(1070,593)])
}
Add(GetDataEx,6086141,924,588)
{
Angle=3
link(Data,3657358:Var3,[])
}
Add(Memory,11997303,1134,623)
{
}
Add(LineBreak,7542560,371,805)
{
link(Out,12286289:doSearch,[])
Primary=[7937901,910,-336]
}
Add(BlockFind,8969744,1064,469)
{
IncludeBlock=1
StartBlock=""items": [
"
EndBlock="]"
link(onSearch,9782022:doValue,[])
}
Add(Memory,9782022,1113,469)
{
Default=String()
link(onData,3921705:doLength,[])
}
Add(Length,3921705,1169,469)
{
link(onLength,4134012:doCompare,[])
link(Str,9782022:Value,[(1175,457)(1151,457)(1151,513)(1119,513)])
}
Add(If_else,4134012,1225,469)
{
Type=4
Op2=Integer(6)
link(onTrue,7937901:In,[])
link(onFalse,2684509:doWork2,[])
link(Op1,3921705:Result,[(1231,457)(1203,457)(1203,513)(1175,513)])
}
Add(ChanelToIndex,15700560,1456,476)
{
link(onIndex,2374688:onIine,[(1556,482)(1556,184)])
}
Add(BlockFind,12286289,455,805)
{
IncludeBlock=1
StartBlock=""title":"
EndBlock=","
link(onSearch,16052978:doValue,[])
link(Text,5792305:Var2,[])
}
Add(Memory,16052978,518,805)
{
link(onData,12201226:doSearch,[])
}
Add(BlockFind,12201226,588,805)
{
IncludeBlock=1
StartBlock=""description":"
EndBlock=","
link(onSearch,13852999:doValue,[])
link(Text,7321138:Var2,[])
}
Add(Memory,13852999,658,805)
{
link(onData,6498649:doSearch,[])
}
Add(LineBreakEx,14012239,434,539)
{
Caption="datach"
Type=3
link(_Data,2445723:Var1,[(440,525)])
}
Add(GetDataEx,2445723,511,520)
{
Angle=1
link(Data,12277095:Var1,[])
}
Add(LineBreakEx,10893769,455,749)
{
Caption="datach"
Type=2
}
Add(GetDataEx,5792305,455,770)
{
link(Data,10893769:getVar,[])
}
Add(BlockFind,6498649,735,805)
{
IncludeBlock=1
StartBlock=""liveBroadcastContent": ""
EndBlock="""
link(onSearch,12451010:doCompare,[])
link(Text,7321138:Var3,[(741,775)])
}
Add(GetDataEx,7321138,588,770)
{
Angle=3
link(Data,5792305:Var3,[])
}
Add(If_else,12451010,805,805)
{
Op2=String(live)
link(onTrue,7753018:In,[])
link(onFalse,8306089:In,[])
}
Add(LineBreak,11869638,1400,483)
{
link(Out,15700560:doWork2,[])
Primary=[7753018,-539,322]
}
Add(LineBreak,16706383,1351,462)
{
link(Out,2684509:doWork1,[(1439,468)])
Primary=[8306089,-448,350]
}
Add(HubEx,2684509,1435,476)
{
link(onEvent,15700560:doWork1,[])
}
END_SDK
Add(Hub,8203864,686,386)
{
OutCount=3
link(onEvent1,7194871:doClear,[])
link(onEvent2,7194871:doAdd,[(728,399)(728,385)])
link(onEvent3,15749535:doWork2,[])
}
Add(Label,4418064,385,70)
{
Left=15
Top=10
Width=41
Height=17
Caption="API key"
}
Add(Edit,5506683,539,312)
{
Left=10
Top=85
Width=310
Text=""
}
Add(Label,15703479,425,68)
{
Left=15
Top=65
Width=56
Height=17
Caption="ID channel"
}
Add(Button,3854230,443,393)
{
Left=165
Top=120
Caption="online"
link(onClick,5252399:doLive,[])
}
Add(Label,14208315,469,70)
{
Left=20
Top=175
Width=220
Caption="название канала"
}
Add(Label,6658984,511,70)
{
Left=20
Top=220
Width=170
Caption="описание канала"
}
Add(Edit,664144,532,791)
{
Left=20
Top=190
Width=260
link(Str,5252399:NameChannel,[])
}
Add(Memo,1264681,539,735)
{
Left=15
Top=235
Width=270
ScrollBars=3
link(Str,5252399:description,[])
}
Add(LineBreak,6720373,441,742)
{
link(Out,8186753:doEvent1,[])
Primary=[6953037,-196,-189]
}
Add(Hub,8186753,490,742)
{
link(onEvent1,1264681:doClear,[])
link(onEvent2,1264681:doAdd,[(522,755)(522,741)])
}
Add(LineBreak,2890620,56,546)
{
link(Out,15844709:doDeferredEvent,[])
Primary=[7896336,672,-146]
}
Add(Hub,2860240,168,546)
{
OutCount=7
link(onEvent1,10180981:In,[])
link(onEvent2,6953037:In,[])
link(onEvent3,15145382:In,[])
link(onEvent4,6911954:In,[])
link(onEvent5,4981642:In,[])
link(onEvent6,5112429:In,[])
link(onEvent7,4981925:In,[])
}
Add(LineBreak,4067009,483,791)
{
link(Out,664144:doText,[])
Primary=[10180981,-280,-245]
}
Add(Label,1232803,553,70)
{
Left=25
Top=330
Width=215
Caption="количество просмотров на канале"
}
Add(Edit,11154435,546,686)
{
Left=25
Top=345
Width=175
link(Str,5252399:viewCount,[])
}
Add(LineBreak,4215978,490,686)
{
link(Out,11154435:doText,[])
Primary=[15145382,-287,-126]
}
Add(Label,13600223,595,70)
{
Left=25
Top=375
Width=215
Caption="количество подписчиков"
}
Add(Edit,736924,553,637)
{
Left=25
Top=390
Width=170
link(Str,5252399:subscriber Count,[])
}
Add(LineBreak,10140022,497,637)
{
link(Out,736924:doText,[])
Primary=[6911954,-252,-70]
}
Add(LineBreak,8589158,497,588)
{
link(Out,1645045:doText,[])
Primary=[4981642,-294,-14]
}
Add(Label,9726737,639,70)
{
Left=25
Top=420
Width=180
Height=17
Caption="количество видеороликов"
}
Add(Edit,16375362,567,539)
{
Left=320
Top=285
Width=430
link(Str,5252399:Name stream,[])
}
Add(LineBreak,16383049,497,539)
{
link(Out,16375362:doText,[])
Primary=[5112429,-252,42]
}
Add(Label,3163815,678,70)
{
Left=325
Top=265
Width=92
Height=17
Caption="название стрима"
}
Add(Memo,5380066,574,469)
{
Left=320
Top=340
Width=420
Height=120
ScrollBars=3
link(Str,5252399:DescriptionStream,[])
}
Add(LineBreak,15969612,462,476)
{
link(Out,2161287:doEvent1,[])
Primary=[4981925,-259,112]
}
Add(Hub,2161287,511,476)
{
link(onEvent1,5380066:doClear,[])
link(onEvent2,5380066:doAdd,[(557,489)(557,475)])
}
Add(Label,8953252,718,68)
{
Left=325
Top=320
Width=92
Height=17
Caption="описание стрима"
}
Add(Label,10078649,1117,397)
{
Left=495
Top=195
Width=92
Height=17
Caption="online"
Point(doBringToFront)
}
Add(LED,8037558,1120,350)
{
Left=520
Top=225
}
Add(LineBreak,6469772,924,364)
{
link(Out,399814:doEvent,[])
Primary=[3538987,-280,29]
}
Add(Label,8008843,1117,313)
{
Left=495
Top=195
Width=92
Height=17
Caption="offline"
Point(doBringToFront)
}
Add(IndexToChanel,399814,980,364)
{
link(onEvent1,567041:doEvent1,[(1047,370)(1047,326)])
link(onEvent2,12858881:doEvent1,[(1048,377)(1048,403)])
}
Add(Hub,7419020,602,393)
{
link(onEvent1,3538987:In,[])
link(onEvent2,15749535:doWork1,[(632,406)(632,440)(711,440)])
}
Add(HubEx,15749535,707,400)
{
link(onEvent,7896336:In,[])
}
Add(Hub,567041,1078,320)
{
link(onEvent1,8008843:doBringToFront,[])
link(onEvent2,8037558:doOff,[(1106,333)(1106,363)])
}
Add(Hub,12858881,1078,397)
{
link(onEvent1,8037558:doOn,[(1106,403)(1106,370)])
link(onEvent2,10078649:doBringToFront,[])
}
Add(DeferredEvent,15844709,105,546)
{
Delay=31
link(onDeferredEvent,2860240:doEvent1,[])
}
Add(Edit,1645045,560,588)
{
Left=25
Top=435
Width=170
link(Str,5252399:videoCount,[])
}


Редактировалось 1 раз(а), последний 2018-04-19 20:28:06
карма: 1

0
Ответов: 4621
Рейтинг: 746
#11: 2018-04-20 10:52:52 ЛС | профиль | цитата
Я почему и говорил, что нет необходимости делать отдельные компоненты - весь функционал можно реализовать набором таких мультиэлементов. Интуитивно ощущаю необходимость компонента JSON-парсера, чтобы не городить BlockFind.
карма: 26

0
Ответов: 233
Рейтинг: 12
#12: 2018-04-21 11:54:58 ЛС | профиль | цитата
Netspirit писал(а):
Интуитивно ощущаю необходимость компонента JSON-парсера, чтобы не городить BlockFind.


Вот это было бы очень полезно!!!!
карма: 2

0
Ответов: 67
Рейтинг: 1
#13: 2018-04-21 12:04:19 ЛС | профиль | цитата
Netspirit писал(а):
......авторизационных данных (типа HMAC, если требуется)

И это не менее полезно в частности HMAC-SHA512
карма: 1

0
13
Сообщение
...
Прикрепленные файлы
(файлы не залиты)