Effacer les filtres
Effacer les filtres

Webread returns empty stucture, but urlread works,

4 vues (au cours des 30 derniers jours)
YoungMin
YoungMin le 12 Oct 2023
Commenté : YoungMin le 12 Oct 2023
Hi everyone, i have some issue about Webread
this is my code,
key = 'ZgFJoT6d3VEh1qz%2Fv%2Bj6SFAuefvQF%2BlboVR1njEK%2B8LcYTYddXSFE57fmAukUXPovujQLo9Fy05EvPpaGpH0ag%3D%3D';
baseurl_estate = 'http://apis.data.go.kr/1611000/nsdi/IndvdLandPriceService/attr/getIndvdLandPriceAttr?ServiceKey=';
start_year = '2020';
format = 'json';
num_of_row = '20';
for i = 1:height(stn_data)
url_estate = strcat(baseurl_estate,key,'&pnu=',stn_data.pnu(i,1:end),'&numOfRows=', num_of_row,'&format=',format,'&stdrYear=',start_year);
temp_estate = urlread(url_estate);
temp_estate = jsondecode(temp_estate);
for j = 1:19
if ~isempty(temp_estate.indvdLandPrices.field)
break;
else
url_estate = strcat(baseurl_estate,key,'&pnu=',stn_data.pnu(i,1:end-j),'&numOfRows=', num_of_row,'&format=',format,'&stdrYear=',start_year);
temp_estate = urlread(url_estate);
temp_estate = jsondecode(temp_estate);
end
end
if j == 19
fprintf("%d 에러발생",i)
cnt = cnt+1;
end
stn_estate(i,1) = temp_estate;
clear -regexp ^temp
i
end
In this code, urlread is works well, i mean it can return data
but, when i chagne my code use webread, webread doesn't return value.Webreads return an empty struct with no fields.
I want use webread cause when i use urlread and json, sometimes error was happened
'JSON syntax error at line 1, column 1 (character 1): expected value but found '<'.'
% function stn_data = make_estate(stn_data)
% get estate
% from 공공데이터 포털
% 지번마지막 자리로 결과가 안나오면 뒤에서부터 하나씩 제거
% if when this code delete 5th jibun that is error!!!
key = 'ZgFJoT6d3VEh1qz%2Fv%2Bj6SFAuefvQF%2BlboVR1njEK%2B8LcYTYddXSFE57fmAukUXPovujQLo9Fy05EvPpaGpH0ag%3D%3D';
baseurl_estate = 'http://apis.data.go.kr/1611000/nsdi/IndvdLandPriceService/attr/getIndvdLandPriceAttr?ServiceKey=';
start_year = '2020';
format = 'xml';
num_of_row = '20';
cnt = 0;
% conflict = '1';
% options = weboptions('Timeout', inf,'ContentType','json');
for i = 1:1
url_estate = strcat(baseurl_estate,key,'&pnu=',stn_data.pnu(i,1:end),'&numOfRows=', num_of_row,'&format=',format,'&stdrYear=',start_year);
temp_estate = webread(url_estate);
for j = 1:19
if ~isempty(temp_estate.indvdLandPrices.field)
break;
else
url_estate = strcat(baseurl_estate,key,'&pnu=',stn_data.pnu(i,1:end-j),'&numOfRows=', num_of_row,'&format=',format,'&stdrYear=',start_year);
temp_estate = urlread(url_estate);
temp_estate = jsondecode(temp_estate);
end
end
if j == 19
fprintf("%d 에러발생",i)
cnt = cnt+1;
end
stn_estate(i,1) = temp_estate;
clear -regexp ^temp
i
end
if ~(cnt == 0)
fprintf("%d 에러 횟수",cnt)
end
estate = arrayfun(@(x) x.indvdLandPrices.field(1).pblntfPclnd,stn_estate,'UniformOutput',false);
% stn_new = stn_data(1:100,:);
stn_data.estate = estate;
  2 commentaires
Angelo Yeo
Angelo Yeo le 12 Oct 2023
Can you share "stn_data" as "mat"?
YoungMin
YoungMin le 12 Oct 2023
i upload stn_data mat file

Connectez-vous pour commenter.

Réponse acceptée

Angelo Yeo
Angelo Yeo le 12 Oct 2023
The script below uses webread instead of urlread. The point here is to use weboptions and set the ContentType to text.
load("save_before_estate.mat")
key = 'ZgFJoT6d3VEh1qz%2Fv%2Bj6SFAuefvQF%2BlboVR1njEK%2B8LcYTYddXSFE57fmAukUXPovujQLo9Fy05EvPpaGpH0ag%3D%3D';
baseurl_estate = 'http://apis.data.go.kr/1611000/nsdi/IndvdLandPriceService/attr/getIndvdLandPriceAttr?ServiceKey=';
start_year = '2020';
format = 'json';
num_of_row = '20';
for i = 1:height(stn_data)
url_estate = strcat(baseurl_estate,key, ...
'&pnu=',stn_data.pnu(i,1:end),'&numOfRows=', num_of_row,'&format=',format,'&stdrYear=',start_year);
% temp_estate = urlread(url_estate)
options = weboptions('ContentType','text'); % I found the API returns json in text format.
temp_estate = webread(url_estate, options)
temp_estate = jsondecode(temp_estate);
for j = 1:19
if ~isempty(temp_estate.indvdLandPrices.field)
break;
else
url_estate = strcat(baseurl_estate,key,'&pnu=',stn_data.pnu(i,1:end-j),'&numOfRows=', num_of_row,'&format=',format,'&stdrYear=',start_year);
temp_estate = urlread(url_estate);
temp_estate = jsondecode(temp_estate);
end
end
if j == 19
fprintf("%d 에러발생",i)
cnt = cnt+1;
end
stn_estate(i,1) = temp_estate;
clear -regexp ^temp
i
end
  1 commentaire
YoungMin
YoungMin le 12 Oct 2023
Wow! Thank you for your service

Connectez-vous pour commenter.

Plus de réponses (0)

Produits


Version

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by