ISBNをハイフン編集してJSONPで返すサービスを最新化してみた
Business::ISBNのデータを自分で更新出来たらなとモジュールを眺めるとデータはData.pmにあるらしい
use Business::ISBN::Data 20081208; # now a separate module
で、Data.pmでどのように持っているかというと
%country_data = ( 0 => ['English speaking area' => ['00' => '19', '200' => '699', '7000' => '8499', '85000' => '89999', '900000' => '949999', '9500000' => '9999999'] ], 1 => ['English speaking area' => ['00' => '09', '100' => '399', '4000' => '5499', '55000' => '86979', '869800' => '998999'] ], 2 => ['French speaking area' => ['00' => '19', '200' => '349', '35000' => '39999', '400' => '699', '7000' => '8399', '84000' => '89999', '900000' => '949999', '9500000' => '9999999'] ],
http://www.isbn-international.org/converter/ranges.htmで使っているhttp://www.isbn-international.org/converter/ranges.jsをごにょるスクリプトを書きながら出版社コードの上限下限をセットで苦戦
Data.pmのコメントを眺めると
This module lives in the Github repository with Business::ISBN:
git://github.com/briandfoy/business--isbn.git
Github見たら最新情報があるかなと見に行くと最新バージョンは20081208版で変わりないけど、make_data.plなんてのを発見、そのものズバリのPerlスクリプトが本家にあるとは・・・
早速うごかしたいところであるけどPerlのバージョンが5.010以上じゃないと動かない、次のあたりを5.8で書くには面倒だ
my @keys = qw(text ranges); my %data; while( $js_data =~ / ^gi\.area(?<group>\d+)\.text \s* = \s* "(?<text>.*?)" ;? [\r\n]+ ^gi\.area(\1)\.pubrange \s* = \s* "(?<ranges>.*?)" ;? [\r\n]+ /gmx ) { @{ $data{ $+{group} } }{ @keys } = @+{ @keys }; }
#名前付きキャプチャバッファすごいな
こんなきれいに書く自信が無いのでMacBookにPerl5.010をインストール(別ディレクトリで)して実行、サーバのData.pmを最新化した
これで次のあたりも対応できました
09.12.2008; Affed Mongolia (99962) "0-4;50-79;800-999"
24.11.2008; Added El Salvador (99961) "0-3;40-89;900-999"
20.11.2008; Changed Benin (99919) to include "300-399" (previously undefined)
24.10.2008: Define India (93)"00-09;100-499;5000-7999;80000-94999;950000-999999"
20.10.2008; Changed Kenya (9966) "00-19" becomes "000-199"
05.10.2008; Addec Ukraine (611)"00-49;500-699;7000-8999;90000-99999"
29.09.2008; Added Syria (9933) "0-0;10-39;400-899;9000-9999"