私は何をやっている?スクリプトは、.txt(locations.txt)から文字列をロードし、それを6つの変数に分割します。各変数はコンマで区切られます。次に、アドレスがこれらの6つの値に依存するWebサイトにアクセスします。
何が問題ですか?location.txtの文字列の一部として、変数に文字としてスペースがある場合。スペースがある場合、正しいURLを取得しません。
入力ファイルは次のとおりです。
locations.txt = Heinz,Weber,Sierra Leone,1915,M,White
シエラレオネにはスペースがあるため、URLは次のとおりです。
https://familysearch.org/search/collection/results#count=20&query=%2Bgivenname%3AHeinz%20%2Bsurname%3AWeber%20%2Bbirth_place%3A%22Sierra%20Leone%22%20%2Bbirth_year%3A1914-1918~%20%2Bgender%3AM%20%2Brace%3AWhite&collection_id=2000219
しかし、それは以下のコードでは正しく処理されません。
私はパッケージを使用しています:
use strict;
use warnings;
use WWW::Mechanize::Firefox;
use HTML::TableExtract;
use Data::Dumper;
use LWP::UserAgent;
use JSON;
use CGI qw/escape/;
use HTML::DOM;
これがコードの始まりです:
open(my $l, 'locations26.txt') or die "Can't open locations: $!";
open(my $o, '>', 'out2.txt') or die "Can't open output file: $!";
while (my $line = <$l>) {
chomp $line;
my %args;
@args{qw/givenname surname birth_place birth_year gender race/} = split /,/, $line;
$args{birth_year} = ($args{birth_year} - 2) . '-' . ($args{birth_year} + 2);
my $mech = WWW::Mechanize::Firefox->new(create => 1, activate => 1);
$mech->get("https://familysearch.org/search/collection/results#count=20&query=%2Bgivenname%3A".$args{givenname}."%20%2Bsurname%3A".$args{surname}."%20%2Bbirth_place%3A".$args{birth_place}."%20%2Bbirth_year%3A".$args{birth_year}."~%20%2Bgender%3AM%20%2Brace%3AWhite&collection_id=2000219");
# REST OF THE SCRIPT HERE. MANY LINES.
}
別の例として、以下が機能します。
locations.txt = Benjamin,Schuvlein,Germany,1913,M,White