웹페이지에서 자동으로 RSS 만들기

지난 달에 봤던 뮤지컬 《헤어스프레이》가 너무 좋아서 마지막 회차 공연 때 또 보려고 3차 티켓 오픈 소식을 들으려고 웹페이지를 감시하고 있었습니다. 아 그런데 예약페이지를 Update Scanner로 감시해 놓으니까, 정작 보고싶은 예약가능일 변경은 잘 안 보이고, 사이트 전체 예약순위 같은 것만 보이고 그래서, 아 이럴 때 RSS가 있었으면! 하고 무척 답답했었는데요. 그래서 결국 뭔가 다른 방법이 없을까 찾다가 인터파크 티켓 공지사항에 티켓오픈 며칠 전에 공지가 올라온다는 것을 알고 저걸 변경사항 보려니 그것도 좀 그래서 예전에 까나리님 블로그에서 본 적 있는 RSS 자동 만들어주기 사이트가 생각났습니다.

게시판같은 것을 RSS로 자동으로 만들어 주는 feedity.com을 써 봤는데, 치명적인 문제가 인터파크에서는 공지사항을 <제목> 이렇게 <>로 감싸서 올리는 와중 < >를 그냥 써버려서 태그로 인식되어 feedity에서 다 잘라버리는 것입니다. 그래서 결국 제목에서 중요한 부분만 다 없어지는 효과가;; 그리고 본문 요약이 잘 안 되는지 글 내용도 이렇게 다 빈걸로 올라오고 광고만 떨렁 올라오더군요.

그래서 아 이거 재미있겠다 갑자기 호기심이 생겨서 직접 만들어보자 하고 마음을 먹었습니다. -ㅇ-; 우선 요구사항은

  • <제목> 같이 개떡같이 HTML을 써도 대충 알아듣자
  • 본문 요약을 어떻게든 만들어서 넣자. (요렇게)
  • 레이아웃이 바뀌어도 동작할 수 있게 DOM이나 HTML 레이아웃은 생각하지 말자.

로 정하고 대략적으로 실행 단계는 이렇게 정했습니다. (아마도 대부분의 자동 RSS 사이트들이 이렇게 동작하지 않을까 예상 -ㅇ-)

  • 게시판 목록이 있는 HTML을 들고 와서 링크를 모두 뽑아낸다.
  • 뽑아낸 링크들을 자기들끼리 비교해서 서로 간의 (차이) 거리를 잼. 예를 들어 숫자 1개 차이는 1점, 알파벳 1개 차이는 2점
  • 링크 간의 거리 행렬(distance matrix)을 가지고 계층적 군집화(hierarchical clustering)를 해서 떼로 만듦.
  • 여러 군집 간에서 적당한 기준으로 "게시판 글 목록" 군집을 골라 냄. (여기서는 군집 내 최대 거리, 군집의 크기, 군집 내 링크들의 본문 길이를 기준으로)
  • 골라낸 군집의 링크들의 문서를 모두 가져옴
  • 링크를 2개씩 짝지어서 HTML을 비교해서 차이점이 각 링크의 본문이라고 가정해서 뽑아냄
  • 뽑아낸 본문들과 제목 등을 이용해서 RSS 생성

그렇게 해서 autorss라는 이름으로 하나 만들었습니다. 처음엔 간단할 것 같아서 스크립트 파일 1개로 50줄 안에 끝내야지 했는데, 하다보니 모듈 import가 17개인 거대 스크립트가 돼 버렸네요 --;;

생각보다 잘 돌아네요.. ^.^;; 이제 편하게 티켓 오픈 소식을;;; 다른 RSS 제공해 주지 않는 답답한 사이트를 보고 싶을 때 한번 적용해보세요~ (아직 그렇게 소스가 일반화돼 있지 않아서 좀 고칠 부분이 많을 수도 있습니다. 다른 사이트에는 적용해 보니까 DC인사이드 갤러리에도 그런대로 잘 동작하네요. :)

댓글 14 개 | 트랙백 0 개 (보낼곳) | 태그 happyhacking python


트랙백
트랙백이 없습니다.
댓글
^^  ▒
웹프로그래밍은 전혀 문외한인데, 간단히 설명도 해주세요...^^;
2007-12-26 18:55
전부 설명하기는 좀 많은 것 같고, 궁금하신 부분이 있으시면 질문하시면 답변해 드릴게요~
2007-12-26 21:01
wafe  ▒
컥... 저도 옛날 제로보드가 RSS 지원을 하지 않아서 간단히 메일 알리미나 만들어볼까 생각중이었는데 대단한 물건이 하나 세상에 나왔군요 ㅎㅎ
2007-12-26 22:29
꺄, 선리플 후감상 ... 일단 내 블로그 링크가 나왔다는데에 의의를 (불끈)
2007-12-27 11:10
레이아웃이 바뀌어도 동작할수 있게 DOM 이나 HTML 레이아웃을 생각 안한다는게
정말 인상적이네요
저는 html 파싱 할 때 항상 DOM 방식으로 해왔었는데
레이아웃이 바뀔때마다 신경쓰이더라구요
좋은 개념 배우고 갑니다 ^^
2007-12-27 14:22
헙.. 저도 이런거 만들고 싶었는데, 소스 보고 배워야겠네요. ㅎㅎ
전 웹툰 RSS를 만들고 싶었다는, 다음이나 네이버에 나오는 웹툰은 왜 RSS를 제공하지 않는건지.. ㅡㅡ;;
2007-12-27 16:34
네이버 웹툰은 mindist 가중치를 0으로 바꾸니까 잘 잡히네요; (디폴트로 하면 만화책 링크가 잡히고 -ㅇ-;;)
2007-12-27 17:57
김창준  ▒
import difflib 두 번 하네
2007-12-29 23:12
파이썬 2.4에서는 140라인즘에 문법오류네요.
>nuniq = leftuniq rightuniq if join.distance > 0 else 1
파이썬 새버전에서 새로 나온 문법인가봐요?
2008-01-05 01:07
예 A if B else C는 2.5에서 추가된 문법입니다.
2008-01-05 01:22
ㄴㅇㄱ  ▒
훌륭합니다
2008-01-09 15:54
초보  ▒
어떻게 작동시키는건가요?
파이썬을 홈페이지들어가서 프로그램 설치하고 더블클릭했더니.
무반응이네요..
초보자를 위해 작동법 알려주시면 안될까요6^^
2008-02-03 05:33
필요한 모듈이 상당히 많고, 파라미터 조절을 모두 소스코드를 고쳐서 해야하기 때문에, 프로그램을 작동시키기 위해서는 파이썬 문법을 아셔야합니다.
파이썬은 파이썬 튜토리얼을 보셔도 되고 적당한 파이썬 입문서들이 한국에도 나와 있습니다.

누군가 이 프로그램을 일반 사용자들도 사용할 수 있게 GUI를 만들어
주면 좋겠군요. :)
2008-02-03 09:57
고양  ▒
꿀잠// 네이버랑 다음 웹툰을 RSS로 제공해주면 좋을텐데
싶었던 사람이 또 있습니다. ㅋㅋ

- 네이버 웹툰
http://feeds.feedburner.com/naver_webtoon

- 다음 만화속세상
http://feeds.feedburner.com/daum_cartoonworld

원본 참고 : http://ts.jagesarang.com/18
2008-02-03 23:55

글이 올라온 지 30일이 지나 새 댓글은 쓸 수 없습니다.

누구?

장혜식 (Hye-Shik Chang)
내일을 사랑하는 소년(!)

me2