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