主要内容

在图窗口中显示流数据

这个例子展示了如何自定义HTTPStringConsumer类- - -PricesStreamer-在MATLAB中显示来自一个假想网站的流数据®图窗口。要创建一个工作示例:

  • 识别一个URL,类似于:

    url = matlab.net.URI (' < URL > '“accountId”, < YOUR_ACCOUNT_ID >,“<名称>”“< >价值”);
  • 修改PricesStreamer.putData读取特定于web服务的数据

本主题描述了以下任务。有关在图形窗口中显示表格数据的信息,请参见场上

PricesStreamer

PricesStreamer.m的子类StringConsumer类的子类ContentConsumerPricesStreamer接收根据特定web服务提供的数据定制的流数据。在这个例子中,数据的结构是:

%数据包含一个或多个crlf分隔的JSON结构。每个结构都是一种格式:%{“心跳”=“时间戳”}% {"tick"="timestamp", "bid"= "bid", "ask"=ask}%,其中timestamp是GMT时间,bid和ask是数字。

MATLAB调用PricesStreamer.putData函数用于从服务器接收的每个数据块。该函数首先转换原始数据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长度= 0;其他的长度= obj.start@matlab.net.http.io.StringConsumer;obj。图=图(“CloseRequestFcn”, @obj.endit);obj.Figure.Position (4) = 550;obj.Figure.Position (2) = 50;obj。表=场上(obj。数字...“ColumnName”, {“时间”“收购”“问”},...“ColumnWidth”{130年,“汽车”“汽车”});obj.Table.Position (4) = 500;obj.Table.Data =细胞(0,3);obj。瘟疫= false;obj。HaveTick = false;结束结束结束方法函数[len,stop] = putData(obj, data)%数据包含一个或多个crlf分隔的JSON结构。每个结构都是一种格式:%{“心跳”=“时间戳”}% {"tick"="timestamp", "bid"= "bid", "ask"=ask}%,其中timestamp是GMT时间,bid和ask是数字。如果obj。Endit data = [];删除(obj.Figure);结束第一次= obj。CurrentLength + 1;(len,停止)= obj.putData@matlab.net.http.io.StringConsumer(数据);如果isempty(数据)| |停止如果ischar(数据)% data == "表示用户ctrl/c'ed,所以设置为obj。瘟疫= true;%删除数字在下一次关闭结束停止= true;其他的停止= false;去年= obj.CurrentLength;newData = obj.Response.Body.Data.extractBetween(第一个,最后一个);%在crlf分割字符串= strsplit (newData,“\ r \ n”);试一试cellfun (@obj。displayJSON,strings);e流(对JSON的错误:\ n % s < EOF > \ n”、数据);obj。瘟疫= true;重新抛出(e);结束结束结束函数displayJSON (obj, str)如果~ isempty (str)试一试val = jsondecode (str);e流(' JSON错误"%s":\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的幂滚动条的宽度增加15obj.Table.Position(3) = obj.Table.Extent(3) + 15;结束drawnow结束结束函数瘟疫(obj, ~ ~)% endit callback from close(obj.Figure)如果存在(“obj”“var”) & & (obj)是否是可用的。如果obj。瘟疫如果isvalid (obj.Figure)删除(obj.Figure);结束其他的obj。瘟疫= true;结束结束结束函数删除(obj)如果~isempty(obj.Figure) && isvalid(obj.Figure) delete(obj.Figure);结束结束结束结束函数时间= cvtime(时间)%格式化显示的时间数据时间= datetime(时间、“InputFormat”“yyyy-MM-dd“T”HH: mm: ss。年代“Z”“时区”“格林尼治时间”);时间。时区=“本地”;时间= char(时间,“dd-MMM-yyyy HH: mm: ss。年代);结束

地图数据MATLAB场上对象

通过从web服务读取API信息来确定用例的数据结构。本示例的数据包含一个或多个crlf分离的JSON结构。结构的格式如下所示,其中时间戳是格林尼治时间和报价是数字。

  • {“心跳”=“时间戳”}

  • {“滴答”=“时间戳”、“投标”=报价,“问”=问}

要读取此特定格式,请重写putData方法。下面的陈述来自PricesStreamer类使用StringConsumer.putData读取下一个缓冲区,然后选择JSON字符串。

第一次= obj。CurrentLength + 1;(len,停止)= obj.putData@matlab.net.http.io.StringConsumer(数据);去年= obj.CurrentLength;newData = obj.Response.Body.Data.extractBetween(第一个,最后一个);%在crlf分割字符串= strsplit (newData,“\ r \ n”);

以JSON格式显示数据

下面的陈述来自displayJSON函数单独处理JSON蜱虫心跳结构。一个helper函数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 (' < URL > '“accountId”, < YOUR_ACCOUNT_ID >,“<名称>”“< >价值”);authInfo = matlab.net.http.AuthInfo (matlab.net.http.AuthenticationScheme.Bearer,...“编码”' < YOUR_CREDENTIALS >”);房颤= matlab.net.http.field.AuthorizationField (“授权”authInfo);r = matlab.net.http.RequestMessage (“得到”、af);消费者= PricesStreamer;% SavePayload设置为保留所有结果-对调试很有用(职责、要求、嘘]= r.send (url, matlab.net.http.HTTPOptions (“SavePayload”,真的),消费者);%显示调试结果显示(职责)

下面是来自web服务的数据发送数据的示例将数据映射到MATLAB适合的对象

HTTP/1.1 200 Ok Server: openrest /1.9.15.1 Date: Wed, 06 Sep 2017 19:26:56 GMT Content-Type: application/json Transfer-Encoding: chunked Connection: close Access-Control-Allow-Origin:*{“滴答”:{“仪器”:“AUD_CAD”,“时间”:“2017 - 09 - 06 - t19:26:54.304054z”,“收购”:0.97679,“问”:0.97703}}{“心跳”:{“时间”:“2017 - 09 - 06 - t19:26:56.253091z”}}{“滴答”:{“仪器”:“AUD_CAD”,“时间”:“2017 - 09 - 06 - t19:26:57.226918z”,“收购”:0.97678,“问”:0.97703}}{“滴答”:{“仪器”:“AUD_CAD”,“时间”:“2017 - 09 - 06 - t19:26:58.226909z”,“收购”:0.97678,“问”:0.97705}}{“心跳”:{“时间”:“2017 - 09 - 06 - t19:26:58.720409z”}}{“滴答”:{“仪器”:“AUD_CAD”,“时间”:“2017 - 09 - 06 - t19:27:00.733194z”,“收购”:0.97679,“问”:0.97704}}{“心跳”:{“时间”:“2017 - 09 - 06 - t19:27:01.251202z "}}{“滴答”:{“仪器”:“AUD_CAD”,“时间”:“2017 - 09 - 06 - t19:27:01.757501z”,“收购”:0.9768,“问”:0.97706}}{“心跳”:{“时间”:“2017 - 09 - 06 - t19:27:03.720469z "}}

另请参阅

|