2020年12月9日水曜日

WHOのCOVID-19データ(1)

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);
}


0 件のコメント: