2020年9月9日水曜日

首相動静(2)

 昨日に引き続いて時事通信サイトの首相動静ページのダウンロードプログラムを整える。過去月分は数年前まで同じフォーマットで保存されているようだ。当月分だけが別のURLに置かれている。いずれにせよ,月ごとにまとめて取り出すほうがよろしいので次のようにする。

(1) 与えるのは年yと月mのデータ (2) これからy−m.txtという保存用のファイルを指定する。 (3) perlのTime::Piece モジュールを用いて当月の最終日を得る。(4) これを使うと,時事通信のURL名を指定できる。ファイル名は 202008_01 が8月31日 202008_31が8月1日と逆順になっていることに注意が必要。(5) 1桁の日付は0を補完する必要がある。(6) ファイルへのアクセスはlynx -source を用いるが,これを日付について繰り返えす。結果はコード変換した後にテンポラリファイルに保存しておく。(7) これから,首相動静の内容コンテンツを取り出す。同じものが三重に存在するので1つ目だけを残して,さきほどの保存用ファイルにアペンドしていく。

なお,漢字コードはEUCを仮定しているため,このプログラム自身もEUCで書いてある。結果をmacのデスクトップ上のJEditで読むと漢字コードが毎回おかしいといわれる。なにか変なコードが混じってくるのかもしれない。EUCに指定した上で,UTF-16で保存してみた。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#!/usr/local/bin/perl
#<!- -------------------------------------- -->
# shusho dousei from jiji dot com news
# 09/09/2020 K. Koshigiri
# % ./shusho.pl year month -> year-month.txt
# date = 01...31 etc. (dates of month) - d
# get data from https://www.jiji.com/
#<!- -------------------------------------- -->

use Time::Piece;
\$tmp="tmpx";
\$r="https://www.jiji.com/jc/v2?id=ssds";
\$y=@ARGV[0];
\$m=@ARGV[1];
\$g=\$y."-".\$m;
open(OUT, ">> \$g");

\$t = Time::Piece->strptime(\$g."-01",'%Y-%m-%d');
\$mld = \$t->month_last_day;
print "今月末日は$mld日\n";

for(
\$k = 1;\$k <= \$mld;\$k++) {
\$tmpk = \$tmp.\$k;

\$kd = \$mld - \$k + 1;
if( \$kd < 10) {
 \$jd="0".\$kd;
};
else {
 \$jd = \$kd;
}
\$f=\$r.\$y.\$m."_".\$jd;
print "\$y年\$m月\$k日 \$f \n";

open(HP, \$tmp);
system("lynx -source \$f | fsp -u | nkf -e > \$tmp");
close(HP);

\$i=0;
open(IN, \$tmp);
print OUT "\n \$y年\$m月\$k日 (\$f) \n";
while(<IN>){
 \$a="";
 if(/br/ && /午/ && !/href/) {
  if(/(<p>.*)/) {
   \$i++;\$a=\$1;
   if(\$i eq 1) {
    print OUT "\$a \n";
   }
  }
 }
}
close(IN);
}
close(OUT);
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

0 件のコメント: