主要内容

在图窗口中显示流数据

此示例显示如何自定义HTTPstringConsumer.类- - -PricesStreamer- 从Matlab中显示来自假设网站的流式数据®图窗口。要创建一个工作示例:

  • 识别一个URL,类似于:

    URL = MATLAB.NET.URI(''“accountId”“<名称>”'<值>');
  • 调整pricesstreamer.putdata.putdata.put.读取特定于web服务的数据

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

PricesStreamer

Pricesstreamer.m.是一个子类stringConsumer.班级,这是一个子类ContentConsumerPricesStreamer接收到特定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”);

以JSON格式显示数据

下面的陈述来自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”}}

另请参阅

|