版权所有,转载请注明出处:http://guangboo.org/2013/05/03/matlab-retrieve-data-from-server
Matlab的工具箱中提供了Bloomberg和Yahoo等数据接口,用于提取上市公司的行情数据,其实这些接口都是通过HTTP协议通信的,并且yahoo的接口是直接从yahoo门户网站提取的,只是需要在matlab端对htm进行解析。其核心主要是使用了Matlabd的urlread函数,那么通过该函数我们也可以从网络获取各种数据。
当前很多网站特别是社交网站都提供了API,供第三方开发,并且数据格式一般都支持XML和JSON两种,因此如果在matlab下面提取这样的数据的话,就需要对XML和JSON进行解析,这里有一个JSON的解析库:http://www.mathworks.com/matlabcentral/fileexchange/23393-another-json-parser。下面我们编写一个简单的fetch函数,来从一个URL中获取数据,该数据的格式为JSON。
function output = fetch(url, varargin)
if nargin < 2
% to do sth.
return;
end
pattern = varargin{1};
if ~ischar(pattern)
error('XXXX:InvalidParameter', 'The parameter pattern must be str.');
end
[json, status] = urlread(url, 'get', {'key', urlencode(pattern)});
if status == 1
try
output = parse_json(json);
catch exception
error('XXXX:InvalidJson', 'Request succussfuly! but the result is not valid json string.');
end
else
error(['Cant connect the site "' url ...
'", or connect timeout. If you connect internet with proxy, you should set the proxy server manually, see alse http://www.mathworks.cn/help/techdoc/matlab_env/bq37bb3-1.html#bq37bb3-3']);
end
主要代码就是:
[json, status] = urlread(url, 'get', {'key', urlencode(pattern)});
urlencode是对URL中的非ASCII吗字符进行编码。json为返回的JSON数据,status表示请求的结果状态,当status为1时表示获取数据成功,然后通过:
output = parse_json(json);
来将JSON格式转换成Matlab的数据类型。