WHOがまとめている,COVID-19についての各地域の感染者数や死亡者数の経時データは以前はダッシュボードのCSVファイルとしてアクセスできたが,今は,一日分のCSVファイルしか提供されていない。経時データはグラフの形で見ることができる。しかし,JSON形式の経時データにはアクセスできるので,これから必要な情報を取り出すperlスクリプトを作った。
古いperlの知識しかないので,動作が思ったとおりではないけれど,とりあえず第1段階の結果が出た。引き続きプログラムを精査していきたいが・・・。
#!/usr/local/bin/perl# 12/10/2020 K. Koshigiri
# usage: json.pl 2020/12/05 5
# above sample extracts 5 day data from 2020/12/05
# 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;
open(IN, "<\$tmp");
system("lynx -source \$jsn | fsp -u > \$tmp");
open(OUT, ">\$in");
while(
s/],/],\n/g;
print OUT;
}
close(OUT);
close(IN);
for (\$i=0; \$i<\$ARGV[1]; \$i++) {
\$ut=\$epochtime+86400*\$i;
print "\$ut\n";
open(IN, "<\$in");
open(OUT,">\$out");
while(
s/\]//g;
s/\[//g;
if(/Country.*"value":"(.*?)"/) {
$ct=$1;
print OUT "$ct,";
}
if(/$ut/) {
print OUT;
}
}
close(OUT);
close(IN);
}