On Thu, 25 Feb 2010 02:34:56 +0900
INABA HITOSHI <hinaba@...> さんwrote:
> use して使っているのは、
> (1) strict
> (2) vars
> (3) Fcntl
> (4) Symbol
> (5) Carp
> (6) FindBin
> です。これらがさらに use しているモジュールがあります。全部なくすのは結構
> 難しいです(無理かもしれません)。ということは @nifty で使うのは無理っぽい。
@niftyやLaCoocanなどのサーバーを使うのに制約が出てくるのは仕方がないで
す。気にされる必要はありません。それはモジュール側の責任ではなく、使う側
の問題です。
それはともかく、次のようなスクリプトを書いてテストしています。ZedでTAG
実行をするためのものです。エディタ編集ウインドウ上で、
isbn978-4-15-209089-8
のようなISBN番号の文字列パターンを含む行でCtrl+クリックするとパターン文
字列を引数としてスクリプトを実行します。
Sjis.pmやjacode.plを使う場面としてはまったく適切な例とは言えませんが。
スクリプトを試すためには、Amazon Access Keyをセットする必要があります。
下記のスクリプトを実行すると、次のようなエラーになります。
C:\Perl5.10\bin\perl.exe C:\Scripts\zed046\macro\exec\menu\edit\isbn2sjishtml.pl "isbn978-4-15-209089-8"
Name "Esjis::isbn978-4-15-209089-8" used only once: possible typo at C:/Perl5.10/lib/Symbol.pm line 135.
Undefined subroutine &jcode::f called at C:/Perl5.10/site/lib/jacode.pl line 587.
コメントしているutf-8出力用のように書けば問題なく動作します。上のはZedの
サブウインドウ上の出力です。
コマンドプロンプトでは、
sjis出力用にすれば、同様な出力で止まります。
-----^
C:\Scripts\zed046\macro\exec\menu\edit>perl isbn2sjishtml.pl "isbn978-4-15-20908
9-8"
Name "Esjis::isbn978-4-15-209089-8" used only once: possible typo at C:/Perl5.10
/lib/Symbol.pm line 135.
Undefined subroutine &jcode::f called at C:/Perl5.10/site/lib/jacode.pl line 587
.
-----$
utf8出力用に変更すると、次のようなエラーになりますが目的は達成されます。
下記のエラーメッセージはZedのサブウインドウには出力されませんが^^;)
-----^
C:\Scripts\zed046\macro\exec\menu\edit>perl isbn2sjishtml.pl "isbn978-4-15-20908
9-8"
Name "Esjis::isbn978-4-15-209089-8" used only once: possible typo at C:/Perl5.10
/lib/Symbol.pm line 135.
Wide character in print at isbn2sjishtml.pl.e line 65.
Wide character in print at isbn2sjishtml.pl.e line 65.
Wide character in print at isbn2sjishtml.pl.e line 65.
-----$
次のスクリプトはsjis出力用にコメントしている。
-----^
#!/Perl5.10/bin/perl.exe
# Title = ISBN2SJISHTML
# Input
# Copyright 2009,2010 jscripter(jscripter9@...)
use Net::Amazon;
use Sjis;
require 'jacode.pl';
$|=1;
my $isbn = "";
if($ARGV[0]){
($isbn = $ARGV[0]) =~ s/^i*s*bn:* *([\d\-]+)$/$1/i;
}else{
while(<>){
if(index($_, "\x1A") > -1){
last;
}
chomp;
($isbn = $_) =~ s/^i*s*bn:* *([\d\-]+)$/$1/i;
}
}
my($isbn13, $localenum) = &isbn10to13($isbn);
my $locale = "";
if($localenum == 0){
$locale = 'us';
}elsif($localenum == 1){
$locale = 'uk';
}elsif($localenum == 2){
$locale = 'fr';
}elsif($localenum == 3){
$locale = 'de';
}elsif($localenum == 4){
$locale = 'jp';
}
open(OUT,"> isbn${isbn}.html");
print OUT "<html><head>\n";
print OUT "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">\n";
#print OUT "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n";
print OUT "<body>\n";
# Set your Amazon Access Key ###
my $ua = Net::Amazon->new(token => 'Your_Amazon_Access_Key',
secret_key => 'Your_Amazon_Secret_Access_Key',
locale => $locale);
###
# Get a request object
my $response = $ua->search(isbn => $isbn13);
if($response->is_success()) {
for ($response->properties){
print OUT "<img src=\"", &jcode'sjis($_->ImageUrlMedium(),'utf8'),
"\" align=LEFT hspace=20>",
&jcode'sjis($_->authors, 'utf8'), "著「",
&jcode'sjis($_->title(),'utf8'), "」(",
&jcode'sjis($_->publisher(), 'utf8'), ", ",
&jcode'sjis($_->year(), 'utf8'),
"年)<br clear=ALL>";
# print OUT "<img src=\"", $_->ImageUrlMedium(),
# "\" align=LEFT hspace=20>",
# $_->authors, &jcode'utf8("著「", 'sjis'),
# $_->title(), &jcode'utf8("」(", 'sjis'),
# $_->publisher(), ", ", $_->year(),
# &jcode'utf8("年)<br clear=ALL>", 'sjis');
}
} else {
print "<p>Error: ", $response->message(), "</p>\n";
}
print OUT "</body></html>\n";
close(OUT);
system("start isbn${isbn}.html");
sub isbn10to13{
my($isbn10) = @_;
my $isbn13 = "";
my $localenum = 0;
$isbn10 =~ s/-//g;
if($isbn10 =~ /^(\d{9}).$/){
$isbn13 = "978" . $1;
$isbn13 =~ /^(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)$/;
$localenum = $4;
$e = $2 + $4 + $6 + $8 + $10 + $12;
$o = $1 + $3 + $5 + $7 + $9 + $11;
($f = $e * 3 + $o) =~ s/^\d*(\d)$/$1/;
if($f == 0){
$isbn13 .= "0";
}else{
$isbn13 .= 10 - $f;
}
}else{
$isbn13 = $isbn10;
$localenum = (split(//, $isbn13))[3];
}
return $isbn13, $localenum;
}
-----$
TSNETスクリプト通信ネタはこれ関係^^;)
藤岡 和夫
kazuf@...
日曜プログラマのひとりごと http://homepage1.nifty.com/kazuf/renewal.html