i want to read a url in MATLAB through webread function

11 views (last 30 days)
i am trying to read url of AEMO(https://aemo.com.au/Energy-systems/Electricity/National-Electricity-Market-NEM/Data-NEM/Data-Dashboard-NEM) in a csv format of Price(Spot Price ($/MWh) ) and Demand(Scheduled Demand (MW) ) columns. i tried different ways to read it through webread function in MATALB with url and query parameters(query name and query values). i need guidance how to read these columns through webread funtion.
  1 Comment
Muhammad Hussain
Muhammad Hussain on 16 Feb 2023
thanks alot Askic V for your guidance, this will definetly solve the issue i was facing.

Sign in to comment.

Accepted Answer

Askic V
Askic V on 15 Feb 2023
Edited: Askic V on 15 Feb 2023
You need actually to use function webwrite, so you can write a POST request to the web server, and then to examine the response.
csv file is actually generated only when user click on the symbol for download button and this file is generated inside the browser itself.
So, your best bet is to obtain the data and then process it somehow.
What I managed to do is the following:
%%
clear
clc
close all
% url for POST request
url = 'https://visualisations.aemo.com.au/aemo/apps/api/report/5MIN';
% body for POST request
body = '{"timeScale": ["30MIN"]}';
% make response
response = webwrite(url, body);
% processing results
resp_period_type = {response.x5MIN.PERIODTYPE};
ind_actual = find(strcmp(resp_period_type,'ACTUAL'));
ind_forecast = find(strcmp(resp_period_type,'FORECAST'));
% datetime
resp_date_time = {response.x5MIN.SETTLEMENTDATE};
date_time_arr = datetime(strrep(resp_date_time,'T',' '),'InputFormat','yyyy-MM-dd HH:mm:ss');
resp_date_time_actual = date_time_arr(ind_actual);
resp_date_time_forecast = date_time_arr(ind_forecast);
% prices
resp_spot_price = [response.x5MIN.RRP];
resp_spot_price_actual = resp_spot_price(ind_actual);
resp_spot_price_forecast = resp_spot_price(ind_forecast);
% demand
resp_sch_demand = [response.x5MIN.TOTALDEMAND];
resp_sch_demand_actual = resp_sch_demand(ind_actual);
resp_sch_demand_forecast = resp_sch_demand(ind_forecast);
subplot(211)
plot(resp_date_time_actual, resp_spot_price_actual)
title('Actual')
subplot(212)
plot(resp_date_time_forecast, resp_spot_price_forecast)
title('Forecast')
I believe this code will be useful to you. This is the data that is returned, I have randomly checked 2 or three values at particular date and time and it seems to be a match to those values in the csv file, even though more data is returned in ths request.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!