번역서 출간 여부를 쉽게 검색하기

이코노미스트지 선정 도서[1]나 개인적으로 관심있는 책의 번역서가 출간됐는지를 자주 검색하는데, 원서 제목을 키워드로 매번 검색하는게 상당히 귀찮다. 어떤 사람이 각종 서적 관련 api 제공을 비교하는 글[2]을 봤는데, 나도 해 볼 수 없을까 싶어 궁리해 봤다. ㅎ

개인적으로는 알라딘을 많이 사용하므로 알라딘 api를 이용하였다. 다른 api는 어떻게 이용하는지 모른다.

알라딘을 이용하려면 알라딘 ttb가 있어야 하는데[3], 본인의 경우는 옛날에 만들어 놓은 게 있어서 사용이 간단했다. 하루 5천번 사용 제한이 있다고 하던데[3], 본인은 5천번은 커녕 백 번도 이용할 일이 없으므로 충분하다.

아쉽게도 요즘 대세인 파이썬[4]은 할 줄 모르고, 본인이 쓸 줄 아는 게 perl 밖에 없으므로, 개인적으로 쓰는 웹서버[5]에 아래 스크립트를 사용하였다. 물론 LWP::Simple이 있어야 한다. 별도로 준비된 검색 키워드가 저장된 텍스트 파일을 읽어서, 그 키워드 목록을 검색해 주는 코드다. 키워드 파일 내에서 샾 기호(#) 이후로는 무시하므로 주석으로 사용할 수 있다.

#!/usr/bin/perl

use LWP::Simple;

open(FP, "검색 키워드 파일 절대 경로");
 @line = <FP>;
 $lines = @line;
close(FP);

print <<HTML_HEAD;
Content-type: text/html

<html><body>
HTML_HEAD

 while($lines>0)
 {
  if($line[--$lines] ne "\n")
  {
    @comment_sp = split(/\s*#|\n|$/, $line[$lines] );     #키워드 파일에서 샾 이후로 무시함.
    $temp_xml = get( "http://www.aladin.co.kr/ttb/api/ItemSearch.aspx?ttbkey=(본인의 ttb)&MaxResults=3&output=xml&Query=" . $comment_sp[0]);

    print "<br>$line[$lines] : ";

    if ( $temp_xml ) {
        @all=split("\n", $temp_xml);
        $num=@all;
        for($i=0;$i<$num;$i++)
        {
            if($all[$i] =~ m/<totalResults>/)
            {
                $all[$i] =~ s/\s*<\/?totalResults>\s*//g;

                if( $all[$i] > 0)
                {
                   print "<font color=red>$all[$i]</font>";
                   print "<dd>click : <a href=\"http://www.aladin.co.kr/ttb/api/ItemSearch.aspx?ttbkey=(본인의 ttb)&MaxResults=3&output=xml&Query=";
                   print "$line[$lines]\">$line[$lines]</a></dd>\n";
                }
                else
                {
                   print $all[$i] . "\n";
                }
            }
        }
    }
    else
    {
        print "404 not found";
    }
  }
 }

print "\n</body></html>";

본인은 프로그래머가 아니라서, 변수 이름이라든지 등등 여러가지로 코드가 더럽긴 하다. 욕하지 마시라-_- 더 아름답게 xml을 다루는 방법이 틀림없이 있겠지만, 좀 검색해보니 생각하기 귀찮아서, 그냥 regex로 막무가내로 프린트 했다.

여하간 이걸 이용하면 지정된 여러가지 책 제목들의 신간이 출간되었는지 한 방에 확인할 수 있다.

근데 이 코드의 문제점은 루프가 다 돌 때까지 결과가 출력되지 않는다는 점이 있다. 아마 Suffering from Buffering이라 불리는 현상[6] 같은데, 본인은 해결방법을 모르겠다. 이걸 해결해보려고 여러가지 삽질을 했는데, 결과가 신통치 않았다. 뭐 본인의 경우 키워드가 20여개 미만이라서 20초 정도 기다리면 해결되니까 그냥 기다리는 수 밖에 없을 듯 하다. ㅎㅎㅎ

뭐 이런 식으로 오렌지 파이[7]를 활용하는 방법도 있다는 이야기를 하고 싶었음. 근데 요새 술먹고 자꾸 글 쓰니 쓸데없는 이야기가 많아 지는 듯 하다. ㅎ

.


[1] 내 백과사전 2019 이코노미스트지 선정 올해의 책 2019년 12월 8일
[2] 국내 도서 검색 OPEN API 비교 (anpigon.github.io)
[3] OpenAPI 안내 (blog.aladin.co.kr)
[4] 이코노미스트 Python has brought computer programming to a vast new audience Jul 19th 2018
[5] 내 백과사전 라즈베리 파이를 어떻게 활용하십니까? 2019년 6월 26일
[6] Suffering from Buffering? (perl.plover.com)
[7] 내 백과사전 오렌지 파이 제로 wifi 연결하기 2017년 3월 16일