아래의 내용을 가지고, 한겨레 21 홈페이지의 소스 html 화일과 비교하면서 살펴보세요. 한겨레 21 홈페이지 주소는
http://www.hani.co.kr/h21 입니다.
아래 스크립트에 달린 주석문에서 언급하는 행번호는 한겨레21 421호의 소스를 기준으로 합니다.
// 슬래쉬 두개 (//) 로 시작되는 줄은 주석문으로, 실제로는 처리되지 않는다.
//
//
// 한겨레 21_full
// Raymundo (raymundo@kebi.com)
// 2002. 08. 06.
//
// KPUG 의 윤병태님께서 만든 클립을 수정했습니다.
// 섹션 구분은 되지 않고, 한 주에 올라온 모든 기사가 나열됩니다.
//
//
// 아래 줄은 항상 고정. 현재 버전 1.0 밖에 지원하지 않는다
<hsc_document version="1.0">
// name, origin, url 은 클립에 알맞게 적당히 적어준다.
// template 속성의 값은 HandStoryBase1.tpl 부터 HandStoryBase4.tpl 까지 네 가지가 있는데 템플릿 설명서를 참조하여 적절한 것을 택한다.
<hsc_property name="한겨레21_full" origin="copyright(c) 2002 The Internet Hankyoreh" url="http://www.hani.co.kr/h21" template="HandStoryBase1.tpl">
// hsc_connection 은 알아서 적당히..
<hsc_connection wait=30 retry=5>
// 기사들의 카테고리 (정치, 경제, 등등) 의 제목을 정하는 부분인데, 이 클립에서는 카테고리를 나누지 않고 모든 기사를 하나의 카테고리에 넣는다.
<hsc_catalog>
// 카테고리명은 c0 부터 c1, c2, .. 순으로 나간다. 여기서는 카테고리가 하나 뿐이므로 c0
<hsc_catitem name="c0">
// 카테고리 이름을 "한겨레21" 이라 정한다. 카테고리 이름을 html 소스에서 뽑아내려면 hsc_title 태그에 extract 속성이 있어야 하고, hsc_title 과 /hsc_title 사이에 hsc_begin 과 hsc_end 태그로 뽑아낼 범위를 지정해주어야 한다.
<hsc_title>한겨레21</hsc_title>
</hsc_catitem>
</hsc_catalog>
// 여기까지가 카테고리의 제목을 정하는 부분
// <hsc_area> 를 사용하여 기사를 뽑아낼 범위를 지정한다. 웹사이트 소스 구성에 따라서 <hsc_area> 는 사용하지 않을 수도 있다
// 소스 html 을 보면, 본문의 기사는 대충 214번째 줄부터 782번째 줄 사이에 위치함을 알 수 있다. 항상 이 본문 부분을 커버할 수 있는 양쪽 경계를 찾아야 하는데, 여러 주 (일간지의 경우는 여러 날) 의 소스를 살펴보면서 항상 고정적으로 나타나는 문자열을 찾아야 한다.
<hsc_area>
// 제일 처음에 "<!---커버스토리--->" 라는 주석문이 나오고 본문이 시작되며
<hsc_begin goto><!---커버스토리---></hsc_begin>
// 마지막에는 뭐가 나올지 정확히 판단이 되지 않으므로 제일 끝에 있는 </body> 태그를 경계로 삼는다
<hsc_end goto ign-case></body></hsc_end>
// 위 두 줄이 <hsc_area> 의 범위를 지정하며, 아래의 내용은 모두 소스 html 내의 이 범위 안에서 이뤄진다.
// 한겨레21 421호의 경우는 214번째 줄부터 857번째 줄까지가 된다.
// 본문의 기사의 갯수가 몇개가 될 지 모른다. 넉넉히 잡아주어 루프를 돌린다. 여기서는 루프를 100번 돌게 한다.
<hsc_loop counts="100">
// c0 카테고리에 속할 기사들의 리스트를 구성한다.
<hsc_list name="c0">
// 이번 주의 기사들의 화일명을 알아야 하는데, 소스 내의 a href= 태그들을 살펴보면 본문 기사들은 전부 /section-021003000/2002/08/021003000200208090421027.html 처럼 경로명 중간에 "/2002/" 라는 디렉토리명이 포함된 것을 알 수 있다. 광고나 섹션에 대한 링크에는 이런 연도를 나타내는 문자열이 없다. (천만다행!)
// 따라서, substring 옵션을 사용하여 "/2002/" 라는 문자열이 있는 링크를 검색한 후, 첫번째로 검색된 경로명 (소스의 216번째 줄) 을 따라 이동한다. ref-url 을 사용하는 이유는 이 기사를 처리한 후에 다시 원래의 html 파일로 되돌아와야 하기 때문이다.
<hsc_mission ref-url substring>/2002/</hsc_mission>
// <hsc_object> 태그는 사용하지 않아도 된다. 그러나 사용하면 클립이 더 예뻐진다. :-)
// 템플릿 설명서를 보면, ...Base1.tpl 의 경우 writer 라는 이름의 오브젝트는 기사 본문 페이지의 세번째 라인 (제목이 첫번째, date 라는 이름의 오브젝트가 두번째 라인이다) 에 위치한다.
// 이 클립의 경우 기사의 카테고리를 따로 구분하지 않았는데, 기사 본문 html 을 보면 기사 제목이 오기 전에 먼저 카테고리가 나온다. (이 경우 "[커버스토리]") 이 역시 천만다행.. :-)
// 따라서 이 카테고리 부분을 잡아내어 클립에 writer 오브젝트로 포함시킨다.
// 생각해보면, 이름이 writer 가 아니라 date 라도 동일한 클립이 생성될 것이다. 어차피 제목 아래, 본문 위에 나타나니까..
<hsc_object name="writer" extract notag noblank>
// 매번 변하는 내용이므로 extract 속성을 주어 소스에서 뽑아낸다.
// notag, noblank 는 핸드스토리 스크립트 설명서를 참조하라.
// 아래의 <hsc_begin> 과 <hsc_end> 태그 뒤에 나오는 문자열을 본문 html 에서 찾아보면, 정확히 섹션명 부분을 잡아내는 것을 알 수 있다.
<hsc_begin goto><font size=2 color="maroon"></hsc_begin>
<hsc_end goto cursor="rear">호</font></hsc_end>
// hsc_end 의 경우 cursor="rear" 를 사용하지 않으면, "제421호" 에서 "호" 가 추출되지 않는다. 커서를 "호" 뒤쪽으로 보내어야 한다.
</hsc_object>
// 각 기사의 제목을 뽑아낸다
// 마찬가지로 아래에서 지정한 "<font size=4 color=black><b>" 와 "</b></font>" 사이에 기사 제목이 들어가는 것을 확인할 수 있다.
<hsc_title extract notag noblank>
<hsc_begin goto><font size=4 color=black><b></hsc_begin>
<hsc_end goto></b></font></hsc_end>
</hsc_title>
// 각 기사의 본문을 뽑아낸다
// 역시 본문 html 에서 아래의 문자열을 찾아보라. 문자열이 여러 번 나올 경우는, 현재 커서의 위치에서 처음 발견되는 것을 택한다.
<hsc_content extract noblank image>
<hsc_begin goto cursor="front"><font size=</hsc_begin>
<hsc_end goto><!----[7] 의견쓰기게시판/인쇄/돌려보기 링크 Start----></hsc_end>
</hsc_content>
// 이 시점에서 기사 하나의 제목, writer 오브젝트, 본문 을 구성하였다.
</hsc_list>
// </hsc_list> 를 만나면, ref-url 에서 이동했던 기사 본문 html 에서 원래의 index.html 로 되돌아온다.
</hsc_loop>
// 이제 위의 <hsc_loop> 태그로 점프하여 지금까지의 과정을 반복한다. 매번 index.html 내에서 커서는 다음 번 substring 을 찾아 이동하므로, 70여번을 이동한 후에는 더 이상 "/2002/" 라는 문자열을 찾지 못하고, <hsc_area> 에서 지정했던 경계인 "</body>" 를 만나게 된다.