개발/python

파이썬으로 RSS Feed generator 만들기 - 1/2

Dsp 2009. 5. 9. 17:03
이번 예제는 친구들이 워3를 했나안했나 체크해서,
rss로 제공해 주는 rss feed generator입니다. ㅎㅎ

1.
저는 Python으로 할 것이므로 mod_python을 설치/설정합니다.
당연히 PHP등 다른 언어 사용해도 무방.
> 방법 : http://cybershin.x-y.net/tt/188 참고.

2.
이 예제는 특정 사이트를 모니터링하며 해당 정보가 업데이트되면 RSS로 알려주는 예제입니다.
고로 Request가 올때마다 특정 사이트를 읽어서 답하면 너무 늦으므로 프로세스를 2개로 나눠서 실행합니다.
즉, 정보 수집을 맡는 Crawl.py 와 RSS결과를 반환해 주는 rss.py로 분리.

3. Crawl.py는 다음과 같습니다.
crontab 등으로 하루에 몇번만 실행시키면 됩니다.


#!/usr/bin/python
# -*- coding: utf-8 -*-

import urllib2, re, pickle, sys, time
from BeautifulSoup import BeautifulSoup

users = [
'alpakook', 'dspshin', 'soudz', 'milkelf', 'sacrea','again4you'
]

url_head = "http://asialadders.battle.net/war3/ladder/W3XP-player-profile.aspx?Gateway=Kalimdor&PlayerName="

def getInfo( user ):
    url = url_head + user
    contents = urllib2.urlopen(url).read()
    soup = BeautifulSoup( contents )
    B = soup('b', {'class':'small'})
    date = ''
    for b in B:
        if str(b).find(':')>-1:
            date = b.contents[0].strip().encode('ascii')

    level = ''
    lv = soup('div', {'style':"Z-INDEX: 200; LEFT: 75px; POSITION: relative; TOP: -25px"})
    if len(lv)>0:
        body = str(lv[0])
        sp = body.find('Level')
        ep = body[sp:].find('<')
        level = body[sp:sp+ep].strip()
        level = re.sub('\s', '', level)

    return level, date

if __name__=="__main__":
        print sys.version
        print 'run crawl.py : '+ time.strftime("%B %dth %A %I:%M ",time.localtime())
        info = []
        for user in users:
                try:
                        level, date = getInfo(user)
                except:
                        print sys.exc_info()
                else:
                        print user, level, date
                        info.append( (user, level, date) )

        #print info
        f = open('/var/www/war3/info', 'wb')
        pickle.dump( info, f )
        f.close()



>>> 나머지는 다음 글에...