Adobe Creative Suite 出力対応店一覧をGoogle Mapsで表示させる(13)
スポンサードリンク
アドビのCS5対応プリントショップのリストのページから、Google Mapsに表示させるやつの13回目。
前回は、アドビのサイトのHTMLをスクレイピングするスクリプト、Google Geocoding APIを使い、住所から緯度/経度を取得するスクリプトをくっつけて、それぞれの印刷会社の住所を取得してみましたが、何やらサーバから取得失敗しているんじゃね、的な不穏なエラーメッセージが混ざっていました。
今回は、エラーメッセージの出方を解析し、さらにエラーメッセージが出ないように取得してみたいと思います。
前回取得したテキストファイル results11.txt には、
...
---
results:
- address_components:
- long_name: 22
short_name: 22
types:
- sublocality_level_5
- sublocality
- political
- long_name: 3
short_name: 3
types:
- sublocality_level_4
- sublocality
- political
- long_name: りんくう南浜
short_name: りんくう南浜
types:
- sublocality_level_1
- sublocality
- political
- long_name: 泉南市
short_name: 泉南市
types:
- locality
- political
- long_name: 大阪府
short_name: 大阪府
types:
- administrative_area_level_1
- political
- long_name: 日本
short_name: JP
types:
- country
- political
formatted_address: '日本, 大阪府泉南市りんくう南浜3−22'
geometry:
location:
lat: 34.3778781
lng: 135.2629286
location_type: APPROXIMATE
viewport:
northeast:
lat: 34.3810257
lng: 135.2660762
southwest:
lat: 34.3747305
lng: 135.259781
types:
- sublocality_level_5
- sublocality
- political
status: OK
---
results: []
status: OVER_QUERY_LIMIT
---
results: []
status: OVER_QUERY_LIMIT
---
results: []
status: OVER_QUERY_LIMIT
---
results: []
status: OVER_QUERY_LIMIT
---
results: []
status: OVER_QUERY_LIMIT
---
results: []
status: OVER_QUERY_LIMIT
---
results: []
status: OVER_QUERY_LIMIT
---
results: []
status: OVER_QUERY_LIMIT
---
results: []
status: OVER_QUERY_LIMIT
---
results: []
status: OVER_QUERY_LIMIT
と、statusにOVER_QUERY_LIMITとかでていました。他の個所には、ZERO_RESULTSとか入ってきていました。
そこで、得られたテキストの全体から、エラーメッセージがどういうタイミングで出ているのか、確認したいと思います。
どのように調べるかというと、grepを使います。
もうみんな忘れているかもしれないけれども、今回の制作物はLinux環境で作っていますので、こんな感じで入力するとよいです。
$ grep -e 'status' results11.txt > status.txt
結果はこんなかんじです。
Filename: status.txt
status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OVER_QUERY_LIMIT status: OVER_QUERY_LIMIT status: OVER_QUERY_LIMIT status: OVER_QUERY_LIMIT status: OVER_QUERY_LIMIT status: OVER_QUERY_LIMIT status: OVER_QUERY_LIMIT status: OVER_QUERY_LIMIT status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OVER_QUERY_LIMIT status: OVER_QUERY_LIMIT status: OVER_QUERY_LIMIT status: OVER_QUERY_LIMIT status: OVER_QUERY_LIMIT status: OVER_QUERY_LIMIT status: OVER_QUERY_LIMIT status: OVER_QUERY_LIMIT status: OVER_QUERY_LIMIT status: OK status: OK status: OK status: OK status: ZERO_RESULTS status: ZERO_RESULTS status: OK status: OK status: OK status: OK status: OVER_QUERY_LIMIT status: OVER_QUERY_LIMIT status: OVER_QUERY_LIMIT status: OVER_QUERY_LIMIT status: OVER_QUERY_LIMIT status: OVER_QUERY_LIMIT status: OVER_QUERY_LIMIT status: OVER_QUERY_LIMIT status: OVER_QUERY_LIMIT status: OVER_QUERY_LIMIT
前回のスクリプトでは、Google Maps APIというネットワーク上のアクセスポイントに問い合わせをしていましたが、どうやら、問い合わせの制限があるところを超えてしまった、ということみたいです。
ということは、Google Maps APIへの問い合わせを行うタイミングをゆっくりにすればいいのかな? ということで、前回のプログラムをちょっと変えてみて、ゆっくり問い合わせするようにしてみます。具体的には、ウェイト(待ち時間)を付けてみます。
Filename: test12.pl
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use Web::Scraper;
use YAML;
use Encode;
use WebService::Simple;
my $geo = WebService::Simple->new(
response_parser => 'JSON',
base_url => 'http://maps.google.com/maps/api/geocode/',
param => {
region => 'jp',
language => 'ja',
sensor => 'false',
},
);
open my $fh, '<', 'printshop.html';
my $html = decode_utf8(do { local $/; <$fh> });
close $fh;
my $s = scraper {
process '//div[@class="tabcontent"][1]//table[@class="data-bordered max"]/tbody/tr', 'codes[]' => scraper {
process '//td[1]', pref => [ 'TEXT', sub { s/\s//g; } ];
process '//td[2]', company => [ 'TEXT', sub { s/\s//g; } ];
process '//td[3]', address => [ 'TEXT', sub { s/\s//g; s/TEL:.+$//i; return $_; } ];
process '//td[3]', phone => [ 'TEXT', sub { s/\s//g; if(m/TEL:([\d-]+)/i){return $1;};}];
process '//td[3]', fax => [ 'TEXT', sub { s/\s//g; s/:/:/g; if(m/FAX:([\d-]+)/i){return $1;};undef;}];
process '//td[4]', illustratorcs5 => [ 'TEXT', sub { return $_ =~m|yes|i ? 1 : undef; } ];
process '//td[5]', indesigncs5 => [ 'TEXT', sub { return $_ =~m|yes|i ? 1 : undef; } ];
process '//td[6]', pdfx1a => [ 'TEXT', sub { return $_ =~m|yes|i ? 1 : undef; } ];
process '//td[7]', pdfx4 => [ 'TEXT', sub { return $_ =~m|yes|i ? 1 : undef; } ];
};
};
my $scraped = $s->scrape($html);
#print Dump($scraped->{codes});
foreach my $item ( @{$scraped->{codes}} ) {
my $address = $item->{address};
#print "$address\n";
my $res = $geo->get( 'json', { address => $address } );
my $val = $res->parse_response();
print Dump( $val );
sleep 1;
}
exit;
__END__
sleep 1; ていうので、プログラムが1秒止まりますので、Google Maps APIへの問い合わせも、1秒ごとになります。
$ perl test12.pl > results12.txt
$ grep -e 'status' results12.txt > status12.txt
$ less status12.txt
status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: ZERO_RESULTS status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: ZERO_RESULTS status: ZERO_RESULTS status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK status: OK
どうやら、sleep 1; がうまく効いて、OVER_QUERY_LIMIT が解消しました。
ZERO_RESULTSっていうエラーが残っていますが、これに関しては、次回調べてみますね。
投稿 大野 義貴 [GoogleMaps] | 固定リンク |
スポンサードリンク
トラックバック(0)
トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/3414





![: Amazon.co.jp: プラスティック・メモリーズ 1【完全生産限定版】(イベントチケット優先販売申込券付) [Blu-ray]](/lists/_9/B00VWX66E8.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 2【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX66K2.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 3【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX6MV0.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 4【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX66IO.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 5【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX6Y0E.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 6【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX69D6.jpg)


コメントする