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

エリアごとの収録範囲の変化をまとめました.「変化があった日」のみを示します.
・APIでの「lastUpdateDate」の切り替わり
 午前0時のよう.「閲覧した日-2日」で自動設定されているっぽい.
・実際のデータの載せ替え
 23:00が軸のよう.毎30分に確認するようにしました.「★」印の総通が変動しています.
参照件数1234567890JR6
1/7(月)417096~平30.12.8
1/8(火)416933~平31.1.4
1/10(木)416499~平31.1.7
1/11(金)416500平26.1.8~平31.1.7平26.1.8~平31.1.7平26.1.5~平31.1.4平26.1.9~平31.1.7平26.1.9~平31.1.8平25.12.9~平30.12.8平25.12.9~平30.12.8平25.12.9~平30.12.5平25.12.13~平30.12.6平26.1.8~平31.1.7平26.1.7~平30.12.27
1/12(土)416379平26.1.8~平31.1.7平26.1.8~平31.1.7平26.1.5~平31.1.4平26.1.9~平31.1.7平26.1.9~平31.1.8平25.12.9~平30.12.8平25.12.9~平30.12.8平26.1.10~平31.1.9
平25.12.13~平30.12.6平26.1.8~平31.1.7平26.1.7~平30.12.27
1/15(火)416316平26.1.8~平31.1.7平26.1.8~平31.1.7平26.1.5~平31.1.4平26.1.9~平31.1.7平26.1.9~平31.1.8平25.12.9~平30.12.8平26.1.5~平30.12.28
平26.1.10~平31.1.9平25.12.13~平30.12.6平26.1.8~平31.1.7平26.1.7~平30.12.27
1/17(木)
12:00
416218平26.1.8~平31.1.7平26.1.8~平31.1.7平26.1.13~平31.1.11
平26.1.9~平31.1.7平26.1.9~平31.1.8平25.12.9~平30.12.8平26.1.12~平31.1.11
平26.1.13~平31.1.11
平25.12.13~平30.12.6平26.1.8~平31.1.7平26.1.7~平30.12.27
1/18(金)
23:00
415911平26.1.17~平31.1.16
平26.1.16~平31.1.15
平26.1.13~平31.1.11平26.1.19~平31.1.16
平26.1.17~平31.1.16
平25.12.9~平30.12.8平26.1.12~平31.1.11平26.1.17~平31.1.16
平25.12.13~平30.12.6平26.1.8~平31.1.7平26.1.17~平31.1.15
1/21(月)
23:00
415908平26.1.17~平31.1.16平26.1.16~平31.1.15平26.1.13~平31.1.11平26.1.19~平31.1.16平26.1.17~平31.1.16平25.12.9~平30.12.8平26.1.12~平31.1.11平26.1.18~平31.1.17
平25.12.13~平30.12.6平26.1.8~平31.1.7平26.1.19~平31.1.17
1/22(火)
23:00
415804平26.1.17~平31.1.16平26.1.19~平31.1.18
平26.1.19~平31.1.18
平26.1.19~平31.1.16平26.1.17~平31.1.16平25.12.9~平30.12.8平26.1.19~平31.1.18
平26.1.20~平31.1.18
平25.12.13~平30.12.6平26.1.19~平31.1.18
平26.1.19~平31.1.17
1/23(水)
23:00
415757平26.1.22~平31.1.21
平26.1.19~平31.1.18平26.1.19~平31.1.18平26.1.19~平31.1.16平26.1.17~平31.1.16平25.12.9~平30.12.8平26.1.19~平31.1.18平26.1.20~平31.1.18平25.12.13~平30.12.6平26.1.19~平31.1.18平26.1.19~平31.1.17
1/25(金)
23:00
415522平26.1.23~平31.1.22
平26.1.19~平31.1.18平26.1.19~平31.1.18平26.1.19~平31.1.16平26.1.17~平31.1.16平26.1.19~平31.1.17
平26.1.19~平31.1.18平26.1.22~平31.1.21
平26.1.14~平31.1.10
平26.1.19~平31.1.18平26.1.24~平31.1.23
1/29(火)
00:00
415525平26.1.23~平31.1.22平26.1.19~平31.1.18平26.1.19~平31.1.18平26.1.19~平31.1.16平26.1.25~平31.1.24
平26.1.19~平31.1.17平26.1.19~平31.1.18平26.1.22~平31.1.21平26.1.23~平31.1.21
平26.1.19~平31.1.18平26.1.24~平31.1.23
1/29(火)
23:00
415425平26.1.23~平31.1.22平26.1.19~平31.1.18平26.1.26~平31.1.25
平26.1.26~平31.1.25
平26.1.25~平31.1.24平26.1.19~平31.1.17平26.1.19~平31.1.18平26.1.26~平31.1.25
平26.1.23~平31.1.21平26.1.19~平31.1.18平26.1.24~平31.1.23
1/30(水)
23:00
415413平26.1.23~平31.1.22平26.1.19~平31.1.18平26.1.26~平31.1.25平26.1.26~平31.1.25平26.1.25~平31.1.24平26.1.19~平31.1.17平26.1.19~平31.1.18平26.1.29~平31.1.28
平26.1.23~平31.1.21平26.1.19~平31.1.18平26.1.24~平31.1.23
1/31(木)
23:00
415320平26.1.30~平31.1.29
平26.1.30~平31.1.29
平26.1.26~平31.1.25平26.1.26~平31.1.25平26.1.25~平31.1.24平26.1.19~平31.1.17平26.1.19~平31.1.18平26.2.2~平31.1.29
平26.1.23~平31.1.21平26.1.19~平31.1.18平26.2.4~平31.1.28



#!/usr/bin/perl -w

# open DEBUG, ">debug.txt" || die "cannot open debug.txt\n";

##### とりあえず1回取得して,「日付時刻(ファイル名に流用)」「総件数」を割り出し

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

# https://www.tele.soumu.go.jp/musen/SearchServlet?IT=A&HZ=3&DFY=2018&DFM=11&DFD=16&DTY=2019&DTM=01&DTD=16&SelectID=1&SelectOW=01&DC=100&SK=4&pageID=3&SC=1&CONFIRM=1

$request = GET('https://www.tele.soumu.go.jp/musen/SearchServlet?SK=2&DC=100&SC=1&pageID=3&CONFIRM=0&SelectID=1&SelectOW=01#result');

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

@yoso = split /\n/,$res;
# $gyo = split /\n/,$res;
# print "gyo - ".$gyo."\n";
# print OUTFILE "gyo - ".$gyo."\n";

#$q = 0;
#while ($q < $gyo) {
# print "$q-".$yoso[$q]."\n";
# print DEBUG "$q-".$yoso[$q]."\n";
# $q++;
#}

# 3-Date: Wed, 09 Jan 2019 12:15:13 GMT<BR>

($title, $yobi, $day, $month, $year, $time, $zone) = split /\s/,$yoso[3];

$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/;
($hour, $min, $sec) = split /\:/,$time;

$asof = $year.$month.$day."-".$hour.$min;
$filename = "kikan\/kikan-".$asof."\.csv";
# print " filename =",$filename,"\n";
open (OUTFILE, ">$filename") || die "cannot write\n";

# 477-検索件数: <b>416316件</b>  →  <a href="./SearchServlet?SelectID=1&SelectOW=01&DC=100&SK=2&pageID=3&SC=1&CONFIRM=1#result">この結果を表示する</a><BR>

$i = 450;
while ($i <= 550) {
$_ = $yoso[$i];
chomp;
chomp;
if (/検索件数:/) {
# print $_."\n";
($dummy1, $kensu, $dummy2) = split /b\>/,$_;
$kensu =~ s/件\<\///gs;
print "件数:".$kensu."(".$asof." UTC)\n";
print OUTFILE "件数:".$kensu."(".$asof." UTC)\n";
last;
}
$i++;
}

#### 総通ごとループ

($area[1],$area[2],$area[3],$area[4],$area[5]) = ("A","C","E","F","G");
($area[6],$area[7],$area[8],$area[9],$area[10]) = ("H","I","J","D","B");
$area[11] = "O";

$n = 1;
while ($n <= 11) {

print "AREA-".$n."\n";

#### ######## 期初検索 ########
# 「6年前の応当日~5年前の応当日」の免許の局を,「免許日順」で検索
# 1番目の局の免許日を取得
# 掲載までに最低2日間の遅延があることを活用
# UTCのままで強行
# 閏年対処は別途必要
# 「応当日以前だと存在ゼロ」でエラーが発生~「$month + 1」化

$dfy = $year - 6;
$dfm = $month;
$dfd = $day;
$dty = $year - 5;
$dtm = $month + 1;
$dtd = $day;

if ($dtm == 13) {
$dtm = 1;
$dty++;
}
elsif ($dtm == 2) {
if ($day >= 29) {
$dtd = 28;
}
}
elsif ($dtm == 4) {
if ($day == 31) {
$dtd = 30;
}
}
elsif ($dtm == 6) {
if ($day == 31) {
$dtd = 30;
}
}
elsif ($dtm == 9) {
if ($day == 31) {
$dtd = 30;
}
}
elsif ($dtm == 11) {
if ($day == 31) {
$dtd = 30;
}
}

# スタートカウンタは1(1局目=最古の局から表示)
$sc = 1;

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

# https://www.tele.soumu.go.jp/musen/SearchServlet?SC=1&pageID=3&SelectID=1&CONFIRM=0&SelectOW=01&IT=O&HC=&HV=&FF=&TF=&HZ=3&NA=&MA=&DFY=2013&DFM=01&DFD=16&DTY=2014&DTM=02&DTD=16&SK=4&DC=100

$request = GET('https://www.tele.soumu.go.jp/musen/SearchServlet?SC='.$sc.'&pageID=3&SelectID=1&CONFIRM=0&SelectOW=01&IT='.$area[$n].'&HC=&HV=&FF=&TF=&HZ=3&NA=&MA=&DFY='.$dfy.'&DFM='.$dfm.'&DFD='.$dfd.'&DTY='.$dty.'&DTM='.$dtm.'&DTD='.$dtd.'&SK=4&DC=100');

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

@yoso = split /\n/,$res;
# $gyo = split /\n/,$res;
# print "gyo - ".$gyo."\n";
# print DEBUG "gyo - ".$gyo."\n";

# $q = 0;
# while ($q < $gyo) {
# # print "$q-".$yoso[$q]."\n";
# # print DEBUG "$q-".$yoso[$q]."\n";
# $q++;
# }

# 「名称」の表示行を探して,以降のサーチの起点(アンカー)に
# 注意:「名称」だけでサーチすると,「「電波利用料」の名称をかたった請求」の行も拾いかねない
# 525行目になってようやく現れることも
$i = 470;
while ($i <= 550) {
$_ = $yoso[$i];
if (/\>名称\</) {
$start = $i;
# print "START LINE-".$start."\|\n";
last;
}
$i++;
}

# 509-名称
# 520-550- <a href="./SearchServlet?pageID=4&IT=J&DFCD=0000232476&DD=1&styleNumber=50" target="_blank">一般社団法人日本アマチュア無線連盟(JR8WH)</a><BR>
# 527-557- 北海道札幌市北区<br><BR>
# 541-571- 平30.10.28<BR>

# 「名称の行+32行目が免許日(以降30行周期)」という特性を利用
# 「1番目の局の免許日」を取得
$menkyobi = $yoso[$start+32];
$menkyobi =~ s/\<br\>//gs;
$menkyobi =~ s/\t//gs;
print "免許日:".$menkyobi."\n";
print OUTFILE $n."\,".$area[$n]."\,".$menkyobi;

##### ######## 期末検索 ########
# 過去2か月間の免許の局を,「免許日順」で検索
# 複数ページにまたがる
# 「最終ページの最後の局」を探す必要:二段階アクション
# 掲載までに最低2日間の遅延があることを活用
# UTCのままで強行

$dfy = $year;
$dfm = $month -2;
$dfd = $day;
$dty = $year;
$dtm = $month;
$dtd = $day;

if ($dfm == -1) {
$dfy--;
$dfm = 11;
if ($day == 31) {
$dfd = 30;
}
}
elsif ($dfm == 0) {
$dfy--;
$dfm = 12;
}
elsif ($dfm == 2) {
if ($day >= 29) {
$dfd = 28;
}
}
elsif ($dfm == 6) {
if ($day == 31) {
$dfd = 30;
}
}

# とりあえず1ページ目を表示せよ:まずは1回取得の必要
$sc = 1;

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

$request = GET('https://www.tele.soumu.go.jp/musen/SearchServlet?SC='.$sc.'&pageID=3&SelectID=1&CONFIRM=0&SelectOW=01&IT='.$area[$n].'&HC=&HV=&FF=&TF=&HZ=3&NA=&MA=&DFY='.$dfy.'&DFM='.$dfm.'&DFD='.$dfd.'&DTY='.$dty.'&DTM='.$dtm.'&DTD='.$dtd.'&SK=4&DC=100');

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

@yoso = split /\n/,$res;
# $gyo = split /\n/,$res;
# print "gyo - ".$gyo."\n";
# print DEBUG "gyo - ".$gyo."\n";

# $q = 0;
# while ($q < $gyo) {
# print "$q-".$yoso[$q]."\n";
# print DEBUG "$q-".$yoso[$q]."\n";
# $q++;
#}

# 480- <B>検索結果件数</B>  1 &#65374; 500 / 813

# 件数(過去2か月間の免許の局の)を取得
$i = 470;
while ($i <= 550) {
$_ = $yoso[$i];
if (/検索結果件数/) {
s/\t//gs;
s/\<.+\>//gs;
s/\&nbsp;//gs;
s/ //gs;

# &#65374 = ~
($from, $kohan) = split(/&#65374\;/,$_);
($to, $total) = split(/\//,$kohan);
# print "TOTAL|".$from."|".$to."|".$total."\n";
# 「最終ページ」のためのスタートカウンタを特定: 例…101,201,...
$sc = int(($total-1)/100)*100+1;
last;
}
$i++;
}

# print "SC-".$sc."\n";
# 最終ページを取得 #################################
# 「過去2か月間の免許の局」の

# 関東の最終の例
# 「3318番目」なので,100局ごとに表示した「3301番目から始まるページの,18番目」の免許日の取得を目指す
# https://www.tele.soumu.go.jp/musen/SearchServlet?IT=A&HZ=3&DFY=2018&DFM=11&DFD=16&DTY=2019&DTM=01&DTD=16&SelectID=1&SelectOW=01&DC=100&SK=4&pageID=3&SC=3301&CONFIRM=1#result

$request = GET('https://www.tele.soumu.go.jp/musen/SearchServlet?SC='.$sc.'&pageID=3&SelectID=1&CONFIRM=0&SelectOW=01&IT='.$area[$n].'&HC=&HV=&FF=&TF=&HZ=3&NA=&MA=&DFY='.$dfy.'&DFM='.$dfm.'&DFD='.$dfd.'&DTY='.$dty.'&DTM='.$dtm.'&DTD='.$dtd.'&SK=4&SC='.$sc.'&DC=100');

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

@yoso = split /\n/,$res;
# $gyo = split /\n/,$res;
# print "gyo - ".$gyo."\n";
# print DEBUG "gyo - ".$gyo."\n";

# $q = 0;
# while ($q < $gyo) {
# print "$q-".$yoso[$q]."\n";
# print DEBUG "$q-".$yoso[$q]."\n";
# $q++;
# }

# 509-名称
# 520-550- <a href="./SearchServlet?pageID=4&IT=J&DFCD=0000232476&DD=1&styleNumber=50" target="_blank">一般社団法人日本アマチュア無線連盟(JR8WH)</a><BR>
# 527-557- 北海道札幌市北区<br><BR>
# 541-571- 平30.10.28<BR>

# 「名称」行の特定
$i = 470;
while ($i <= 550) {
$_ = $yoso[$i];
if (/\>名称\</) {
$start = $i;
# print "START LINE-".$start."\|\n";
last;
}
$i++;
}

# 最終掲載局の免許日を取得
# 「名称の行+32行目が免許日,以降30行周期」という特性を利用
# print "TOTAL-".$total."\|\n";
$menkyobi = $yoso[$start+32+($total-$sc)*30];
$menkyobi =~ s/\t//gs;
print "免許日:".$menkyobi."\n";
print OUTFILE "~".$menkyobi."\n";
$n++;
}
close OUTFILE;
# close DEBUG;

exit;

この記事へのコメント

この記事へのトラックバック