현재 ISBN: 으로 링크를 걸 때, 각각 온라인 서적 판매 사이트에 링크를 걸면서 표지 그림을 가져오는데, 해당 사이트에 표지 이미지가 없을 경우 보기가 흉하다. 이것을 개선.
13자리 ISBN도 받도록 함. 이 경우 내부에서는 10자리로 변환하여 처리한다.
알라딘으로 가는 링크의 경우: ISBN:8979141300
라고 적은 경우에 다음의 순서로 이미지를 찾는다.
http://www.aladdin.co.kr/shop/wproduct.aspx?ISBN=ISBN번호
라고 가정하여 그 링크에 들어가서 페이지를 긁어온 후, og:image
메타 태그의 값을 가져와서 이미지 주소로 사용한다.
일본이나 아마존으로 가는 링크의 경우:
/* ISBN 링크시 책표지 */ IMG.isbn { border: 1px solid silver; }
함수 추가1
# 13자리 ISBN을 10자리로 변환 sub isbn13to10 { my $isbn13 = shift; my $isbn10 = substr($isbn13, 3, 9); my $checksum = 0; my $weight = 10; foreach my $c ( split //, $isbn10 ) { $checksum += $c * $weight; $weight--; } $checksum = 11 - ( $checksum % 11 ); if ( $checksum == 10 ) { $isbn10 .= 'X'; } elsif ( $checksum == 11 ) { $isbn10 .= '0'; } else { $isbn10 .= $checksum; } return $isbn10; }
기존 함수 수정
sub ISBNLink { my ($rawnum) = @_; my $num = $rawnum; my $rawprint = $rawnum; $rawprint =~ s/ +$//; $num =~ s/[- ]//g; # 숫자 자릿수 체크 - 13자리면 10자리로 변환 if (length($num) == 13) { $num = isbn13to10($num); } elsif (length($num) != 10) { return "ISBN $rawnum"; } # 책표지가 없을 때 사용할 아이콘 my ($noCoverIcon, $iconNum) = ("$IconUrl/isbn-nocover.jpg", ($num % 5)); $noCoverIcon = "$IconUrl/isbn-nocover-$iconNum.jpg" if (-f "$IconUrl/isbn-nocover-$iconNum.jpg"); my ( $link, $cover ); # 국내 서적 if ($num =~ /^(89|60)/) { # 일단 커버는 없고, 링크도 고정된 형태로 가정 $cover = $noCoverIcon; $link = "http://www.aladin.co.kr/shop/wproduct.aspx?ISBN=$num"; if ( eval { require WebService::Aladdin } ) { # WebService::Aladdin 모듈이 있다면 그걸 사용하여 커버 주소와 링크 추출 my $p = WebService::Aladdin->new(); my $data; if ( eval { $data = $p->product($num) } ) { $cover = $data->{cover}; $link = $data->{link}; } } elsif ( eval { require LWP::Simple } ) { # LWP::Simple 모듈이 있다면 알라딘 홈페이지에 들어가서 커버 주소 추출 my $html = LWP::Simple::get($link); if ($html =~ m'property="og:image"\s+content="(.+?)"'s) { $cover = $1; } } } # 일본 서적 elsif ($num =~ /^4/) { $link = "http://bookweb.kinokuniya.co.jp/guest/cgi-bin/wshosea.cgi?W-ISBN=$num"; $cover = "http://bookweb.kinokuniya.co.jp/imgdata/$num.jpg"; } # 그 외 서적 - 아마존 else { $link = "http://www.amazon.com/exec/obidos/ISBN=$num"; $cover = "http://images.amazon.com/images/P/$num.01.MZZZZZZZ.gif"; } return StoreHref( qq/href="$link"/, qq/<IMG class="isbn" src="$cover" onError='src="$noCoverIcon"' alt="/ . T('Go to the on-line bookstore') . qq/ ISBN:$rawprint">/ ); }
다음 항목 추가
Go to the on-line bookstore 온라인 서점으로 이동
ext1.109b
ext2.6
ext2.16
ext2.16a
아래 첫번째는 위의 네번째 그림에 테두리만 넣은 것. 두번째는 오사카 원본 그림에 제가 한다고 해보다가 또다시 절망한 겁니다. 막상 올려놓고 보니까 그렇게 절망적이지만도 않군요. ^^
Canday님의 작품집(^^;)입니다.
예쁜 아이콘들 출품해 주세요~ ^^
표지 없음 이미지는, 아무래도 아즈망가 캐릭터를 포함하여 배포하는 것은 저작권 문제가 걸리니까, 조프님이 처음 만드신 강아지 칼라 사진만을 포함해서 넣는 걸로 할까 합니다.
확장자가 GIF, JPG등 대문자로 된 경우도 고려하시는 건?
http://www.aladdin.co.kr/shop/wproduct.aspx?ISBN=8972596329 여기요
대문자 확장자까지 지원하도록 수정되었습니다.
sub Isbn2Ean13 { my $isbn = shift; my @nums = split( //, "978".$isbn ); pop( @nums ); foreach my $num ( @nums ) { $sum += $num * ( ( $num & 1 ) ? 1 : 3 ); } push( @nums, ( 10 - ( $sum % 10 ) ) ); return join( "", @nums );
애구.. 코멘트에선 안되는 건가요.. -_-; 하여간, 10 자리 ISBN 을 13 자리 EAN-13 으로 바꾸는 함수입니다. 알라딘이 윈도우즈 환경이니 대소문자 모두 시도해 보는 건 사실 필요가 없을 것 같고 일부 책에서 보이는 EAN-13 으로 된 파일 이름은 이걸로 해결이 가능할 듯 합니다.
ISBN 페이지에서 이야기한 ISBN Image Archive 라고 할 수 있는데.. 테스트중입니다. ISBNLink 함수를 약간만 손봐서한 번 시도해 보셔도 좋을 듯. 일단 제가 해본 한에서는 다 되는 것 같습니다. 오래 유지할 만한 것은 아닌 것 같아서 (30G.. -_-) 한 달쯤 돌려보다가 안정적인 곳으로 옮기던가.. 그냥 없었던 걸로 하던가 하겠습니다. 테스트 해주실 분 계시면 대단히 감사!
if ($num =~ /^89/) { my $siteurl = "http://honest.bawi.org/isbn/view.cgi?isbn=$num"; return "<a href=\"http://www.aladdin.co.kr/catalog/book.asp?ISBN=$num\">". "<IMG class='isbn' ". "$ImageTag ". "src='$siteurl'></a>"; }
ㅠ.ㅠ
수정했습니다. 다시 해보시죠. 지멋대로 붙은 가짜 ISBN 이미지 파일은 페이지 긁어와서 커버 URL 찾아와서 저장하고 보여줍니다.
아니, 고치고 몇시간 지나지도 않아서 기존 커버 주소도 살아났네 -_-;;;; 암튼 아이콘 경로명 때문에라도 패치는 해야 함.
요새 ISBN이 13자리로 바뀌더군요. 대응을 해야 할 듯 한데... 알라딘의 경우 링크를 보니 ISBN=6.. 이렇게 주소에서 사용하는 번호와는 다르더군요.
http://www.aladdin.co.kr/shop/wproduct.aspx?ISBN=6000155209 이 책을 보면 ISBN이 ISBN(13) : 9788989722298 이렇게 13자리로 되어있더군요. 아마존이나 일본책들도 점점 13자리 표기가 늘고 있더라구요. 사실 앞에 978을 제거하면 되는 것 같은데 그중 안되는 것도 있어서.
우홋 감사합니다. 저도 13자리 지원 완료. 모듈 설치하기는 귀찮아서 넘어갔지만, 알라딘에서 책 페이지에 og:image 라는 metadata를 넣어주길래 책 표지는 그걸 받아오도록 수정했습니다.
이상하게 적용하려고 하는데, 자꾸 에러가 나는군요.
선택요구사항을 적용해야 하는 것같은데, 저걸 어떻게 적용해야하는 건가요?