-
- 1. ISBN 개선
-
-
- 1.1. 사용법
-
- 1.2. 이미지를 찾는 순서
-
- 1.3. wiki.css 수정
-
- 1.4. wiki.pl 수정
-
- 1.5. translations/korean.pl 수정
-
- 1.6. 추가 업데이트 내역
-
- 1.7. 표지 없음 아이콘 모음
-
- 1.8. Notes
-
1. ISBN 개선
현재 ISBN: 으로 링크를 걸 때, 각각 온라인 서적 판매 사이트에 링크를 걸면서 표지 그림을 가져오는데, 해당 사이트에 표지 이미지가 없을 경우 보기가 흉하다. 이것을 개선.
- 표지 이미지 주소를 알라딘API를 사용하여 얻어오고, 불가능할 경우 도서 페이지를 긁어와서 추출해내게 함
- ISBN 숫자에 따라서 어느 서점 사이트에 링크할 지 구분
- 알라딘으로 링크 - ISBN이 89로 시작하는 서적
- ISBN이 60으로 시작하는 짝퉁 번호들도 일단 알라딘으로 연결되게 함
- /일본서적링크 - ISBN이 4로 시작하는 서적
- /아마존링크 - ISBN이 89나 4가 아닌 다른 값으로 시작하는 서적
13자리 ISBN도 받도록 함. 이 경우 내부에서는 10자리로 변환하여 처리한다.
- 표지 이미지가 없을 때 대신 보여줄 이미지를, $IconDir 디렉토리 아래에 "isbn-nocover.jpg" 라는 이름으로 저장하면 표지가 서점 사이트에 없을 경우 이 이미지를 대신 출력한다.
- isbn-nocover-0.jpg 부터 isbn-nocover-4.jpg 까지 다섯 개의 이미지를 추가로 저장해 둘 수 있다. 이 경우, ISBN 넘버를 5 로 나눈 나머지에 따라 서로 다른 이미지를 보여준다. 나머지에 해당하는 이미지가 없으면 위에 있는 isbn-nocover.jpg 를 그냥 보여준다.
- 이미지는 확장자가 jpg 여야 한다. 다른 확장자일 경우 변환 툴을 사용하던가, 아니면 그냥 화일이름만 jpg 로 바꾸어도 웬만하면 될 것이다.
1.2. 이미지를 찾는 순서
알라딘으로 가는 링크의 경우: ISBN:8979141300
라고 적은 경우에 다음의 순서로 이미지를 찾는다.
- 서버에 WebService::Aladdin 모듈이 있으면
- 알라딘API를 호출하여 책의 커버 이미지URL과, 상품 링크URL을 찾는다.
- 저 모듈이 없고 LWP::Simple 모듈이 있으면
- 알라딘의 상품 링크가
http://www.aladdin.co.kr/shop/wproduct.aspx?ISBN=ISBN번호
라고 가정하여 그 링크에 들어가서 페이지를 긁어온 후, og:image
메타 태그의 값을 가져와서 이미지 주소로 사용한다.
- 알라딘 홈페이지의 포맷이 바뀌면 여기도 고쳐줘야 함
- 두 모듈이 다 없으면,
- 상품 링크는 두번째와 동일하게 가정
- 커버는 nocover 아이콘을 사용한다.
일본이나 아마존으로 가는 링크의 경우:
- 현재까지는 책표지 주소가 항상 동일한 형식으로 되어 있는 것으로 보임. 따라서 그냥 책표지 주소를 isbn 넘버에 따라 짐작해서 사용
1.3. wiki.css 수정
자신의 스타일 쉬트 화일에, IMG.isbn 항목을 별도로 만들어서 꾸민다.
IMG.isbn {
border: 1px solid silver;
}
1.4. wiki.pl 수정
wiki.pl 에서는 다음을 수정한다.
함수 추가
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;
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 } ) {
my $p = WebService::Aladdin->new();
my $data;
if ( eval { $data = $p->product($num) } ) {
$cover = $data->{cover};
$link = $data->{link};
}
}
elsif ( eval { require 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">/
);
}
1.5. translations/korean.pl 수정
다음 항목 추가
Go to the on-line bookstore
온라인 서점으로 이동
1.6. 추가 업데이트 내역
ext1.87 - 알라딘에서 책표지가 jpg, JPG, GIF로 나오는 경우를 지원함. from UseModWiki소스수정/ISBN
ext1.109b
- "icons/"라고 되어 있는 아이콘 경로를 $IconDir 변수를 사용하도록 수정
- 이것 때문에 이 홈페이지나 바벨에서 ISBN: 들어있는 페이지가 매우 느려졌을 겁니다 ^^; /SlashLinks를 쓸 경우 wiki.pl을 반복해서 불리느라...
- 알라딘 커버 주소를 변경 - 언제부터 바뀌었었죠 =.=?
- 번호가 "60"으로 시작하는 짝퉁 번호들도 일단 알라딘으로 연결되게 함
- 출판사에서 주소체계가 바뀔 때마다 뒤늦게 그걸 알고 고쳐야 하는데... 주소를 환경변수에서 지정할 수 있게 해야겠다는 생각이 들지만, 일단은 보류하고 담에 문제가 생기면 그때가서.... =.=;
ext2.6
- 알라딘 홈페이지에서 이미지 주소를 추출하게 함 - 옛날에 의견란에 honest님께서 말씀하신 방법인데 미루고 미루다가... 툭하면 만화들이 책표지 없음이 뜨는 것이 짜증나서 드디어 적용했습니다.
ext2.16
- 이미지 주소 추출 방법 변경
- 13자리 넘버 처리
ext2.16a
- 알라딘 홈페이지에서 이미지를 추출할때, og:image 메타태그 항목값을 가져오도록 함
1.7. 표지 없음 아이콘 모음
2개의 그림을 골라서 2개씩 4개를 만들었습니다. 누구나 좋아할만한 강아지의 우울한 표정과 바코드를 들고 있는 카스가 아유무입니다. 물론 오사카가 제 취향입니다;;
아래 첫번째는 위의 네번째 그림에 테두리만 넣은 것. 두번째는 오사카 원본 그림에 제가 한다고 해보다가 또다시 절망한 겁니다. 막상 올려놓고 보니까 그렇게 절망적이지만도 않군요. ^^
Canday님의 작품집(^^;)입니다.
- 작품집이라고 할 것 까지야 :-)
- 오니즈카는 좀 그렇군요.
예쁜 아이콘들 출품해 주세요~ ^^
죄송하지만 예제로 올렸던 내용을 삭제했습니다. -조프
조프님이 보여준 html 대로 출력되도록 수정했습니다.
표지 없음 이미지는, 아무래도 아즈망가 캐릭터를 포함하여 배포하는 것은 저작권 문제가 걸리니까, 조프님이 처음 만드신 강아지 칼라 사진만을 포함해서 넣는 걸로 할까 합니다.
위의 구우님 아이콘 참 멋지구리하네요. ISBN의 끝자리 숫자로 저 그림들 중 하나가 나오게 해 주심 좋겠습니다. -냥날
- 허엇, 아이콘 열 개를 선정하여 isbn-nocover-0 부터 9 까지 만들어 넣어야겠군요. 정말 저 구우 (전 오늘 처음 본 캐릭터인데..) 아이콘 때문에 책표지가 있는 것보다 없는 것이 더 반갑겠습니다.
- 10개는 좀 심하다 싶어서.. 5개까지 이미지를 추가로 넣도록 수정했습니다. 서평 페이지들이 붐을 이룰 수 있으려나요? :-)
확장자가 GIF, JPG등 대문자로 된 경우도 고려하시는 건?
- 그런 경우가 실제로 있나요? 테스트를 해볼 링크가 있으면 알려 주세요. (URL이 대소문자를 구분한다는 것은 참 피곤한 일이로군요)
http://www.aladdin.co.kr/shop/wproduct.aspx?ISBN=8972596329 여기요
- 흐음... 대문자 확장자 지원은 어렵지 않겠는데, 위 링크의 책은 어차피 표지 그림 파일의 URL이 좀 희한하게 되어 있어서 안 나오겠습니다. 수정은 점심 먹고 와서...
대문자 확장자까지 지원하도록 수정되었습니다.
- 오오 역시..
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 );
-- honest 2005-9-27 3:56 pm
애구.. 코멘트에선 안되는 건가요.. -_-; 하여간, 10 자리 ISBN 을 13 자리 EAN-13 으로 바꾸는 함수입니다. 알라딘이 윈도우즈 환경이니 대소문자 모두 시도해 보는 건 사실 필요가 없을 것 같고 일부 책에서 보이는 EAN-13 으로 된 파일 이름은 이걸로 해결이 가능할 듯 합니다. -- honest 2005-9-27 4:00 pm
- 감사합니다, 시간 날 때 보도록 하지요. 그치만 ISBN페이지에 조프님이 남긴 말처럼 이런 식으로 해결하는 것은 한계일 듯 싶네요.
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>";
}
-- honest 2005-9-28 5:50 pm
보시면 아시겠지만.. view.cgi 에서 알려진 Aladdin 의 Image url 규칙을 다 적용해서 이미지 찾아보고, 성공하면 제 홈페이지 있는 서버에 일단 파일 저장한 후, 그 다음부터는 파일이 있으면 그 파일에서 읽어서 이미지를 뿌려줍니다. mime-type 과 cache control 정보 등을 HTTP header 에다 세팅해 주는게 정석인데, 오늘은 일단 여기까지.. -- honest 2005-9-28 5:55 pm
- 앗. 일단 제 위키에 적용해보겠습니다. 감사!
해보니 같은 경우는 역시 안되네요. 아쉽.
ㅠ.ㅠ -- honest 2005-9-29 11:05 am
- 역시 만화책쪽은..
-- honest 2005-9-29 11:28 am
수정했습니다. 다시 해보시죠. 지멋대로 붙은 가짜 ISBN 이미지 파일은 페이지 긁어와서 커버 URL 찾아와서 저장하고 보여줍니다. -- honest 2005-9-29 11:29 am
아니, 고치고 몇시간 지나지도 않아서 기존 커버 주소도 살아났네 -_-;;;; 암튼 아이콘 경로명 때문에라도 패치는 해야 함.
요새 ISBN이 13자리로 바뀌더군요. 대응을 해야 할 듯 한데... 알라딘의 경우 링크를 보니 ISBN=6.. 이렇게 주소에서 사용하는 번호와는 다르더군요.
- 음 13자리 책의 예 몇 개만 들어주세요. 그리고 책 표지 찾는 것도 다시 좀 개선하든지 해야 할텐데...
http://www.aladdin.co.kr/shop/wproduct.aspx?ISBN=6000155209 이 책을 보면 ISBN이 ISBN(13) : 9788989722298 이렇게 13자리로 되어있더군요. 아마존이나 일본책들도 점점 13자리 표기가 늘고 있더라구요. 사실 앞에 978을 제거하면 되는 것 같은데 그중 안되는 것도 있어서.
- 흐음, 알라딘 URL이 ISBN넘버와 관계없이 구성되어 버리면 찾을 방법이...
우홋 감사합니다. 저도 13자리 지원 완료. 모듈 설치하기는 귀찮아서 넘어갔지만, 알라딘에서 책 페이지에 og:image 라는 metadata를 넣어주길래 책 표지는 그걸 받아오도록 수정했습니다.
- 아 그게 그거군요... 커버파일 주소가 두 번 등장하던데 저는 meta란 문구만 보면 영 다룰 자신이 없어져서 (무슨 xml같이 느껴진달까) 제대로 보지도 않고 넘어갔네요ㅎ
- 저도 뭔가하고 찾아보니 Facebook의 OpenGraph용 메타데이터라고 합니다. 오브젝트를 나타내는 이미지라네요. 페이스북에 링크 넣을 때 표시할 이미지를 결정해주는데 사용하는 것 같으니 페이지 포맷이 바뀌어도 저 태그는 없애진 않을 것 같습니다.
이상하게 적용하려고 하는데, 자꾸 에러가 나는군요. -- nyxity 2012-12-18 5:47 pm
선택요구사항을 적용해야 하는 것같은데, 저걸 어떻게 적용해야하는 건가요?
- 어... 저건 없어도 큰 상관은 없는데요. 그림이 안 나오거나 할 뿐... 에러 메시지를 확인하실 수 있나요?
- Internal Server Error가 나옵니다. 음. 벼로 도움이 안되는 에러 메시지 같은데..
The server encountered an internal error or misconfiguration and was unable to complete your request.
- 음 확실히 도움이 안 되는군요 ^^; 예전처럼 서버아이디 암호를 gypark지메일로 보내주시면 살펴보겠습니다. 아 그리고 위키가 있는 디렉토리가 정확히 어느건지도 알려주세요.
- 어흑.. 매번 죄송하고 감사합니다.
위키위키분류