昨日に引き続いて時事通信サイトの首相動静ページのダウンロードプログラムを整える。過去月分は数年前まで同じフォーマットで保存されているようだ。当月分だけが別の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) {
\$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>.*)/) {
};
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);
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
close(OUT);
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0 件のコメント:
コメントを投稿