此示例显示如何自定义HTTPstringConsumer.
类- - -PricesStreamer
- 从Matlab中显示来自假设网站的流式数据®图窗口。要创建一个工作示例:
识别一个URL,类似于:
URL = MATLAB.NET.URI('' ,“accountId”,,“<名称>”,'<值>');
调整pricesstreamer.putdata.putdata.put.
读取特定于web服务的数据
本主题描述了以下任务。有关在图形窗口中显示表格数据的信息,请参见UITATION.
.
PricesStreamer
类Pricesstreamer.m.
是一个子类stringConsumer.
班级,这是一个子类ContentConsumer
.PricesStreamer
接收到特定Web服务提供的数据的流式数据。在此示例中,数据的结构是:
%数据包含一个或多个分隔的JSON结构。每个结构都是一种格式:%{“心跳”=“时间戳”}% {"tick"="timestamp", "bid"= "bid", "ask"=ask}%timeStamp是GMT时间和出价并询问是数字。
Matlab致电pricesstreamer.putdata.putdata.put.
函数用于从服务器接收的每个数据块。该函数首先转换原始数据uint8
使用stringConsumer.
.接下来,它可以使用JSON字符串获取MATLAB结构JSondecode.
然后用图形显示表格中的数据,为每一个数据增量在表格顶部添加一行。您可以修改Putdata.
函数对数据进行其他操作,例如绘制实时图形或显示delta价格。PricesStreamer
设置停止
返回值以在用户关闭图形时停止操作。有关更多信息,请参阅Putdata.
.
classdefPricesStreamer < matlab.net.http.io.StringConsumer% PricesStreamer接受流JSON%并在合适的图形窗口中显示结果。版权所有2016-2017 The MathWorks, Inc特性图表结束了逻辑HaveTick逻辑结束方法(访问=保护)功能长度=开始(obj)如果obj.response.statuscode〜= matlab.net.http.statuscode.ok length = 0;别的长度= obj.start@matlab.net.http.io.StringConsumer;obj。图=图('closerequestfcn',@ obj.endit);obj.figure.positure(4)= 550;obj.figure.position(2)= 50;obj.table = puitile(obj.figure,...“ColumnName”,{“时间”,'出价','问'},...“ColumnWidth”{130年,“汽车”,“汽车”});obj.table.position(4)= 500;obj.table.data = cell(0,3);obj.endit = false;obj.havetick = false;结束结束结束方法功能[Len,STOP] = PUTDATA(OBJ,数据)%数据包含一个或多个分隔的JSON结构。每个结构都是一种格式:%{“心跳”=“时间戳”}% {"tick"="timestamp", "bid"= "bid", "ask"=ask}%timeStamp是GMT时间和出价并询问是数字。如果obj。Endit data = [];删除(obj.Figure);结束first = obj.currentlength + 1;(len,停止)= obj.putData@matlab.net.http.io.StringConsumer(数据);如果isempty(数据)| |停止如果iSCHAR(数据)% data == "表示用户ctrl/c'ed,所以设置为obj.endit = true;%删除下一个关闭的图形结束停止= true;别的停止= false;去年= obj.CurrentLength;newData = obj.Response.Body.Data.extractBetween(第一个,最后一个);%在CRLFS分裂字符串= strsplit (newData,“\ r \ n”);尝试cellfun (@obj。displayJSON,strings);抓住e流(对JSON的错误:\ n % s < EOF > \ n”、数据);obj.endit = true;重新抛出(e);结束结束结束功能displayJSON (obj, str)如果〜isempty(str)尝试val = jsondecode (str);抓住e流(“错误”%s“on json:\ n%s\ n' ,e.message,str);重新抛出(e);结束如果isfield (val,'打钩') tick = val.tick;newdata = {cvtime (val.tick.time)、tick.bid tick.ask};setExtent = ~ obj.HaveTick;obj。HaveTick = true;elseifisfield (val,“心跳”)newdata = {cvtime(val.heartbeat.time),'',''};setExtent = false;结束obj.table.data = [newdata; obj.table.data];如果setExtent | | ~国防部(log10(长度(obj.Table.Data)), 1)%在第一次标记时设置范围,每次10的幂%加15宽度的滚动条obj.table.position(3)= obj.table.extent(3)+ 15;结束drawn结束结束功能瘟疫(obj, ~ ~)% endit callback from close(obj.Figure)如果存在(“obj”,“var”)&& isvalid(obj)如果obj。瘟疫如果isvalid (obj.Figure)删除(obj.Figure);结束别的obj.endit = true;结束结束结束功能删除(obj)如果~isempty(obj.Figure) && isvalid(obj.Figure) delete(obj.Figure);结束结束结束结束功能时间= cvtime(时间)显示显示的%格式时间数据time = datetime(时间,'InputFormat','yyyy-mm-dd'''hh:mm:ss.s'''z''',“时区”,“格林尼治时间”);time.timezone =“本地”;时间= char(时间,“dd-MMM-yyyy HH: mm: ss。年代);结束
UITATION.
目的通过从Web服务读取API信息来识别您的用例的数据结构。此示例的数据包含一个或多个分离的JSON结构。结构的格式是以下之一,其中时间戳
是格林尼治时间和出价
和问
是数字。
{“Heartbeat”=“时间戳”}
{“滴答”=“时间戳”、“投标”=报价,“问”=问}
要读取此特定格式,请重写Putdata.
方法。下面的陈述来自PricesStreamer
课堂使用stringconsumer.putdata.
要读取下一个缓冲区,请选择JSON字符串。
first = obj.currentlength + 1;(len,停止)= obj.putData@matlab.net.http.io.StringConsumer(数据);去年= obj.CurrentLength;newData = obj.Response.Body.Data.extractBetween(第一个,最后一个);%在CRLFS分裂字符串= strsplit (newData,“\ r \ n”);
下面的陈述来自displayJSON
函数单独处理JSON打钩
和心跳
结构。辅助功能cvtime
格式化显示在表格中的时间数据。
功能displayJSON (obj, str)...val = jsondecode (str);如果isfield (val,'打钩') tick = val.tick;newdata = {cvtime (val.tick.time)、tick.bid tick.ask};...elseifisfield (val,“心跳”)newdata = {cvtime(val.heartbeat.time),'',''};...结束obj.table.data = [newdata; obj.table.data];...结束
在这个例子中,只要web服务是活动的,MATLAB就会接收数据。用户可以通过关闭图形窗口或按下按钮来终止流Ctrl + C..要通知MATLAB一个用户中断,设置停止
论点Putdata.
来假
.清理任务包括使用该数字使用CloseRequestFcn
属性并使用中删除对象pricesstreamer.delete.
函数。
PricesStreamer
下面的代码提供了从web服务检索数据的框架。要运行代码,必须为其中的内容提供值<>
字符。web服务的URL可能包括其他参数,如登录信息和其他作为名称、值对参数指定的信息。利用PricesStreamer
,将它添加到您的呼叫中发送
.有关创建请求消息的信息,请参见HTTP接口.
URL = MATLAB.NET.URI('' ,“accountId”,,“<名称>”,'<值>');authInfo = matlab.net.http.AuthInfo (matlab.net.http.AuthenticationScheme.Bearer,...“编码”,' < YOUR_CREDENTIALS >”);af = matlab.net.http.field.authorizationfield(“授权”,authinfo);r = matlab.net.http.requestmessage(“得到”、af);消费者= PricesStreamer;% SavePayload设置为保留所有结果-对调试很有用[resp,req,hist] = r.send(url,matlab.net.http.httpoptions('savepayload',真的),消费者);%显示调试结果展示(resp)
下面是来自web服务的数据发送数据的示例将数据映射到MATLAB UITION对象.
HTTP / 1.1 200 OK服务器:OpenTesty / 1.9.15.1日期:WED,06 SEP 2017 2017 19:26:56 GMT内容类型:应用程序/ JSON传输 - 编码:Chunked Connection:Close Access-Control-Alliz-原点:* {“勾选”:{“仪器”:“aud_cad”,“时间”:“2017-09-06T19:26:54.304054z”,“出价”:0.97679,“ask”:0.97703}} {“心跳”:{“时间“:”2017-09-06T19:26:56.253091z“}} {”icket“:{”仪器“:”aud_cad“,”时间“:”2017-09-06T19:26:57.226918z“,”出价“:0.97678,”问“:0.97703}} {”勾选“:{”仪器“:”aud_cad“,”time“:”2017-09-06T19:26:58.226909z“,”出价“:0.97678,”问“:0.97705}} {”心跳“:{时间”:“2017-09-06T19:26:58.720409z”}} {ick“:{”仪器“:”aud_cad“,”time“:”2017-09-06T19:27:00.733194z“,”出价“:0.97679,”问“:0.97704}} {”心跳“:{”时间“:”2017-09-06T19:27:01.251202z“}} {”勾选“:{”仪器“:”aud_cad“,”时间“:”2017-09-06T19:27:01.757501z“,”出价“:0.9768,”问“:0.97706}} {”心跳“:{时间”:“2017-09-06T19:27:03.720469z”}}