[첫화면으로]UseModWiki소스수정/ISBN링크

마지막으로 [b]

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: 으로 링크를 걸 때, 각각 온라인 서적 판매 사이트에 링크를 걸면서 표지 그림을 가져오는데, 해당 사이트에 표지 이미지가 없을 경우 보기가 흉하다. 이것을 개선.

13자리 ISBN도 받도록 함. 이 경우 내부에서는 10자리로 변환하여 처리한다.

1.1. 사용법

1.2. 이미지를 찾는 순서

알라딘으로 가는 링크의 경우: ISBN:8979141300라고 적은 경우에 다음의 순서로 이미지를 찾는다.

일본이나 아마존으로 가는 링크의 경우:

1.3. wiki.css 수정

자신의 스타일 쉬트 화일에, IMG.isbn 항목을 별도로 만들어서 꾸민다.
/* ISBN 링크시 책표지 */
IMG.isbn {
    border: 1px solid silver;
}

1.4. wiki.pl 수정

wiki.pl 에서는 다음을 수정한다.

함수 추가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">/
                    );
}

1.5. translations/korean.pl 수정

다음 항목 추가
Go to the on-line bookstore
온라인 서점으로 이동

1.6. 추가 업데이트 내역

ext1.87 - 알라딘에서 책표지가 jpg, JPG, GIF로 나오는 경우를 지원함. from Jof:UseModWiki소스수정/ISBN
-- Raymundo 2005-6-28 10:48 am

ext1.109b

ext2.6

ext2.16

ext2.16a

1.7. 표지 없음 아이콘 모음

2개의 그림을 골라서 2개씩 4개를 만들었습니다. 누구나 좋아할만한 강아지의 우울한 표정과 바코드를 들고 있는 카스가 아유무입니다. 물론 오사카가 제 취향입니다;;
-- 조프 2003-3-12 4:35 pm
GyparkPDS:pics/nocover/jof_puppy_color.jpg GyparkPDS:pics/nocover/jof_puppy_gray.jpg GyparkPDS:pics/nocover/jof_osaka_1.png GyparkPDS:pics/nocover/jof_osaka_2.png

아래 첫번째는 위의 네번째 그림에 테두리만 넣은 것. 두번째는 오사카 원본 그림에 제가 한다고 해보다가 또다시 절망한 겁니다. 막상 올려놓고 보니까 그렇게 절망적이지만도 않군요. ^^
-- Raymundo 2003-3-12 4:42 pm
GyparkPDS:pics/nocover/raymundo_osaka_1.png GyparkPDS:pics/nocover/raymundo_osaka_2.jpg GyparkPDS:pics/nocover/raymundo_darth.jpg

Canday님의 작품집(^^;)입니다.
작품집이라고 할 것 까지야 :-)
GyparkPDS:pics/nocover/canday_osaka_1.png GyparkPDS:pics/nocover/canday_guu_1.png GyparkPDS:pics/nocover/canday_guu_2.png GyparkPDS:pics/nocover/canday_guu_3.png Upload:gto2.gif Upload:gto3.gif Upload:isbn-nocover-4.jpg Upload:isbn-sponge.jpg
오니즈카는 좀 그렇군요.

예쁜 아이콘들 출품해 주세요~ ^^

1.8. Notes

죄송하지만 예제로 올렸던 내용을 삭제했습니다. -조프
조프님이 보여준 html 대로 출력되도록 수정했습니다.
-- Raymundo 2003-3-12 3:16 pm

표지 없음 이미지는, 아무래도 아즈망가 캐릭터를 포함하여 배포하는 것은 저작권 문제가 걸리니까, 조프님이 처음 만드신 강아지 칼라 사진만을 포함해서 넣는 걸로 할까 합니다.
-- Raymundo 2003-3-12 4:45 pm


위의 구우님 아이콘 참 멋지구리하네요. ISBN의 끝자리 숫자로 저 그림들 중 하나가 나오게 해 주심 좋겠습니다. -냥날

허엇, 아이콘 열 개를 선정하여 isbn-nocover-0 부터 9 까지 만들어 넣어야겠군요. 정말 저 구우 (전 오늘 처음 본 캐릭터인데..) 아이콘 때문에 책표지가 있는 것보다 없는 것이 더 반갑겠습니다.
-- Raymundo 2003-3-12 11:00 pm

10개는 좀 심하다 싶어서.. 5개까지 이미지를 추가로 넣도록 수정했습니다. 서평 페이지들이 붐을 이룰 수 있으려나요? :-)
-- Raymundo 2003-3-12 11:49 pm

확장자가 GIF, JPG등 대문자로 된 경우도 고려하시는 건?
-- Nyxity 2005-6-28 11:02 am

그런 경우가 실제로 있나요? 테스트를 해볼 링크가 있으면 알려 주세요. (URL이 대소문자를 구분한다는 것은 참 피곤한 일이로군요)
-- Raymundo 2005-6-28 11:14 am

http://www.aladdin.co.kr/shop/wproduct.aspx?ISBN=8972596329 여기요
-- Nyxity 2005-6-28 11:36 am

흐음... 대문자 확장자 지원은 어렵지 않겠는데, 위 링크의 책은 어차피 표지 그림 파일의 URL이 좀 희한하게 되어 있어서 안 나오겠습니다. 수정은 점심 먹고 와서...
-- Raymundo 2005-6-28 12:31 pm

대문자 확장자까지 지원하도록 수정되었습니다.
-- Raymundo 2005-6-28 2:17 pm

오오 역시..
-- Nyxity 2005-6-28 2:19 pm

sub Isbn2Ean13 {
    my $isbn = shift;
    my @nums = split( //, "978".$isbn );
    pop( @nums );
    foreach my $num ( @nums ) { $sum += $num * ( ( $num &amp; 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페이지에 조프님이 남긴 말처럼 이런 식으로 해결하는 것은 한계일 듯 싶네요.
-- Raymundo 2005-9-27 8:13 pm

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

앗. 일단 제 위키에 적용해보겠습니다. 감사!
-- 조프 2005-9-29 9:43 am

해보니 온라인 서점으로 이동 ISBN:8952835891 같은 경우는 역시 안되네요. 아쉽.
-- 조프 2005-9-29 9:55 am

ㅠ.ㅠ
-- honest 2005-9-29 11:05 am

역시 만화책쪽은..
-- Nyxity 2005-9-29 11:10 am

http://honest.bawi.org/isbn/view.cgi?isbn=8952835891&ext=.gif
-- honest 2005-9-29 11:28 am

수정했습니다. 다시 해보시죠. 지멋대로 붙은 가짜 ISBN 이미지 파일은 페이지 긁어와서 커버 URL 찾아와서 저장하고 보여줍니다.
-- honest 2005-9-29 11:29 am

아니, 고치고 몇시간 지나지도 않아서 기존 커버 주소도 살아났네 -_-;;;; 암튼 아이콘 경로명 때문에라도 패치는 해야 함.
-- Raymundo 2007-2-7 8:22 pm

요새 ISBN이 13자리로 바뀌더군요. 대응을 해야 할 듯 한데... 알라딘의 경우 링크를 보니 ISBN=6.. 이렇게 주소에서 사용하는 번호와는 다르더군요.
-- Nyxity 2007-4-2 6:23 pm

음 13자리 책의 예 몇 개만 들어주세요. 그리고 책 표지 찾는 것도 다시 좀 개선하든지 해야 할텐데...
-- Raymundo 2007-4-3 8:47 am

http://www.aladdin.co.kr/shop/wproduct.aspx?ISBN=6000155209 이 책을 보면 ISBN이 ISBN(13) : 9788989722298 이렇게 13자리로 되어있더군요. 아마존이나 일본책들도 점점 13자리 표기가 늘고 있더라구요. 사실 앞에 978을 제거하면 되는 것 같은데 그중 안되는 것도 있어서.
-- Nyxity 2007-4-3 10:47 am

흐음, 알라딘 URL이 ISBN넘버와 관계없이 구성되어 버리면 찾을 방법이...
-- Raymundo 2007-4-3 3:22 pm

우홋 감사합니다. 저도 13자리 지원 완료. 모듈 설치하기는 귀찮아서 넘어갔지만, 알라딘에서 책 페이지에 og:image 라는 metadata를 넣어주길래 책 표지는 그걸 받아오도록 수정했습니다.
-- 조프 2012-1-20 1:06 am

아 그게 그거군요... 커버파일 주소가 두 번 등장하던데 저는 meta란 문구만 보면 영 다룰 자신이 없어져서 (무슨 xml같이 느껴진달까) 제대로 보지도 않고 넘어갔네요ㅎ
-- Raymundo 2012-1-20 1:16 am

저도 뭔가하고 찾아보니 Facebook의 OpenGraph용 메타데이터라고 합니다. 오브젝트를 나타내는 이미지라네요. 페이스북에 링크 넣을 때 표시할 이미지를 결정해주는데 사용하는 것 같으니 페이지 포맷이 바뀌어도 저 태그는 없애진 않을 것 같습니다.
-- 조프 2012-1-20 1:39 am

이상하게 적용하려고 하는데, 자꾸 에러가 나는군요.
-- nyxity 2012-12-18 5:47 pm

선택요구사항을 적용해야 하는 것같은데, 저걸 어떻게 적용해야하는 건가요?
-- Nyxity 2012-12-18 5:52 pm

어... 저건 없어도 큰 상관은 없는데요. 그림이 안 나오거나 할 뿐... 에러 메시지를 확인하실 수 있나요?
-- Raymundo 2012-12-18 7:04 pm

Internal Server Error가 나옵니다. 음. 벼로 도움이 안되는 에러 메시지 같은데..

The server encountered an internal error or misconfiguration and was unable to complete your request.
-- Nyxity 2012-12-20 12:18 pm

음 확실히 도움이 안 되는군요 ^^; 예전처럼 서버아이디 암호를 gypark지메일로 보내주시면 살펴보겠습니다. 아 그리고 위키가 있는 디렉토리가 정확히 어느건지도 알려주세요.
-- Raymundo 2012-12-20 1:12 pm

어흑.. 매번 죄송하고 감사합니다.
-- Nyxity 2012-12-20 1:40 pm
이름:  
Homepage:
내용:
 


위키위키분류

각주:
1. 변환 코드는 [여기]의 것을 참고

마지막 편집일: 2012-12-20 1:40 pm (변경사항 [d])
3400 hits | Permalink | 변경내역 보기 [h] | 페이지 소스 보기