정확히 언제부터인지는 모르겠지만 현 버젼(1.4)의 스크래치는 42001 포트를 이용한 소켓통신으로 양방향으로 데이터를 전송할 수 있습니다. 이를 이용해서 티스토리에 댓글이 추가되었을때 스크래치에서 알려주는 간단한 샘플을 만들어 보겠습니다.


1. 스크래치

1) 원격 센서 연결 활성화
소켓 통신을 위해서는 스크래치의 관찰 항목 하단의 '센서의 버튼누르기' 명령어 블럭을 마우스로 우클릭합니다. 나오는 메뉴중에 '원격 센서 연결 활성화'를 클릭하고  '원격 센서 연결 켜기' 대화상자가 뜨면 확인 버튼을 클릭합니다. 이로써 스크래치가 소켓통신이 가능한 상태가 됩니다.

2) 메시지 생성
다음은 메시지를 생성합니다. 제어 메뉴의 '방송하기' 명령어 블록을 우클릭하여 '새로 만들기...'를 클릭합니다. 메시지의 이름에 new_cmt를 입력하고 확인 버튼을 클릭합니다.


3) 스크립트
아래와 같이 스크립트창에서 명령어 블럭을 배열합니다. 캡쳐 이미지는 파이썬으로 부터 enw_cmt 메시지를 수신했을 때 동작하는 모습입니다.



2. 테스트 코드

1)  코드

스크래치가 준비되었으면 파이썬을 이용하여 테스트를 해볼 수 있는 간단한 코드를 작성해 보겠습니다. 에디터에서 아래의 소스를 입력하고 scratch.py로 저장합니다. 터미널에서 'chmod +x scratch.py' 명령을 실행하여 파일이 실행 가능하도록 권한을 변경합니다.

  1. #!/usr/bin/python
  2. #  -*- coding: utf-8 -*-
  3. import socket, httplib, re, time
  4. from array import array
  5.  
  6. DELAY_SEC = 5
  7. SCRATCH_PORT = 42001
  8.  
  9. def sendToScratch():
  10.     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  11.     sock.connect(('127.0.0.1', SCRATCH_PORT))
  12.  
  13.     msg = 'broadcast "new_cmt"'
  14.     sdata = array('c', [chr(0), chr(0), chr(0), chr(len(msg)&0xFF)])
  15.  
  16.     sock.send(sdata.tostring() + msg)
  17.     sock.close()
  18.  
  19. prevComment = ""
  20. while True:
  21.     webClient = httplib.HTTPConnection("www.cocoadev.co.kr")
  22.     webClient.request("GET", "/")
  23.     response = webClient.getresponse()
  24.  
  25.     rdata = response.read()
  26.  
  27.     webClient.close()
  28.  
  29.     result = re.search("/[0-9]*#comment[0-9]*", rdata)
  30.  
  31.     curComment = result.group(0)
  32.  
  33.     if curComment != prevComment:
  34.         print ">> New comment"
  35.         prevComment = curComment
  36.         sendToScratch()
  37.     else:
  38.         print "-- No new comment"
  39.  
  40.     time.sleep(DELAY_SEC)

2) 테스트
스크래치가 실행된 상태에서 위의 파이썬 코드를 실행합니다. 처음 한번은 새로운 메시지가 왔다는 이벤트를 보냅니다. 파이썬 시작후에 스크래치에서 'new_cmt' 메시지를 수신하고 해당 블럭이 실행되는 것을 확인하실 수 있습니다.


간단한 테스트 코드를 만들어 보았는데 위와 반대로 스크래치에서 보내는 메시지를 파이썬에서 수신도 가능합니다. 이를 이용하면 스크래치에서 트위터에 글을 내보내는 등 다른 어플리케이션들과 연동하여 다양한 방법으로 스크래치의 활용이 가능합니다. 아래의 파일을 클릭하여 위의 스크래치와 파이썬의 소스를 다운로드 받으실 수 있습니다.




AND

파이썬에서 사용할 수 있는 BeautifulSoup을 이용해 xml 데이터를 sqlite3 DB에 넣는 툴을 만들는 간단한 예입니다.

1. BeautifulSoup 다운로드 및 설치
필요한 파일은 BeautifulSoup 사이트에서 다운로드 받으실 수있습니다. 파이썬 버젼이 2.*이면 3.0* 버젼을 3.*이면 3.1* 버젼중 최신버젼을 다운로드 받습니다. 다운로드가 완료되면 압축을 풀고 터미널에서 아래와 같이 setup.py를 실행합니다.

>python ./setup.py install

2. BeautifulSoup 사용예
1) 셈플 xml 파일 (test.xml)
테스트를 위해 간단히 작성해본 XML 입니다.
<?xml version='1.0' encoding='UTF-8'?>
<alcohol>
    <cate1 tt="술">
        <cate2 tt="소주">  
            <item>참이슬</item>
            <item>처음처럼</item>
            <item>잎새주</item>
        </cate2>   
        <cate2 tt='맥주'>  
            <item>카스</item>
            <item>라거</item>
            <item>하이트</item>
        </cate2>   
    </cate1>    
    <cate1 tt="안주">  
        <cate2 tt="고가">
            <item>회</item>
            <item>등심</item>
            <item>양곱창</item>
        </cate2>
        <cate2 tt="저가">
            <item>참치캔</item>
            <item>날계란</item>
            <item>새우깡</item>
        </cate2>
    </cate1>   
</alcohol>

2) 파이썬 소스파일 (con_data.py)
  1. #!/usr/bin/python
  2. #  -*- coding: utf-8 -*-
  3.  
  4. import sys
  5. import sqlite3
  6. from BeautifulSoup import BeautifulStoneSoup
  7.  
  8. argCount = len(sys.argv)
  9. if argCount is not 3:
  10.     print 'Usage:con_data.py [xml file] [db file]'
  11.     sys.exit(0)
  12.  
  13. xml_file = sys.argv[1]
  14. db_file = sys.argv[2]
  15.  
  16. #XML open
  17. src = open(xml_file)
  18. soup = BeautifulStoneSoup(src)
  19.  
  20. #DB & Table create
  21. db = sqlite3.connect(db_file)
  22. cursor = db.cursor()
  23.  
  24. cursor.execute("CREATE TABLE item(cate1, cate2, name)");
  25.  
  26. #Insert data
  27. for cate1 in soup.alcohol('cate1'):
  28.     query1 = 'INSERT INTO item VALUES("' + cate1['tt'] + '", "'
  29.     print 'CATE1: ' + cate1['tt']
  30.    
  31.     for cate2 in cate1('cate2'):
  32.         query2 = query1 + cate2['tt'] + '", "'
  33.         print   '\tcate2: ' + cate2['tt']
  34.      
  35.         for item in cate2('item'):
  36.             query3 = query2 + item.string + '")'
  37.             print '\t\t' + item.string
  38.  
  39.             cursor.execute(query3)
  40.     print "---------------------"
  41.  
  42. #Close
  43. cursor.close()
  44. db.commit()
  45. db.close()

3) 테스트
아래와 같이 실행하면 test.db가 생성되어 있음을 확인하실 수 있습니다.


해당 사이트에서 문서 페이지를 읽어 보시면 보다 세부적인 기능과 상세한 사용법을 확인하실 수  있습니다.  사용한 con_data.py외 test.xml은 압축하여 첨부하였습니다. 테스트 시에는 터미널에서 chmod +x ./con_data.py로 실행권한을 설정하셔야 합니다.


'기타 > 자잘한 Tip' 카테고리의 다른 글

특정 날짜 요일 구하기  (0) 2012.02.04
sqlite3에서 csv import/export  (0) 2009.08.26
Python에서 sqlite3 사용하기  (1) 2009.08.26
텍스트파일 문자셋 변환 스크립트  (6) 2008.08.25
Xcode에서의 Ruby on Rails  (8) 2008.08.20
AND

개발 툴 2008. 2. 20. 16:10
사용자 삽입 이미지
리눅스 배포본과 마찬가지로 맥 OS X에는 기본적으로 파이썬이 설치되어 있습니다. 터미널에서 > python[enter]을 입력하면 현재 설치된 파이썬의 버젼을 확인할 수 있습니다. OS X 10.4 (타이거)의 경우에는 2.3대 버젼이 설치되어 있습니다.

현재 파이썬의 경우는 2.5.1 버젼이 나와 있으며 파이썬 사이트에서 다운로드 받을 수 있습니다. GUI 환경에서 클릭만으로 설치할 수 있는 OS X 버젼이 따로 있으니 버젼업을 원하시는 분들은 다운로드 받으셔서 설치하시면 됩니다.

사용자 삽입 이미지
설치는 MacPython.mpkg를 더블클릭하면 간단히 설치됩니다. 설치가 완료되면 응용 프로그램 폴더의 MacPython2.5 폴더에 파이썬의 GUI 툴들이 설치됩니다.

좌측은 파이썬 통합개발환경인 IDLE를 실행한 모습입니다.



기존 버젼은  /System/Library/Frameworks/에 위치하지만 맥파이썬으로 설치하면 /Library/Frameworks/에 설치됩니다. 파이썬 실행 파일들은  /usr/bin/에 위치하며 2.3 버젼의 실행파일에 심볼릭 링크되어 있습니다. 아래와 같이 링크를 변경하면 쉘에서도 2.5 버젼을 사용하실 수 있습니다.

> cd /usr/bin/

> sudo ln -s -f /Library/Frameworks/Python.framework/Versions/2.5/bin/python ./python

> sudo ln -s -f /Library/Frameworks/Python.framework/Versions/2.5/bin/pydoc ./

> sudo ln -s -f /Library/Frameworks/Python.framework/Versions/2.5/bin/pythonw ./

이외에 Objective-C와 혼용 해서 사용할 수있게 해주는 PyObjC가 있습니다. OS X 버젼으로 다운로드 받고 설치하면 Xcode에 PyObjC 프로젝트에 관련된 템플릿을 등록시켜 줍니다. OS X 10.5 (레오퍼드)에는 기본으로 설치되어 있다고 하는데 확인하지는 못했습니다.

저는 파이썬을 능숙하게 사용하지 못합니다. 하지만 간단한 용도로 log등의 대용량 텍스트 파일 처리나 DB에서 데이터를 가져와서 재가공해서 넣는 작업, 복잡한 수치 계산, 쉘스크립트 대용으로 매우 유용하게 사용하고 있습니다.

파이썬은 다른 언어와 비교해 시작하기가 매우 쉽고, 용도에 따라 다양한 모듈을 가지고 있으며 강력합니다. OS X, 리눅스는 물론이고 윈도우즈에서도 편리하게 사용할 수 있습니다. IT관련 업무를 하는 분들이 아니더라도 컴퓨터를 이용해 효율적인 작업을 하고 싶은 분들은 잠깐 시간을 투자하여 배워 보시는 것도 괜찮을 것 같습니다.
AND