Created by
sironekotoro
last modified
| use strict;
use warnings;
use Encode qw/encode decode/; # 日本語入力・出力する時に利用
use HTTP::Tiny qw/new get/; # Webから情報を取ってくる時に利用
# 第31回サラリーマン川柳 ベスト11-100|サラリーマン川柳|第一生命保険株式会社
my $url
= 'https://event.dai-ichi-life.co.jp/company/senryu/archive/31-11-100.html';
# Webから情報を取ってくる
my $res = HTTP::Tiny->new()->get($url)->{content};
$res = decode( 'utf8', $res );
# 川柳の部分を正規表現を使って取得する
my @poem = $res =~ m|span class="rank">\d+</span>(.+)<span class="name2"|g;
# ルビを削除するサブルーチンを通す
@poem = delete_ruby(@poem);
# 川柳を3つの配列に分割する
my ( @kami, @naka, @simo );
for my $poem (@poem) {
my ( $kami, $naka, $simo ) = split /\s+/, $poem;
push @kami, $kami;
push @naka, $naka;
push @simo, $simo;
}
# 上の句、中の句、下の句の数が異なっている場合には分割失敗で
# プログラムを止める
if ( scalar @kami != scalar @naka && scalar @naka != scalar @simo ) {
die 'split fail!';
}
# ランダム生成された川柳を10句表示する
for ( 1 .. 10 ) {
my $random_senryu = join ' ',
(
$kami[ rand($#kami) ],
$naka[ rand($#naka) ],
$simo[ rand($#simo) ]
);
print encode( 'utf8', $random_senryu ) , "\n";
}
# ルビを削除するサブルーチン
sub delete_ruby {
my @poem = @_;
my @return_poem;
# ルビがふってある川柳については、ルビ部分を削除する
for my $poem (@poem) {
if ( $poem =~ /ruby/ ) {
# ルビのカッコ部を削除
$poem =~ s/(.+)//g;
# ルビのタグ部を削除
$poem =~ s/<.+?>//g;
}
push @return_poem, $poem;
}
return @return_poem;
}
|