RestAPI综合运用2(WEB)
# FastWeb之RestAPI综合运用2
- 适用平台:WEB(桌面)
# 1. 说明
采用RestAPI通讯方式,与第三方工具的API进行整合对接,实现FastWeb上应用的扩展功能。在使用本示例前,请先阅读Shinobi文档 (opens new window)以及Myrtille文档 (opens new window)安装并配置,测试相关的API的可用性。如果访问FastWeb使用的是http,则播放视频以及网页显示的链接也应使用http;如果访问FastWeb使用的是https,则播放视频以及网页显示的链接也应使用https。这样可以避免浏览器因跨域导致资源无法访问。
通过本范例学习,可以掌握Shinobi与Myrtille API的运用方式,实现JSON的解析。
# 2. 设计明细
开启FastWeb设计器,分别加入下插图之控件。或者点击左上角的[导入]
选择模板文件来打开对应模板。

本示例与FastWebRestAPI综合运用1相同,故在此仅对新增以及有修改的部分控件进行说明。
①:TUniTabSheet组件,控件名称为UniTabSheet01
、UniTabSheet02
。
②:TUgPageControl组件,控件名称为UgPageControl01
。
③:TUgFlvPlayer组件,控件名称为UgFlvPlayer02
。
④:TUgFlvPlayer组件,控件名称为UgFlvPlayer03
。
⑤:TUgComboBox组件,控件名称为ShinobiMonitorList
。
⑥:TUgFlvPlayer组件,控件名称为UgFlvPlayer04
。
⑦:TUgFlvPlayer组件,控件名称为UgFlvPlayer05
。
UgWebRunFrame属性设置
Height
:设置页面高度=600
。Width
:设置页面宽度=1280
。AlignmentControl
:设置对齐的控件模式,设置为uniAlignmentClient
。
②UgPageControl01属性设置
需新增两个页面,分别设置其
Caption
属性为远程桌面
、监控
。Align
:设置对齐方式alClient
。
UniTabSheet02属性设置
Caption
:设置字幕显示内容:监控。Layout
:设计布局,设置为vbox
。
UgContainerPanel03属性设置
此控件位于
监控
面板下。Layout
:设计布局,设置为hbox
。LayoutConfig.Flex
:设计布局的占比,设置为1
。LayoutConfig.Width
:设计布局占用的宽度,设置为100%
。
UgContainerPanel04属性设置
此控件位于
监控
面板下。Layout
:设计布局,设置为hbox
。LayoutConfig.Flex
:设计布局的占比,设置为1
。LayoutConfig.Width
:设计布局占用的宽度,设置为100%
。
③UgFlvPlayer02属性设置
此控件位于
UgContainerPanel03
面板下。LayoutConfig.Flex
:设计布局的占比,设置为1
。LayoutConfig.Height
:设计布局占用的宽度,设置为100%
。
④UgFlvPlayer03属性设置
此控件位于
UgContainerPanel03
面板下。LayoutConfig.Flex
:设计布局的占比,设置为1
。LayoutConfig.Height
:设计布局占用的宽度,设置为100%
。
⑥UgFlvPlayer04属性设置
此控件位于
UgContainerPanel04
面板下。LayoutConfig.Flex
:设计布局的占比,设置为1
。LayoutConfig.Height
:设计布局占用的宽度,设置为100%
。
⑦UgFlvPlayer05属性设置
此控件位于
UgContainerPanel04
面板下。LayoutConfig.Flex
:设计布局的占比,设置为1
。LayoutConfig.Height
:设计布局占用的宽度,设置为100%
。
restlogin设置
双击控件,打开API选择器,选择Shinobi登录
的API。
- restMonitor设置
双击控件,打开API选择器,选择获取监视器
的API。
- restStart设置
双击控件,打开API选择器,选择开启监控
的API。
- restStop设置
双击控件,打开API选择器,选择停止监控
的API。
- restMyrtilleLogin设置
双击控件,打开API选择器,选择Myrtille登录
的API。
- restMyrtilleLogout设置
双击控件,打开API选择器,选择Myrtille登出
的API。
# 3. 程序设计
点击程序设计界面右下角的按钮,切换至单元选择界面,勾选需要使用的单元。该程式的程序需要引用MessageInfo
单元。
# 3.1. 程序初始设置
设置全局变量。
//JScript
var shinobiURL,shinobiAuthToken,shinobiGroupKey,shinobiMonitorID,myrtilleAuthToken;
2
//PasScript
Var
shinobiURL: String;
shinobiAuthToken: String;
shinobiGroupKey: String;
shinobiMonitorID: String;
myrtilleAuthToken: String;
...
Begin
End.
2
3
4
5
6
7
8
9
10
11
12
// Make sure to add code blocks to your code group
# 3.2. 事件设置
- btnLogin-OnClick事件
点击按钮以登录。
//JScript
function btnLoginOnClick(sender)
//登录按钮
{
restLogin.Send;
//UGCM.NetHttpPost(,,,,)
}
2
3
4
5
6
7
8
//PasScript
procedure btnLoginOnClick(sender: tobject);
//登录按钮
Var
vString: String;
begin
restLogin.Send;
end;
2
3
4
5
6
7
8
// Make sure to add code blocks to your code group
- restLogin-ResultData事件
获取登录信息并解析变量。
//JScript
function restLoginOnResultData(sender,aresult)
//登陆获取token
{
var vJSON = new TJSONObject();
var vValue = new TJSONValue();
Try{
vJSON = TJSONObject(vJSON.ParseJSONValue(aresult,False,False));
shinobiAuthToken = UGCM.GetJSONString(vJSON,"$user.auth_token");
shinobiGroupKey = UGCM.GetJSONString(vJSON,"$user.ke");
mmLog.Lines.Add("auth_token:" + shinobiAuthToken + " group_key:" + shinobiGroupKey);
}
Finally{
vJSON.Free;
vValue.Free;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//PasScript
procedure restLoginResultData(sender: tobject;aresult: string);
//登陆获取token
var
vJSON: TJSONObject;
vValue: TJSONValue;
begin
vJSON := TJSONObject.Create;
vValue := TJSONValue.Create;
Try
vJSON := TJSONObject(vJSON.ParseJSONValue(aresult,False,False));
shinobiAuthToken := UGCM.GetJSONString(vJSON,'$user.auth_token');
shinobiGroupKey := UGCM.GetJSONString(vJSON,'$user.ke');
mmLog.Lines.Add('auth_token:' + shinobiAuthToken + ' group_key:' + shinobiGroupKey);
Finally
vJSON.Free;
vValue.Free;
End;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Make sure to add code blocks to your code group
- btnMyrtilleLogin-OnClick事件
Myrtille登录。
//JScript
function btnMyrtilleLoginOnClick(sender)
//Myrtille登录
{
restMyrtilleLogin.Send;
UgPageControl01.ActivePageIndex = 0;
}
2
3
4
5
6
7
8
//PasScript
procedure btnMyrtilleLoginOnClick(sender: tobject);
//Myrtille登录
begin
restMyrtilleLogin.Send;
UgPageControl01.ActivePageIndex := 0;
end;
2
3
4
5
6
7
// Make sure to add code blocks to your code group
- restMyrtilleLogin-ResultData事件
登录发送相关讯息。
//JScript
function restMyrtilleLoginOnResultData(sender,aresult)
//登录
{
myrtilleAuthToken = StringReplace(aresult,""","");
mmLog.Lines.Add("auth_token:" + myrtilleAuthToken);
UgURLFrame.URL = "http://{MyrtilleServer}/Myrtille/?__EVENTTARGET=&cid="+ myrtilleAuthToken + "&connect=Connect%21";
}
2
3
4
5
6
7
8
//PasScript
procedure restMyrtilleLoginResultData(sender: tobject;aresult: string);
//登录
begin
myrtilleAuthToken := StringReplace(aresult,'"','');
mmLog.Lines.Add('auth_token:' + myrtilleAuthToken);
UgURLFrame.URL := 'http://{MyrtilleServer}/Myrtille/?__EVENTTARGET=&cid='+ myrtilleAuthToken + '&connect=Connect%21';
end;
2
3
4
5
6
7
8
// Make sure to add code blocks to your code group
- btnMyrtilleLogout-OnClick事件
Myrtille登出按钮点击,发送登出的API请求。
//JScript
function btnMtrtilleLogoutOnClick(sender)
//Myrtille登出
{
restMyrtillelogout.Params.Text = Format(restMyrtillelogout.Params.Text,[myrtilleAuthToken]);
restMyrtillelogout.Send;
}
2
3
4
5
6
7
//PasScript
procedure btnMtrtilleLogoutOnClick(sender: tobject);
//Myrtille登出
begin
restMyrtillelogout.Params.Text := Format(restMyrtillelogout.Params.Text,[myrtilleAuthToken]);
restMyrtillelogout.Send;
end;
2
3
4
5
6
7
// Make sure to add code blocks to your code group
- btnMonitor-OnClick事件
监视器获取点击事件。
//JScript
function btnMonitorOnClick(sender)
//获取监视器
{
restMonitor.URL = Format(restMonitor.Url,[shinobiAuthToken,shinobiGroupKey]);
restMonitor.Send;
}
2
3
4
5
6
7
//PasScript
procedure btnMonitorOnClick(sender: tobject);
//获取监视器
begin
restMonitor.URL := Format(restMonitor.Url,[shinobiAuthToken,shinobiGroupKey]);
restMonitor.Send;
end;
2
3
4
5
6
7
// Make sure to add code blocks to your code group
- restMonitor-ResultData事件
获取到的信息进行组合放入复选框中。
//JScript
//获取结果
{
var vValueList = new TJSONArray();
Try{
vValueList = TJSONObject.ParseJSONValue(aresult,False,False) as TJSONArray;
var vCount = vValueList.Size;
if (vCount == 0) return;
for (i = 0; i <= (vCount - 1); i++)
{
shinobiMonitorID = UGCM.GetJSONString(vValueList,"["+ IntToStr(i) + "].mid"); //获取JSON序列
shinobiMonitorList.Items.Add(shinobiMonitorID);
mmLog.Lines.Add("monitorid:"+ shinobiMonitorID);
}
shinobiMonitorList.ItemIndex = 0;
}
Finally{
//vJSON.Free;
vValueList.Free;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//PasScript
procedure restMonitorResultData(sender: tobject;aresult: string);
//获取结果
var
vJSON: TJSONObject;
vValueList: TJSONArray;
vCount: Integer;
i: Integer;
begin
vJSON := TJSONObject.Create;
vValueList := TJSONArray.Create;
Try
vJSON := TJSONObject(vJSON.ParseJSONValue(aresult,False,False));
vValueList := TJSONArray(vJSON.ParseJSONValue(aresult,False,False));
vCount := vValueList.Size;
if vCount = 0 then exit;
for i := 0 to (vCount - 1) Do
begin
shinobiMonitorID := UGCM.GetJSONString(vJSON,'['+ IntToStr(i) + '].mid'); //获取JSON序列
shinobiMonitorList.Items.Add(shinobiMonitorID);
mmLog.Lines.Add('monitorid:'+ shinobiMonitorID);
End;
shinobiMonitorList.ItemIndex := 0;
Finally
vJSON.Free;
vValueList.Free;
End;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// Make sure to add code blocks to your code group
- btnLive-OnClick事件
选择视频进行查看。
//JScript
function btnLiveOnClick(sender)
//查看视频
{
UgPageControl01.ActivePageIndex = 1;
shinobiURL = restLogin.Server;
shinobiMonitorID = shinobiMonitorList.Items.Strings[shinobiMonitorList.ItemIndex];
UgFlvPlayer01.SetSource(shinobiURL+ "/"+ shinobiAuthToken + "/flv/"
+shinobiGroupKey + "/"+ shinobiMonitorID + "/s.flv","flv");
shinobiMonitorList.ItemIndex = 0;
shinobiMonitorID = shinobiMonitorList.Items.Strings[shinobiMonitorList.ItemIndex];
UgFlvPlayer02.SetSource(shinobiURL+ "/"+ shinobiAuthToken + "/flv/"
+shinobiGroupKey + "/"+ shinobiMonitorID + "/s.flv","flv");
shinobiMonitorList.ItemIndex = 0;
shinobiMonitorID = shinobiMonitorList.Items.Strings[shinobiMonitorList.ItemIndex];
UgFlvPlayer03.SetSource(shinobiURL+ "/"+ shinobiAuthToken + "/flv/"
+shinobiGroupKey + "/"+ shinobiMonitorID + "/s.flv","flv");
shinobiMonitorList.ItemIndex = 0;
shinobiMonitorID = shinobiMonitorList.Items.Strings[shinobiMonitorList.ItemIndex];
UgFlvPlayer04.SetSource(shinobiURL+ "/"+ shinobiAuthToken + "/flv/"
+shinobiGroupKey + "/"+ shinobiMonitorID + "/s.flv","flv");
shinobiMonitorList.ItemIndex = 0;
shinobiMonitorID = shinobiMonitorList.Items.Strings[shinobiMonitorList.ItemIndex];
UgFlvPlayer05.SetSource(shinobiURL+ "/"+ shinobiAuthToken + "/flv/"
+shinobiGroupKey + "/"+ shinobiMonitorID + "/s.flv","flv");
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//PasScript
procedure btnLiveOnClick(sender: tobject);
//查看视频
Var
shinobiURL:String;
begin
UgPageControl01.ActivePageIndex := 1;
shinobiURL := restLogin.Server;
shinobiMonitorID := shinobiMonitorList.Items.Strings[shinobiMonitorList.ItemIndex];
UgFlvPlayer01.SetSource(shinobiURL+ '/'+ shinobiAuthToken + '/flv/'
+shinobiGroupKey + '/'+ shinobiMonitorID + '/s.flv','flv');
shinobiMonitorList.ItemIndex := 0;
shinobiMonitorID := shinobiMonitorList.Items.Strings[shinobiMonitorList.ItemIndex];
UgFlvPlayer02.SetSource(shinobiURL+ '/'+ shinobiAuthToken + '/flv/'
+shinobiGroupKey + '/'+ shinobiMonitorID + '/s.flv','flv');
shinobiMonitorList.ItemIndex := 0;
shinobiMonitorID := shinobiMonitorList.Items.Strings[shinobiMonitorList.ItemIndex];
UgFlvPlayer03.SetSource(shinobiURL+ '/'+ shinobiAuthToken + '/flv/'
+shinobiGroupKey + '/'+ shinobiMonitorID + '/s.flv','flv');
shinobiMonitorList.ItemIndex := 0;
shinobiMonitorID := shinobiMonitorList.Items.Strings[shinobiMonitorList.ItemIndex];
UgFlvPlayer04.SetSource(shinobiURL+ '/'+ shinobiAuthToken + '/flv/'
+shinobiGroupKey + '/'+ shinobiMonitorID + '/s.flv','flv');
shinobiMonitorList.ItemIndex := 0;
shinobiMonitorID := shinobiMonitorList.Items.Strings[shinobiMonitorList.ItemIndex];
UgFlvPlayer05.SetSource(shinobiURL+ '/'+ shinobiAuthToken + '/flv/'
+shinobiGroupKey + '/'+ shinobiMonitorID + '/s.flv','flv');
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// Make sure to add code blocks to your code group
- btnStart-OnClick事件
开启监控的按钮点击事件。
//JScript
function btnStartOnClick(sender)
//开启监控
{
restStart.Url = Format(restStart.Url,[shinobiAuthToken,shinobiGroupKey,shinobiMonitorID]);
restStart.Send;
}
2
3
4
5
6
7
//PasScript
procedure btnStartOnClick(sender: tobject);
//开启监控
begin
restStart.Url := Format(restStart.Url,[shinobiAuthToken,shinobiGroupKey,shinobiMonitorID]);
restStart.Send;
end;
2
3
4
5
6
7
// Make sure to add code blocks to your code group
- restStart-ResultData事件
获取结果信息并显示。
//JScript
function restStartOnResultData(sender,aresult)
//开启结果
{
var vJSON = new TJSONObject();
var vValue = new TJSONValue();
Try{
vValue = vJSON.ParseJSONValue(aresult,False,False);
var vString = TJSONObject(vValue).GetValue("ok").Value;
mmLog.Lines.Add(aresult);
if (vString == "true"){
ShowSweetAlert(atSuccess,UGMM.LT("提示"),UGMM.LT("开启成功!"));
}
else{
ShowSweetAlert(atError,UGMM.LT("提示"),UGMM.LT("开启失败!"));
}
}
Finally{
vJSON.Free;
vValue.Free;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//PasScript
procedure restStartResultData(sender: tobject;aresult: string);
//开启结果
var
vJSON: TJSONObject;
vValue: TJSONValue;
vString: String;
begin
vJSON := TJSONObject.Create;
vValue := TJSONValue.Create;
Try
vValue := vJSON.ParseJSONValue(aresult,False,False);
vString := TJSONObject(vValue).GetValue('ok').Value;
mmLog.Lines.Add(aresult);
if vString = 'true' then
ShowSweetAlert(atSuccess,'提示','开启成功!')
else
ShowSweetAlert(atError,'提示','开启失败!');
Finally
vJSON.Free;
vValue.Free;
End;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Make sure to add code blocks to your code group
- btnStop-OnClick事件
关闭监控的按钮点击事件。
//JScript
function btnStopOnClick(sender)
//停止开启
{
restStop.Url = Format(restStop.Url,[shinobiAuthToken,shinobiGroupKey,shinobiMonitorID]);
restStop.Send;
}
2
3
4
5
6
7
//PasScript
procedure btnStopOnClick(sender: tobject);
//停止开启
begin
restStop.Url := Format(restStop.Url,[shinobiAuthToken,shinobiGroupKey,shinobiMonitorID]);
restStop.Send;
end;
2
3
4
5
6
7
// Make sure to add code blocks to your code group
- restStop-ResultData事件
获取结果信息并显示。
//JScript
function restStopOnResultData(sender,aresult)
//关闭结果
{
var vJSON = new TJSONObject();
var vValue = new TJSONValue();
Try{
vValue = vJSON.ParseJSONValue(aresult,False,False);
var vString = TJSONObject(vValue).GetValue("ok").Value;
mmLog.Lines.Add(aresult);
if (vString == "true"){
ShowSweetAlert(atSuccess,UGMM.LT("提示"),UGMM.LT("关闭成功!"));
}
else{
ShowSweetAlert(atError,UGMM.LT("提示"),UGMM.LT("关闭失败!"));
}
Finally
{
vJSON.Free;
vValue.Free;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//PasScript
procedure restStopResultData(sender: tobject;aresult: string);
//关闭结果
var
vJSON: TJSONObject;
vValue: TJSONValue;
vString: String;
begin
vJSON := TJSONObject.Create;
vValue := TJSONValue.Create;
Try
vValue := vJSON.ParseJSONValue(aresult,False,False);
vString := TJSONObject(vValue).GetValue('ok').Value;
mmLog.Lines.Add(aresult);
if vString = 'true' then
ShowSweetAlert(atSuccess,'提示','关闭成功!')
else
ShowSweetAlert(atError,'提示','关闭失败!');
Finally
vJSON.Free;
vValue.Free;
End;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Make sure to add code blocks to your code group
# 4. 运行结果
使用鼠标在FastWeb菜单,点击[保存至数据库]
按钮,将其保存至数据库,点击[调试运行]
确认能够正常打开。
首先点击1.登录
按钮获取token,然后点击2.监视器
获取监视器信息,点击查看视频
查看视频直播信息。
底部的Myrtille登录点击时打开远程桌面连接。