Cairo: The Universal Feed Crawler

2007-03-02

 

목차

목차... 1

개요... 1

기능... 2

요구 사항... 2

설치... 2

사용 방법... 3

라이센스... 5

최신 버전... 5

FAQ.. 6

추가 정보... 7

연락처... 7

 

개요

 

사용자 삽입 이미지

화면 1 Cairo 메인 페이지

 

Cairo RSS 1.0, RSS 2.0, ATOM 1.0을 지원하는 범용 피드 수집기 입니다. 등록된 피드 주소 목록에서 주기적으로 정보를 수집하여 MySQL DB에 일관된 형태로 저장하는 기능을 합니다. RSS 기반의 메타 사이트나 개인용 피드 수집기로 활용할 수 있습니다.

 

제작자: 신영진(YoungJin Shin) codewiz@gmail.com

멘토: 김현철 earus.mail@gmail.com

 

기능

- RSS 1.0, RSS 2.0, ATOM 1.0 XML 피드 파싱

- 주기적으로 등록된 피드의 내용을 수집

- 수집한 내용을 MySQL 디비에 기록

- 태그 지원

 

요구 사항

- Python 2.3 이상이 필요합니다(2.4 이상 권장).

- MySQL db charset UTF-8만 지원합니다(MySQL 5.0 이상 권장).

- crontab을 수정할 수 있는 권한이 필요합니다.

 

설치

아래 과정을 따라 설치하시면 됩니다. http://flvs.daum.net/flvPlayerOut.swf?vid=fd6XpY6vw28$에 설치 동영상이 올려져 있습니다. 내용이 어려우신 분들은 동영상을 보고 따라 설치하면 됩니다.

 

1. cairo.tar.gz를 다운받은 다음 압축을 해제합니다.

> tar -xvzf cairo.tar.gz

 

2. cairo 디렉터리 내에 있는 Config.py를 자신의 정보에 맞게 수정합니다. 수정 시 DB 관련 정보는 정확하게 설정하도록 합니다.

> vi Config.py

 

# DB 호스트

DB_HOST = 'localhost'

 

# DB 사용자 아이디

DB_USERID = 'myid'

 

# DB 패스워드

DB_PASSWD = 'mypasswd'

 

# DB 이름

DB_NAME = 'dbname'

 

# DB 테이블 접두사

DB_PREFIX = 'test_'

 

# 크롤링 주기( 단위)

SYNC_RATE = 10

 

# 페이지 표시 타임존

TIMEZONE = 'Asia/Seoul'

 

# 페이지당 개수

ENTRY_PER_PAGE = 4.0

 

# 페이지당 네비게이션 블록 개수

BLOCK_PER_PAGE = 20.0

 

3. setup.py 스크립트를 수행합니다.

> python setup.py

 

4. crontab crawler가 등록 되었는지 확인 합니다. crawler.py를 포함한 줄이 출력되어야 정상입니다.

> crontab -l

 

5. crawler.py를 수행해 줍니다. Update가 출력되어야 정상입니다.

> python crawler.py

 

5. cairo 메인 페이지에 접속해서 테스트 해 봅니다.

http://your.domain.com/install_path/cairo.py

 

사용 방법

메인 페이지로 접속을 합니다. 메뉴판에서 블로그 목록을 선택합니다. <화면 2>와 같은 페이지가 표시 되면 정상적으로 설치가 된 것 입니다.

화면 2 블로그 목록을 선택한 화면

피드 주소에 크롤링할 피드 주소를 입력한 다음 추가하기 버튼을 누릅니다. 피드가 인식할 수 있는 정상적인 XML 형태인 경우 정보를 구해서 자동적으로 추가가 됩니다. <화면 3>은 두 개의 피드를 추가한 화면 입니다. 제목 오른편에 있는 조그만 아이콘을 클릭하면 해당 피드의 내용이 삭제 됩니다.

 

화면 3 추가 버튼을 사용해서 피드를 추가한 화면

 

이제 글 목록 버튼을 누른 다음 피드 목록이 크롤링 되기를 기다립니다. 페이지를 갱신해 주어야(F5) 새로운 피드 목록이 표시됩니다. 최대 크롤링 주기로 지정한 시간만큼이 소요됩니다. 바로 크롤링을 수행하고 싶으면 shell에서 python crawler.py를 수행합니다. <화면 4>는 등록된 피드의 내용을 정상적으로 수집한 화면입니다.. 우측의 랜덤 태그를 클릭하면 거기에 해당하는 글들만 볼 수 있습니다.

 

화면 4 크롤링된 글 목록

 

라이센스

Cairo

     - GNU General Public License (GPL)

 

pytz: http://pytz.sourceforge.net/

     - MIT License

     - Zope Public License

 

feedparser: http://feedparser.org/

     - Python Software Foundation License

 

최신 버전

현재 Cairo의 최신 버전은 0.1 입니다. http://jiniya.net/cairo/cairo-0.1.tar.gz에서 다운 받으실 수 있습니다. 새로운 버전에 대한 정보는 http://jiniya.net/cairo 에서 얻을 수 있습니다.

 

FAQ

Q: Cairo는 오픈 소스 프로젝트 입니까?

A: . 카이로는 GNU General Public License를 따라는 오픈 소스 프로젝트 입니다.

 

Q: Winter of Code란 무엇입니까?

A: http://woc.openmaru.com을 참고하세요.

 

Q: 버그를 발견했습니다. 어디에 알려야 하나요?

A: 이 문서의 연락처 항목에 나와있는 메일 주소로 보내 주시면 됩니다.

 

Q: 메일링 리스트나 사용자 게시판은 없습니까?

A: 아직까지 Cairo에 대한 메일링 리스트나 사용자 게시판은 준비되지 않았습니다.

 

Q: Config.py SYNC_RATE를 수정했습니다. 하지만 크롤링 주기가 변경되지 않습니다.

A: SYNC_RATE가 반영되는 시점은 setup.py가 수행될 때 한번뿐 입니다. 이 후에 변경하고 싶다면 crontab 내용을 수동적으로 수정해 주어야 합니다. crontab –e를 수행한 다음 crawler.py가 있는 줄의 시작 부분에 있는 숫자를(: */10) 원하는 분 단위로 수정해 주면 됩니다.

 

Q: crontab –ecrawler.py가 여러 개 등록되어 있습니다. 괜찮은 가요?

A: 한 개의 Cairo 시스템만 운영하는데 여러 개가 등록된 것이라면 crontab –e를 수행한 다음 중복된 내용을 제거해 줍니다. 복수의 시스템을 운영하기 위해서 여러 개가 등록된 것이라면 삭제할 필요가 없습니다. 하나의 시스템에서 지나치게 많은 크롤러가 등록 되어 있으면 성능상의 문제가 생길 수 있습니다.

 

Q: 데이터를 백업 받는 방법이 없는지 궁금합니다.

A: 아직까지 Cairo 내에서 백업 받는 기능을 지원하지는 않습니다. mysqldump를 사용해서 mysql db 전체를 백업 받거나 별도의 프로그램을 사용해서 Config.py에 지정한 DB_PREFIX에 지정한 문자열로 시작하는 테이블을 백업 받는 방법이 있습니다.

 

Q: Cairo의 메인 페이지 디자인을 변경하고 싶습니다.

A: docs 폴더에 있는 skin.pdf 문서를 참고하세요.

 

Q: 설치 과정을 이해하기 힘듭니다. 과정을 보여주는 동영상은 없나요?

A: http://flvs.daum.net/flvPlayerOut.swf?vid=fd6XpY6vw28$를 참고하세요.

 

Q: 피드 추가가 되지 않습니다. 특정 피드 내용을 수집할 때 에러나 납니다. 이럴 땐 어떻게 해야 하나요?

A: Cairo의 버그일 가능성이 높습니다. 해당 피드의 주소를 codewiz@gmail.com으로 보내 주세요.

 

Q: 타임존에는 Asia/Seoul만 있나요?

A: pytz에서 지원하는 모든 타임존을 사용할 수 있습니다.

 

Q: 수집한 피드 내용을 검색할 수 있는 방법은 없나요?

A: 아직까지 검색 기능을 지원하지 않습니다.

 

Q: 파이썬이 어디에 설치 되었는지 알 수 있는 방법은 없습니까?

A: which python을 하시면 파이썬의 경로를 알 수 있습니다.

 

Q: 관리자만 피드 목록을 수정할 수 있도록 하고 싶습니다. 사용자가 피드 목록을 변경하지 못하도록 막을 수 있는 방법은 없습니까?

A: 계정이나 관리자 기능은 현재 버전에 지원하지 않습니다.

 

추가 정보

- RSS 1.0 http://web.resource.org/rss/1.0/

- RSS 2.0 http://blogs.law.harvard.edu/tech/rss

- ATOM 1.0 http://ko.wikipedia.org/wiki/Atom

 

연락처

신영진(YoungJin Shin) codewiz@gmail.com, http://www.jiniya.net

김현철 earus.mail@gmail.com, http://www.wzd.com

오픈마루 http://www.openmaru.com

Winter of Code http://woc.openmaru.com