Downloading weather files from a server
3 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Hello
I am working on a project where i need to periodically download weather forecasts from a server. I have been experimenting with the urlread() and urlwrite() functions which is easy enough. The problem is that the url for the file includes date and time of submission. So i would like to download the most recent files.
an example url: http://dd.weatheroffice.ec.gc.ca/meteocode/ont/csv/2012-01-07T09-30-02Z_FPTO51.0_r1101_CC.csv
where the date and time portion changes. How can i specify a url such that i will get the most recent copy?
0 Commenti
Risposta accettata
Walter Roberson
il 8 Gen 2012
If you urlread() on http://dd.weatheroffice.ec.gc.ca/meteocode/ont/csv/ then you could pick out the most recent file.
2 Commenti
Abdul
il 9 Ago 2015
Modificato: Cedric
il 9 Ago 2015
I have worked on this and put the data in the separate matrices
close all, clear all, clc
%%download weather forecast data from server
current_files=urlread('http://dd.weatheroffice.ec.gc.ca/meteocode/ont/csv/');
relev_files=strfind(current_files,'FPTO51.0_r1101_TA.csv');
%for most recent file use last index in relev_files
ta_url=['http://dd.weatheroffice.ec.gc.ca/meteocode/ont/csv/',current_files(relev_files(1:end)-21:relev_files(1:end)+20)];
% ta_url=['http://dd.weatheroffice.ec.gc.ca/meteocode/ont/csv/',current_files(relev_files(1:end)-21:relev_files(1:end)+20)];
ta_data=urlread(ta_url)
%%put forecast data into vectors
clc
C = [strsplit(ta_data, '\n')]' ;
D = char(C(2:end-1));
for I = 1:length(D)
E = strsplit(D(I,:), '-');
year(I) = str2num(char(E(1,1)));
month(I) = str2num(char(E(1,2)));
F = char(E(1,3));
G = strsplit(F, 'T');
day(I) = str2num(char(G(1,1)));
H = char(G(1,2));
J = strsplit(H, ':');
hour(I) = str2num(char(J(1,1)));
min(I) = str2num(char(J(1,2)));
K = char(J(1,3));
L = strsplit(K, 'Z');
sec(I) = str2num(char(L(1,1)));
M = char(L(1,2));
N = strsplit(M, ',');
value(I) = str2num(char(N(1,2)));
end
% F = strsplit(D(1,:), 'T')
[year' month' day' hour' min' sec' value']
figure
t = datetime(year, month, day, hour, min, sec);
plot(t, value, '*')
hold on
plot(t, value, '-k', 'Linewidth', 2)
axis tight, grid minor
xlabel('Time')
ylabel('Temperature (°C)')
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Web Services in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!