WHOのCOVID-19データ(3)からの続き
WHOのCOVID-19統計のjsonデータの構造が変わったようで,scriptの出力に不具合が生じている。プログラミングが面倒である。これまでは,国・地域別のブロックの中に一連の時系列データが含まれていたところ,このたびは,時系列ブロックの中に一連の国・地域別データが並んでいる。前回よりもプログラムの構造が汚くなってしまった。日時データが通常の形式になっていたので,unix time を経由しなくても良いかと思ったが,そうは問屋が下さなかった。(注 \$ は $と読み替え)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#!/usr/bin/perl
# 4/24/2021 K. Koshigiri
# usage: json.pl 2021/04/24 3
# extract 3 day data from 2021/04/24
# original data = https://covid19.who.int/page-data/table/page-data.json
use Time::Local 'timelocal';
$tmp = "tmpx";
$in = "whox";
$out = "who-dat.csv";
$jsn = "https://covid19.who.int/page-data/table/page-data.json";
($sec, \$min, \$hour) = (0,0,0);
($year, \$month, \$day) = split '/', \$ARGV[0];
$epochtime = timelocal(\$sec, \$min, \$hour, \$day, \$month-1, \$year-1900)+32400;
system("lynx -source \$jsn | fsp -u > \$tmp");
open(OUT, ">\$in");
open(IN, "<\$tmp");
while(
s/],/],\n/g;
print OUT;
}
close(IN);
close(OUT);
open(OUT,">\$out");
print OUT "Date, Country Code, Region Code, Deaths, Cumulative Deaths, Deaths Last 7 Days, Deaths Last 7 Days Change, Deaths Per 100k, Confirmed, Cumulative Confirmed, Cases Last 7 Days,Cases Last 7 Days Change, Cases Per 100k, WkCasePop, WkDeathPop\n";
for ($i=0; \$i<\$ARGV[1]; \$i++) {
month += 1;
if($month < 10) {
$ym = "\$year-0\$month";
$ym = "\$year-\$month";
$dt = "\$ym-0\$day";
$dt = "\$ym-\$day";
while(
s/\]//g;
s/\[//g;
s/"rows"://g;
if(/"totals":/) {
if(/$dt/) {
$sw=1;
} else {
$sw=0;
}
}
if($sw==1 && /"[A-Z][A-Z]","[A-Z]{4,5}"/ ) {
print OUT "$dt,";
print OUT;
} elsif($sw==1 && /" ","[A-Z]{4,5}"/) {
print OUT "$dt,";
print OUT;
}
}
close(IN);
}
close(OUT);
0 件のコメント:
コメントを投稿