無線局等情報検索の更新タイミング

当直のおじさんのリターンキーを押すタイミングで決まる...のではなく,基本23:00,(更新量が多いと?)遅れることもある――と結論づけました.

11月末のシステムの更改以降,2か月間にわたって調査しました.
ただし途中,「更新がない日」も多かったです.
おそらく一斉再免許日だった12/1を迎えての処理が追いつかなかったためでしょう.20230128mjk-timing.jpg

えらく遅れた1/16は,「2回」更新されています:
(1) 13:42 UTC(グラフの外)
(2) 14:33 UTC



攻め方

22:30~00:30に,1分ごとにF5攻撃API経由でツンツンして,もっともマイルドな「件数」――アマチュア局の総局数――を取得し,記録していきます.
変化が見られた時刻(の1分前)を,更新時刻とみなします.

この方式の欠点としましては,たまたま総局数が不変ですと...検知できません.

まさかそんなことは起きないだろう!と高をくくっていたら...起こりましたorz:
・1/11(水)深夜更新 372677件
・1/12(木)深夜更新 372677件(関東で+29・九州で- 5・北海道で -24)



検索式

「アマチュア局の総件数を.csvで」
https://www.tele.soumu.go.jp/musen/num?ST=1&OF=1&OW=AT



応答例

左端は行の番目.
お目当てのデータは,25番目(本文としての1行目)と,26番目(同 2行目)に.

0-HTTP/1.1 200 200
1-Cache-Control: max-age=0,must-revalidate
2-Connection: Keep-Alive
3-Date: Thu, 24 Nov 2022 09:23:21 GMT
4-Pragma: no-cache
5-Server: Apache
6-Content-Length: 32
7-Content-Type: text/csv;charset=UTF-8
8-Access-Control-Allow-Origin: *
9-Client-Date: Thu, 24 Nov 2022 09:23:22 GMT
10-Client-Peer: 2001:240:166:〓::〓:443
11-Client-Response-Num: 1
12-Client-SSL-Cert-Issuer: /C=JP/O=SECOM Trust Systems CO.,LTD./CN=SECOM Passport for Web SR 3.0 CA
13-Client-SSL-Cert-Subject: /C=JP/ST=TOKYO/L=CHIYODA-KU/O=Ministry of Internal Affairs and Communications/CN=www.tele.soumu.go.jp
14-Client-SSL-Cipher: ECDHE-RSA-AES128-GCM-SHA256
15-Client-SSL-Socket-Class: IO::Socket::SSL
16-Client-SSL-Version: TLSv1_2
17-Keep-Alive: timeout=15, max=97
18-Set-Cookie: JSESSIONID=F31180DD6646DFF7BE78A1B16DF60551; Path=/musen; HttpOnly; Secure
19-Set-Cookie: citrix_ns_id=E+fJ+DYz7ubeKyaEooULFc+a7dU0000; Domain=.tele.soumu.go.jp; Path=/; HttpOnly
20-Strict-Transport-Security: max-age=10886400
21-X-Content-Type-Options: nosniff
22-X-Frame-Options: SAMEORIGIN
23-X-XSS-Protection: 1; mode=block
24-
25-"2022-11-22","373778"
26-"373778"

応答の本文には日付も含まれていますが,使わずに捨てて,マシンの時計から拾います.
これ「取得日の2日前」で自動設定されているよう.

件数(局数)は2か所に現れています.
抽出ロジックの容易な,最終行のほうを使います.


 

スクリプト

以下をcrontabで1分おきに動かせばOK!
#!/usr/bin/perl -w

# JSTだと日付を跨がってしまうので,UTC(GMT)にする
$date_hour = gmtime;

# 「一桁の日付」対策
# Wed Apr 29 15:24:10 2020
# Fri Feb 4 21:34:55 2022
$date_hour =~ s/ / /;

($yobi, $month, $day, $hour, $year) = split (/ /, $date_hour);
($hh, $mm, $ss) = split (/\:/, $hour);

$month =~ s/Jan/01/;
$month =~ s/Feb/02/;
$month =~ s/Mar/03/;
$month =~ s/Apr/04/;
$month =~ s/May/05/;
$month =~ s/Jun/06/;
$month =~ s/Jul/07/;
$month =~ s/Aug/08/;
$month =~ s/Sep/09/;
$month =~ s/Oct/10/;
$month =~ s/Nov/11/;
$month =~ s/Dec/12/;

$day =~ s/^1$/01/;
$day =~ s/^2$/02/;
$day =~ s/^3$/03/;
$day =~ s/^4$/04/;
$day =~ s/^5$/05/;
$day =~ s/^6$/06/;
$day =~ s/^7$/07/;
$day =~ s/^8$/08/;
$day =~ s/^9$/09/;

$hi = $year."-".$month."-".$day;

#日ごとにファイルを分けてディレクトリmjk下に
open (OUTFILE, ">>mjk\/mjk-".$hi."\.csv") || die "cannot write\n";


use LWP::UserAgent;
use HTTP::Request::Common;

# おまじない「アマチュア局の,総件数を,.csvで」
$request = GET('https://www.tele.soumu.go.jp/musen/num?ST=1&OF=1&OW=AT');

$ua = LWP::UserAgent -> new;
$res = $ua -> request( $request ) -> as_string;

# 応答例
# "2022-11-22","373778"
# "373778" (← $gyo-1)

@yoso = split /\n/,$res;
$gyo = split /\n/,$res;

$yoso[$gyo-1] =~ s/\\n//gs;
$yoso[$gyo-1] =~ s/\"//gs;

print OUTFILE $hi."\,".$hour."\,".$yoso[$gyo-1]."\,\n";
close OUTFILE;
exit;



以下,調査結果

2022-11-24,14:00:01,373778,
2022-11-24,14:01:01,373765,

2022-11-25,14:00:01,373765,
2022-11-25,14:01:01,373710,

---- 更改 ----

2022-11-28,14:12:01,373710,
2022-11-28,14:13:01,373800,

2022-11-29,14:00:01,373800,
2022-11-29,14:01:01,373617,

2022-11-30,14:00:01,373617,
2022-11-30,14:01:01,373626,

---- 長期更新停止 ----

2022-12-19,14:25:01,373626,
2022-12-19,14:26:01,373091,

---- 更改 ----

2022-12-21,14:02:01,373091,
2022-12-21,14:03:02,372994,

2022-12-22,13:59:01,372994,
2022-12-22,14:00:01,372974,

2022-12-23,14:00:01,372974,
2022-12-23,14:01:01,372927,

2022-12-26,14:13:02,372927,
2022-12-26,14:14:02,372975,

2022-12-27,14:00:01,372975,
2022-12-27,14:01:01,372970,

2022-12-28,14:00:01,372970,
2022-12-28,14:01:01,372839,

2023-01-05,14:12:01,372839,
2023-01-05,14:13:01,372914,

2023-01-06,14:02:01,372914,
2023-01-06,14:03:02,372853,

2023-01-10,14:12:01,372853,
2023-01-10,14:13:01,372881,

2023-01-11,14:00:01,372881,
2023-01-11,14:01:01,372677,

---- 更新後も同数で検知できず ----

2023-01-13,14:00:01,372677,
2023-01-13,14:01:01,372701,

2023-01-16,13:42:01,372701,
2023-01-16,13:43:02,372700,
2023-01-16,14:33:01,372700,
2023-01-16,14:34:02,372754,

2023-01-17,14:00:01,372754,
2023-01-17,14:01:02,372584,

2023-01-18,14:00:01,372584,
2023-01-18,14:01:01,372501,

2023-01-19,13:59:01,372501,
2023-01-19,14:00:01,372497,

2023-01-20,13:59:01,372497,
2023-01-20,14:00:01,372483,

2023-01-23,14:12:01,372483,
2023-01-23,14:13:01,372506,

2023-01-24,13:59:01,372506,
2023-01-24,14:00:01,372450,

2023-01-25,14:00:02,372450,
2023-01-25,14:01:02,372418,

2023-01-26,14:00:02,372418,
2023-01-26,14:01:02,372387,

2023-01-27,13:59:01,372387,
2023-01-27,14:00:01,372371,

この記事へのコメント