img 태그의 이미지 다운로드

Posted 2008/07/01 01:41, Filed under: Python Story

동아리 게시판을 감시하고 새로운 글이 올라올때마다 메일로 전송하는 프로그램을 제작했는데
문제점이 한가지 있었다.

그냥 메일로만 받는다면 상관없었지만 이메일을 다시 MMS로 전송해주는 메일서비스를 통해
핸드폰에서 이미지를 보게 되면 img 태그로된 이미지는 핸드폰에서 표시되지 않는다는 것이다.
MMS는 이미지를 첨부할수 있는것이지 img 태그의 url 을 찾아가서 보여주는것이 아니기 때문에 당연하다.

그래서 html본문에서 img 태그가 있는 부분의 이미지를 다운로드 받고
이를 첨부해서 전송해야 하는 문제가 있었는데, 지금까지 미루고 있다가
7월 7일 부터 연수를 들어가야 하는데 인터넷도 못하고 하니까
이미지가 있는 게시글의 경우 궁금할것 같아서 한번 만들어 보았다.

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

class imageDownload:
    def __init__ (self, text, postDiv="Test"):
        self.html = text
        self.postDiv = str(postDiv)
        self.imageUrlList = []
   
    def findImgTag (self):
        from BeautifulSoup import BeautifulSoup
        soup = BeautifulSoup(self.html.replace('<![CDATA[',''))
        for item in soup.findAll('img'):
            self.imageUrlList.append(item['src'])

    def allDownload (self):
        self.findImgTag()
        for count, imageUrl in enumerate(self.imageUrlList):
            self.oneDownload(imageUrl, count)

    def oneDownload (self, imageUrl, count):
        import urllib2
        image = urllib2.urlopen(imageUrl)
        fileName = 'image_' + self.postDiv + '_' + str(count) + '.jpg'
        imageFile = open(fileName, 'wb')
        imageFile.write(image.read())
        imageFile.close()

import unittest
class imageDownloadTest(unittest.TestCase):
    def testfindImgTag (self):
        text = '<![CDATA[ <IMG src="http://iscert.org/g4//data/geditor/0806/598215854_e5d205f2_BDC3C7E8.jpg"><BR><BR><BR><BR>다들 거의 끝나가죠??<BR>벌써 끝나신 분도 있던데=ㅅ=<BR><BR>조금만 힘내세요~<BR>몇일만 더 날세면 됨= _=ㅋ<BR><BR><FONT size=4><STRONG><FONT size=5>화이팅~~</FONT><BR></STRONG></FONT><BR><IMG src="http://manian.dreamwiz.com/files/attach/images/1680290/2755272/112686439372312.jpg">]]>'
        a = imageDownload(text)       
        a.findImgTag()
        self.assertEquals(a.imageUrlList , ['http://iscert.org/g4//data/geditor/0806/598215854_e5d205f2_BDC3C7E8.jpg','http://manian.dreamwiz.com/files/attach/images/1680290/2755272/112686439372312.jpg'])
   
    def testallDownload (self):
        text = '<![CDATA[ <IMG src="http://iscert.org/g4//data/geditor/0806/598215854_e5d205f2_BDC3C7E8.jpg"><BR><BR><BR><BR>다들 거의 끝나가죠??<BR>벌써 끝나신 분도 있던데=ㅅ=<BR><BR>조금만 힘내세요~<BR>몇일만 더 날세면 됨= _=ㅋ<BR><BR><FONT size=4><STRONG><FONT size=5>화이팅~~</FONT><BR></STRONG></FONT><BR><IMG src="http://manian.dreamwiz.com/files/attach/images/1680290/2755272/112686439372312.jpg">]]>'
        a = imageDownload(text)
        a.allDownload()

    def testoneDownload (self):
        a = imageDownload('test', 'OneDownTest')
        a.oneDownload("http://iscert.org/g4//data/geditor/0806/1982343339_54400aa9_SN150950.JPG",0)

if __name__ == '__main__':
    unittest.main()

음;; 코드를 깔끔하게 보여주는 티스토리 플러그인 같은거 찾아봐야겠다;; 너무 지저분 ㅠ.ㅜ
첨부파일로도 제공해드리겠습니다 ^^ python 은 코드의 띄어쓰기 하나로도 실행이 안되니 ^^ㅋ

아래 부분은 테스트를 위해서 작성한 코드이고,
윗부분의 imageDownload클래스가 실제 html 에서 img 태그의 이미지를 다운로드 받는 역할을 한다.

imageDownload 클래스를 만들고 사용한지는 1주가 넘어가지만
이제서야 공개하게 되는 이유는... 나도 이런 정보를 공유해야겠다는 생각에서 였다.

웹 진화론이라는 책을 읽으면서 느낀점이 많았는데 그중 하나가
일본인의 경우(한국인도 비슷한것 같다.) 자신의 지식을 공유하거나 알리는걸 꺼려한다.
그에 반해 미국인의 경우에는 자기가 알고 있는 지식이 사소하고 다들 알만한것임에도 엄청난 것처럼 주장하고
사람들에게 많이 알린다고 한다.

솔직히 나는 python을 혼자 배웠고 인턴경험도 없기 때문에 내가 코딩하는 스타일이 효율적인지에 대한 생각을 매번 하고 있었다.
그러던중에 내 코드를 블로그에 올리면 다른사람이 보고 더 좋은 방향을 알려주지 않을까 하는 생각에 이제부터 만들어가는 소스코드들을 공개해보고자 한다.

제 코드를 보시고 참고해서, 좀더 효율적인 의견을 많이 많이 주시면 감사하겠습니다. ^^
이올린에 북마크하기(0) 이올린에 추천하기(0)

Trackback URL : http://seapy.com/trackback/124

  1. # BlogIcon ihUmaN 2008/07/01 10:04 Delete Reply

    http://allgd.net/s2h
    여기서 언어별로 하이라이트 해줘요~

    1. Re: # BlogIcon nakada 2008/07/01 14:02 Delete

      정말 좋은 서비스네요 ^^
      그런데 배경색을 SPAN으로 해서인지
      블로그에 그대로 넣으면 별로네요 ㅠ.ㅜ
      DIV에 배경색을 따로 넣는 작업을 해야할듯 싶어요

Leave a comment

Afreecom 간단한 사용법

Posted 2008/05/19 13:13, Filed under: Python Story

아프리카 Tv 알리미를 표방한 Afreecom 서비스의 간단한 사용 방법입니다.

준비사항
1. 오픈아이디
    : 하나의 아이디로 여러 사이트에서 사용할수 있는 개념입니다.
      오픈아이디를 제공하는 업체에서 한번 가입을 하게되면
      오픈아이디를 제공하는 다른 웹 사이트에서 같은 아이디와 비밀번호로 로그인을 하게되고,
      웹서비스 제공자는 회원의 개인정보를 알수가 없습니다. 비밀번호를 가지고 있지 않다는 것입니다.
      자세한 설명 및 오픈아이디 가입은 다음 오픈ID 혹은 myid.net 을 참고하시고 가입하세요
      둘중 어디라도 상관없습니다.
2. SMS 알림이 제공되는 이메일
    : 기본적으로 Afreecom 서비스는 이메일로 아프리카 방송 여부를 알려주게 됩니다.
      하지만 이메일이 오면 SMS로 전송되는 메일서비스를 가지고 계시면 핸드폰 SMS로 바로
      받을수 있습니다. 공짜로 제공해주는 사이트로는 아레오 메일이 있습니다.
      아레오 메일은 메일이 오면 핸드폰 SMS로 제목을 알려줍니다. 물론 공짜입니다.
      하지만 새벽시간이나 가끔 전송이 잘 안된다는 단점이 있습니다.
      아레오 메일의 가입과 설정은
      링크된 글(http://wikidocs.net/mybook/read/page?pageid=154)의 메일도착 알림기능부분을 참고하세요.
      그 외에 다음, 네이버 등 무료메일서비스에서 월 900~1500원을 결제하게 되면
      메일을 핸드폰 SMS로 사용하시는 경우 해당 메일을 사용하시면 아주 전송이 잘됩니다.
자 이제 준비는 끝났습니다.
Afreecom 에 접속해 보겠습니다.

초기화면이 다음과 같이 나오게 됩니다.
사용자 삽입 이미지

제일 하단에 있는 Open ID 부분에 가지고 있는 오픈아이디를 입력하고 login 을 누르게 되면
해당 오픈 ID 서버와 연결이 되면서 인증을 거치게 됩니다.
이 PC에서 항상 로그인을 체크하시면 다음부터는 자동으로 로그인이 되있습니다.
(PC방이나 공용컴퓨터에서는 체크하지 마세요)

사용자 삽입 이미지

여기서 승인을 누르게 되면 앞으로 항상 Afreecom 에서 오픈 ID로 로그인을 할때마다
승인을 묻는 창이 뜨지 않습니다. 이번만 승인을 하면 로그인 할때마다 이런 창이 뜨게 됩니다.

사용자 삽입 이미지
승인을 누르게 되면 원래 페이지로 돌아오게 되고
위와같이 오픈 ID로 로그인이 완료된 화면을 확인 할 수 있습니다.

자 이제 본격적으로 Afreecom 가입을 시작하겠습니다.
Afreecom 가입은 가입이라기 보다는 이메일 주소 입력입니다.
위에서 말했던 아레오 메일이나 SMS지원하는 메일을 적어주시면 됩니다.
혹은 네이트 메일등 자신이 쓰는 메일로 하셔도 되구요(SMS 알림은 안되겠죠?)
사용자 삽입 이미지
여기서 오픈 ID 부분은 자동입력되는 부분입니다. 수정하실수 없습니다.
아레오 닷컴 이메일 혹은 자신의 이메일을 적고 Afreecom 가입버튼을 누르면 가입이 완료됩니다.

가입을 완료햇으면 Afreecom 알림 신청을 해보겠습니다.
첫 메뉴로 돌아와서 Afreecom 신청을 하게 되면
사용자 삽입 이미지
위와같이 이미 신청한 내역과 알리미 새로추가 부분이 있습니다.
신청한 내역이 없는 신규가입자의 경우에는 아무것도 없겠지요 ^^
알리미는 아직은 테스트 단계라 1명당 2개의 알림만 추가 할수 있도록 했습니다.
오픈 ID부분은 역시 자동입력되는부분입니다. BJ ID 부분에서 원하는 BJ의 방송국을 선택하고
알리미 전송여부에 체크 한다음에 알리미를 추가하게 되면 신청이 완료됩니다.
새로고침을 해보면 신청현황에 들어가 있는것을 확인 할 수 있습니다.
알리미 전송여부에 체크를 해제하게 되면 메일로 알림이 가지 않습니다.
알리미를 삭제하지 않고 일시중지하실때 사용하시면 됩니다.

지금 제공하는 BJ 는 6명정도 밖에 되지 않습니다.
BJ 의 추가는 저만 할 수 있습니다. 혹시 원하시면 댓글 남겨주시면 제가 판단해보고 추가하겠습니다.
  • nakada / 나카다방송국 / (제 방송국입니다.; 방송안합니다.)
  • hungryfood / 돼지방송국 / (엄마가 방송중 들어온 방송으로 유명하죠-_-)
  • sooki1220 / 완소김이브ㅠ.ㅜ / (Afreecom 서비스를 만들게한 장본인 입니다.)
  • harotv / 하로티비 / (여러가지 스포츠나 공중파 볼때 사용)
  • randh / 레나 / (그냥 ^^ㅋ 목소리가 이쁘세요)
  • zpsyddl / 유빈방송 / (구혜선 닮으신것도 같고 노래 불러주십니다.)

    마지막으로 생방송 여부 메뉴를 통해
    가입하지 않은 사용자라도 6명 Bj의 방송상태를 알 수 있습니다.

    전송현황 부분은 아직 구현 계획이 없습니다. =_=

    실제 전송된 메일화면과 SMS 화면은 다음과 같습니다.
    (참고로 저는 아레오 메일이 SMS를 제대로 못보내서 다음 메일에 메일알림 plus 사용중입니다. MMS죠)

    사용자 삽입 이미지

    (이메일 전송화면)

    사용자 삽입 이미지

    (핸드폰 전송화면)
  • p.s Afreecom 서비스는 5~10분 간격으로 방송여부를 체크하기 때문에 10분정도의 오차가 있을수 있습니다.

    이올린에 북마크하기(0) 이올린에 추천하기(0)

    Trackback URL : http://seapy.com/trackback/117

    1. # 서신동민 2008/05/23 22:51 Delete Reply

      어려워ㅜㅜ

    Leave a comment

    아프리카 TV 방송알리미

    Posted 2008/05/14 01:23, Filed under: Python Story

    사용자 삽입 이미지

    나는 평소에 컴퓨터를 하면서 다중작업을 한다.
    한가지 프로그램만 띄어놓고 작업하는 경우가 없다.

    노래를 틀어놓거나 1박 2일 동영상을 보면서
    인터넷이나 프로그래밍을 한다.

    노래만 듣기에는 눈이 심심하다.
    1박2일은 너무 많이 봤다.
    그래서 아프리카 TV를 많이 시청하는 편이다 ^^

    아프리카 TV에는 다양한 성격의 BJ 들이 많아서 참 재미있다.
    나는 채팅은 안하고 화면만 보면서 다른일을 하지만 참 재미있다.

    그중에서도 김이브님 방송을 매우 좋아라 한다. ㅠ.ㅜ
    근데 김이브님은 방송을 새벽 2시에 종종 시작하시고 ㅠ.ㅜ
    가끔 게릴라로 방송을 하시기 때문에 시간맞춰서 보기 참 힘들다.

    그래서 !!!
    아프리카 TV 알리미를 제작하게 되었다.
    원래의 취지는 김이브님 방송이 시작되면 SMS 로 알려주는 시스템이었다.
    그러다가 다른사람도 혹시 필요할까 싶어서 완전한 웹서비스 형태로 만들려다 보니 생각보다 시간이 걸린다.;

    지금까지 완료한거는 새로운 BJ의 방송국을 추가하는 기능(나만 알고있는 임시 비번이 필요하다. ㅋ)
    BJ리스트에 대한 방송여부를 알려주는 기능뿐이다.

    앞으로 추가할 기능은...
    회원가입을 받고 -> 해당 회원에 대한 등급을 지정할수 있고 -> 등급별로 SMS 알림을 해주는거다
    근데 이건 사람들이 원할 경우이고,
    우선은 나혼자 SMS 로 받는 기능을 추가할 것이다. ^^

    사용자 삽입 이미지

    p.s Afreecom 의 의미?
         : 아프리카에 미국방부 사령부가 창설된다고 한다.
           새로 창설되는 사령부는 아프리카 지역의 모든 미국 정부기관을 통제하는 기구라고 한다. 그래서 사람들이 africa command 을 줄여서 africom 이라고 부른다고 해서 나도 아프리카 TV를 통제하고자??;;; afreecom 이라고 지었다.

    p.s2 지금 현재는 김이브님 방송이 없기 때문에 역시나 아주 좋아라 하는 유빈님 방송을 보면서 작업을 하고있다 ^^ 볼때마다 생각하지만 유빈님은 구혜선을 닮았다.

    이올린에 북마크하기(0) 이올린에 추천하기(0)

    Trackback URL : http://seapy.com/trackback/115

    1. # bong_gus 2008/05/14 13:41 Delete Reply

      http://live.afreeca.com:8057/afreeca/index.php?control=FrameBroad
      이거에서 즐겨찾기만 빼오는 방법 없나요?

      1. Re: # BlogIcon nakada 2008/05/14 23:52 Delete

        어제 언뜻 즐겨찾기 빼오는걸 해봤던거 같은데
        지금 해보려니 잘 안되네요;
        기본적인 방법으로는 로그인을 하고 즐겨찾기를 가져올수 밖에 없을것 같습니다.

    2. # bong_gus 2008/05/15 01:11 Delete Reply

      로그인하고 가져오는 방법은 무엇인가요?

      1. Re: # BlogIcon nakada 2008/05/15 17:09 Delete

        Python 같은 경우에는 ClienForm 을 이용해서 로그인을 하기도 하구요, 패킷을 브라우저에서 로그인할때와 똑같이 만들어서 전송하는 방법이 있겠네요. 간단한 게시판의 경우에는 GET 방식으로 전송할테고 일반적으로는 POST 방식으로 전송하겠죠. 비밀번호가 암호화되서 전송된다면 그 암호화 방식을 알아야 하지만 일반적인 웹사이트 로그인은 암호화를 하지 않으니 패킷수집 해보면 알수 있을겁니다.

    3. # BlogIcon celebrety naked 2008/05/23 05:02 Delete Reply

      걸출한 디자인! 좋은 디자인.

    4. # BlogIcon taylor campbell pan 2008/05/23 05:36 Delete Reply

      저에서 유사한 역사는 이었다.

    Leave a comment

    코드 트레이닝

    Posted 2008/05/01 00:37, Filed under: Python Story
    평소 RSS를 통해 구독하고 있던 OK 괜찮아 다 잘 될거야 에
    오늘 초보개발자의 알고리즘 도전이라는 포스트가 올라와서 유심히 보던중 +_+
    테스트 케이스부터 만들고 시작하는것을 보고

    Python 작성에 TDD를 실제 적용해보고자 하던차에 잘됬다고 생각하고 저도 한번 해보았습니다.
    퀴즈문제는 초보 개발자 코드 트레이닝, Part 알고리즘과 성능 이 링크에 있습니다.

    우선 TDD를 적용하고자 했던 만큼 테스트 코드를 먼저 만들었습니다.
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-

    import unittest
    from ArrayEiBo import *

    class ArrayTest(unittest.TestCase):
        def testeither (self):
            listA = [1,3,4,5,6,9,7]
            listB = [4,5,8,9,10,15,-1]
            ar = ArrayEiBo()
            self.assertEquals(ar.either(listA, listB), [4,5,9])

        def testboth (self):
            listA = [1,3,4,5,6,9,7]
            listB = [4,5,8,9,10,15,-1]
            ar = ArrayEiBo()
            self.assertEquals(ar.both(listA, listB), [-1,1,3,4,5,6,7,8,9,10,15])

        def testisSubstring (self):
            first = ('a', 'b', 'c')
            second = ('a', 'c' , 'b', 'c')
            third = ('a', 'a', 'b', 'c')
            ar = ArrayEiBo()
            self.assertEquals(ar.isSubstring(first, second), False)
            self.assertEquals(ar.isSubstring(first, third), True)

        def testmatch (self):
            first = ('(', '[', '<', '{', '}', '>', ']', ')')
            second = ('(', '[', '<', '{', '>', '}', ']', ')')
            third = ('(', 'a', 'c', ')', '[', '{', '}', ']')
            fourth = ('<', '[', '<', '{', '}', '>', ']', ')')
            fifth = ('a', '[', '<', '{', 'a' ,'}', '>', ']')
            sixth = ('a', '[', '>')
            ar = ArrayEiBo()
            self.assertEquals(ar.match(first), True)
            self.assertEquals(ar.match(second), False)
            self.assertEquals(ar.match(third), True)
            self.assertEquals(ar.match(fourth), False)
            self.assertEquals(ar.match(fifth), True)
            self.assertEquals(ar.match(sixth), False)

    if __name__ == '__main__':
        unittest.main()

    테스트 코드는 퀴즈에 나왔던 기본적인 것 이외에도
    예외적으로 테스트해야되겠다 싶은것 몇개를 추가했습니다.
    이렇게 테스트코드를 만드는 방식이 맞는지 모르겠네요

    저는 both 와 either 을 실행함에 있어서 최종결과에서 정렬을 했습니다.

    퀴즈문제의 포스트에 나와있던 시간체크나 성능 최적화에는 신경을 쓰지 못한점이 아쉽지만,
    TDD 를 실천해보고 재미있다는 느낌을 얻은게 큰 소득이랄까요?
    리팩토링할때도 테스트 코드가 있으니 좀더 명확하고 코드에 자신감이 생기더군요

    마지막 match 함수의 경우에는
    너무 긴 함수가 제작된게 아닌가 싶어서 리팩토링도 해주어야 할듯 싶구요

    앞으로 코드 골프나 퀴즈문제를 더 많이 풀어보면서
    알고리즘을 최적화하는 방식을 더 공부해야겠다는 생각이 들었습니다.

    제가 작성한 소스 코드는 아래 첨부합니다.
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-

    class ArrayEiBo:
           
        def __init__ (self):
            pass

        def either (self, listA, listB):
            eitherList = []
            for item in listA:
                if item in listB:
                    eitherList.append(item)
            eitherList.sort()
            return eitherList
           
        def both (self, listA, listB):
            noeitherList = []
            for item in listA:
                if item not in listB:
                    noeitherList.append(item)
            bothList = noeitherList + listB
            bothList.sort()
            return bothList

        def isSubstring (self, listA, listB):
            isSub = False
            for startNum in range(len(listB)-len(listA)+1):
                if listA == listB[startNum:startNum+len(listA)]:
                    isSub = True
                    break
            return isSub

        def match (self, listA):
            isMatch = False
            dicDefBracket = {'<':'>','[':']','{':'}','(':')'}
            listOnlyBracket = []

            for item in listA:
                if (item in dicDefBracket) or (item in dicDefBracket.values()):
                    listOnlyBracket.append(item)
           
            adjustCount = 0
            for count in range(len(listOnlyBracket)):
                count += adjustCount
                if listOnlyBracket[count] in dicDefBracket:
                    continue
                elif (count-1 >= 0) and (dicDefBracket[listOnlyBracket[count-1]] == listOnlyBracket[count]):
                    listOnlyBracket.pop(count-1)
                    listOnlyBracket.pop(count-1)
                    adjustCount -= 2
                else:
                    break

            if len(listOnlyBracket) == 0:
                isMatch = True
           
            return isMatch

    이올린에 북마크하기(0) 이올린에 추천하기(0)

    Trackback URL : http://seapy.com/trackback/114

    1. 코드 트레이닝 Part.2 알고리즘과 성능.

      Tracked from RUie's room .. 2008/05/05 04:19 Delete

      코드 트레이닝 Part2. 알고리즘과 성능. <- 위 사이트에 대한 트랙백 입니다. 파이썬을 공부해야 하는 일이 있어서, 공부하는 셈 치고 작성해 봤습니다. 언어 자체에 기능이 많으니 사용이 편리한게 많은 것 같네요 .. 1, 2번 문제인 Both, Either입니다. * 파이썬의 경우 List가 기본 자료형이기 때문에 지원이 좋습니다. 간단하게 리스트에 두 리스트를 비교한 후에 리턴해 줍니다. #Both, Either def both(xs, ys)..

    1. # blueiur 2008/05/05 04:21 Delete Reply

      안녕하세요, 코드 잘 보고 갑니다.
      1년 전쯤에 한번 들렀다가 포스트 내용들의 내공에 상당히 놀랐던 블로그인데 이런 계기로 다시 한번 들르게 되네요, 나이가 많지 않으신것 같은데 내공이 대단하신듯 하네요~ 부럽습니다! ^^

      1. Re: # BlogIcon nakada 2008/05/07 12:09 Delete

        Python 으로 하는건 조금 자신있는데
        다른언어가 잘 안되서 걱정이죠 ^^
        내공이랄것도 없습니다.;;
        좋은 포스트 많이 올릴테니 자주와주세요 ^^

    Leave a comment

    한RSS 중요한글 검색

    Posted 2008/04/13 01:39, Filed under: Python Story
    저는 한RSS에 하루에 5번이상 접속하고 있습니다.
    제가 생각해도 저는 정보 중독증 이거든요 ^^;
    그런이유로 중요한 정보다 싶은건 한RSS 중요한글로 체크합니다.
    하지만 문제는 한RSS에서는 유저 개인의 중요한글 검색이 되지 않습니다.
    1,000개의 중요한글 저장공간을 제공하지만, 검색이 안된다는건 효율적이지 못하지요
    대안으로는 아웃룩과 연동해서 중요한글을 읽어온후에 아웃룩에서 검색하면 되겟지만

    저는 아웃룩을 설치조차 하지 않기 때문에 한RSS 중요한글 검색을 만들었습니다.

    주소는 http://py.seapy.com/vipsearch 입니다.

    한RSS 중요한글이 사용자별로 다르기때문에 검색을 시도하기 전에
    사용자 아이디와 비밀번호를 입력하고, 검색을 시작하면 됩니다.
    한RSS API를 이용했는데 ApiKey 방식이 아니기 때문에 암호화되지 않은 비밀번호가 필요합니다.
    제가 따로 비밀번호를 저장하거나 그런것은 없기때문에 안심하셔도 됩니다.
    (인증부분에 관해서 보안적으로 우수한 아이디어가 있으시면 리플 부탁드립니다.)


    사용자 삽입 이미지

    제작은 python 으로 하엿습니다.
    기반인 웹프레임워크는 박응용님이 공개해주신 pyframe 를 사용했습니다.
    pyframe 덕분에 며칠만에 쓸만한 서비스를 공개하게 되서 만족스럽습니다.
    이올린에 북마크하기(0) 이올린에 추천하기(0)

    Trackback URL : http://seapy.com/trackback/110

    1. # BlogIcon 성렬 2008/04/16 09:42 Delete Reply

      지난번 "스프링노트로 가져오기"처럼 API 사례에 넣어두었습니다. ^^; (http://www.hanrss.com/help/api/)

      1. Re: # BlogIcon nakada 2008/04/20 12:16 Delete

        감사합니다 ^^ 기능이 좀더 있어야 할텐데;

    Leave a comment

    주말에 Pyframe과 함께

    Posted 2008/03/15 23:57, Filed under: Python Story

    주말에 할일이 없다.

    몇달전까지만 해도 항상 바뻣던것 같았는데
    주말에 하고싶은 것도 많았지만 시간이라는 핑계로 못한것도 많았는데

    이제는 주말에 멀 하고 싶어도 할게 없어져 버렷다.

    그러더중 Pyframe 이 공개되어서 시작하게되었다.
    mytodo위키독스를 보면서 밑에 있는 Powered by pyframe  문구를 보고
    pyframe? python 웹 프레임워크중에 처음들어보네 하면서 관심이 잇었지만
    개인적으로 쓰시는 거라는 말을 들었었는데

    주말을 하루 앞두고 이런 내맘을 아셨는지
    박응용님이 공개를 해주셧다 ^^

    그리고 수많은 질문을 통해서 기본적인 테스트를 완료하게 되었다.

    Django 는 python 프레임워크중에 사람들의 관심을 가장 많이 받고있지만
    처음에 서버세팅하기는 그리 쉽지 않았다. 버전에 따라 바뀌는 사항도 많았다.

    pyframe는 간단히 혹은 그 이상의 프로그램을 만들기에 좋을것 같다는 느낌이 들었다.
    twisted 를 기반으로 작성되어진걸로 보여지는데
    우선 서버설정하기가 매우편하다. 윈도우에서 개발서버로 만들어 놓고
    리눅스에서 그냥 사용하면 된다.

    그래서 주말동안에는 wordfight 서비스를 pyframe 로 포팅하는것을 시작햇다.
    그냥 가만히 있으면 머리에 온갖 안좋은 생각들만 들어서 ....

    ... 내일은 wordfight 의 기본적인 기능만 포팅해보고
    덕진공원에 가서 숨좀 쉬어야 겠다.
    .

    이올린에 북마크하기(0) 이올린에 추천하기(0)

    Trackback URL : http://seapy.com/trackback/106

    1. # BlogIcon classifieds in hous 2008/05/23 04:33 Delete Reply

      관심을 끌. 너가 좋을 동일할 지점을.

    2. # BlogIcon pussy old man 2008/05/23 04:37 Delete Reply

      여보세요, 좋은 아주 위치!

    Leave a comment

    손쉽게 배포되는 웹프로그램

    Posted 2008/01/05 11:43, Filed under: Python Story

    daily python 을 한RSS 에서 받아보고 있다.
    Python 에 관련된 여러가지 정보들이 많이 올라온다.

    그런데 문제는 내가 자세히 보지 않는다는 것이다.
    너무 많기도 하고 ;;

    어쨋든 오늘은 이름이 특이해서 한번 살펴본 Utility Mill 이다.
    perky 님의 블로그에서 이 서비스에대한 설명이 올라와 있었다.

    잠깐 들러본 느낌은 정말 기발하고 재미있었다.
    웹상에서 변수이름을 타입, 크기등과 같이 지정하고
    해당 창 아래에 Python 소스코드를 짜면 된다. 위에서 지정한 변수는
    그냥 전역변수처럼 사용하면 된다.
    그리고 완성된 프로그램은 바로 사용자들에게 보여지게된다.

    참고로 이 서비스에 작성된 프로그램은 모두 GPL을 따른다고 되어있다.
    그래서 다른 사람이 만든 서비스의 소스코드 역시 모두 볼수 있다.

    또한 API도 제공하고 있다.

    현재 제일 인기 있는 서비스는 Goog_Your_Hash
    구글 검색결과에 내 비밀번호가 검색되어지는지 확이하는 유틸이다.
    입력칸에 자신의 비밀번호를 입력하면 해당값을 md5 해쉬하여 해당값으로 구글에서 찾는것이다.

    이올린에 북마크하기(0) 이올린에 추천하기(0)

    Trackback URL : http://seapy.com/trackback/102

    1. # odong 2008/01/07 20:40 Delete Reply

      파이썬 재미있어?
      회사에서 사용하는 언어는 도통 재미가 없네-_-;;

      1. Re: # BlogIcon nakada 2008/01/26 17:25 Delete

        내 나름 재미있어요 ^^
        형도 취미로 하세요 ㅋ

    2. # BlogIcon namoman 2008/01/09 01:22 Delete Reply

      너 마이미니시티라고아냥?? 카운터로 발전하는 심시티 같은건디 소일거리로 괜찮은듯 ㅋㅋㅋ http://namnyuck.myminicity.com/ 거는 내꺼 싸이트 ~!!

      1. Re: # BlogIcon nakada 2008/01/26 17:25 Delete

        몇번 가봤어 ㅋㅋ 내가 인구좀 올려준거다

    Leave a comment

    코드골프 첫 체험기

    Posted 2007/12/08 02:59, Filed under: Python Story

    코드골프란 무엇인가?

    처음에는 perl 골프로 시작햇다고 한다.
    어떤 과제가 주어지고, 이에 따른 소스코드중에서
    제일 적은 사이즈의 소스코드를 제출하는 것이다.

    예전에도 몇번 듣고 흘려 보냈었는데
    오늘 갑자기 해보고 싶다는 생각이 들어서 첫 체험을 해보았다.

    우선 입력은 Standard input 을 받아들이고,
    출력은 Standard output 이어야 했다.
    그리고 소스코드를 올리면 곧바로 해당 코드의 실행이 옳게 되는지 안되는지
    판단해서 알려주고 랭크에 올라가게 된다.
    참고로 python의 경우에 리눅스에서 맨윗줄에 붙이는 #!/usr/bin/env python은
    제거하고 올려도 잘 실행이 되었다 ^^

    문제는 간단했다. 10 x 10의 행렬을 입력받아서 가로 세로의 합들중에
    가장큰 합을 출력하는것이다. 문제이름은 grid_computing 이다.
    아래 문제의 링크가 있다.
    http://codegolf.com/grid-computing

    처음에 작성한 코드의 사이즈는 무려 200바이트를 넘었다 =_=
    그래서 좌절하던중에 좀더 해보자는 심정으로 해본것이 190 -> 170 -> 150 -> 110
    110 까지 줄어드는 순간 왠지 모를 성취감도 느껴졌다.
    단순히 적은용량으로 만든것 때문이 아니라 저 정도 까지 줄이는데
    그동안 잘 사용안했던 python 의 여러 함수들에 대해서 알게 되었기 때문이다.

    그리고 마침내 96 .... 그런데 왠지 모르게 기분이 이상했다.
    python 순위 11.. 음..
    왠지 우리나라 교육현실에서는 10등안에 들면 좋은것 같은 기분이 드는것은 -_-;;

    그래서 해보다가 결국 또다른 잘 안쓰던(내가 모르고 관심을 안가졌던것,, 쓰는것이 훨씬 좋음)
    함수를 찾아내서 지금 86바이트.. 마침내 TOP 10 에 들게 되었다.
    얼마안잇으면 밀려나겠지만 ㅠ.ㅜ(1위부터 6위까지 모두 76바이트다 -_-;;)

    오늘 참 많은것을 알게 되었다.
    내가 python 을 하면서 왠만한 함수는 안다고 생각했던것이 바보같이 느껴졌다.
    앞으로도 코드골프 자주 해봐야겠다 ^^

    사용자 삽입 이미지

    이올린에 북마크하기(0) 이올린에 추천하기(0)

    Trackback URL : http://seapy.com/trackback/100

    Leave a comment

    한RSS 중요한글을 스프링노트로~

    Posted 2007/09/02 02:02, Filed under: Python Story
    이전에 고민한 부분도 있고해서

    잡다한 글을 안올리다 보니.. 블로그 포스트주기가 너무 길어져 버렷다 ;;

    블로그 글도 쓸겸 축구를 보면서 간단히 만들어본 이번 프로그램

    한RSS 에서는 중요한 글을 체크해놓으면 나중에 확인할수가 잇다.
    하지만 중요한글이 1~2개 일때는 상관없지만 당장 10개만 넘어가도 이거참..
    중요한글을 체크햇는지도 기억도 안나고;;

    이런부분을 해결하기 위해 한RSS에서는 Outlook 으로 중요한글을 내보내는 애드인을 제공한다.
    물론 중요한글 전체보기라는 막강한 기능도 존재한다.

    한RSS 에서 제공하는 API 를 이용해
    한RSS 의 중요한글들을 스프링노트의 특정페이지로 옮기는 프로그램을 만들어 보았다.
    내가 생각 하는 프로그램의 장점은
    1. 검색이 가능하다. 중요한글을 체크한거는 같은데 기억이 안날때 스프링노트에서 검색을 하면 쭈룩 뜨게 된다.
    2. 스프링노트에서 글을 쓸때 내부링크를 걸기 쉽다.
    3. 중요한글을 옮기고 한RSS에서는 해제할수 있다. 이게 무슨말인고 하니.. 한RSS 에서는 중요한글을 1,000개까지만 저장을 해준다. 고로 더많은 중요한글을 체크하기 위해서는 주기적으로 지워줘야 한다는 사실!! 이럴때 스프링노트로 이전의 중요한글을 옮기고 리셋시킨후 다시 한RSS 에서 중요한글을 지정하면 되겠다. but.. 사실 이것도 중요한글 백업기능을 이용해서 html이나 xml, 즐겨찾기 형식으로 백업하는 기능이 한RSS 자체적으로 존재한다 -_-;; 한RSS운영자님은 내가생각해논건 다 해놓아서 내가 해봤자 별로 ㅠ.ㅜ

    하지만 이에 못지 않은 단점이 있으니...
    프로그램 실행하기 귀찮다 -_-; 쉘에 접속해서 실행하는것도 귀찮다 ;; 이럴때를 위해 cron에 등록하면 되지만
    문제는 보안이다. 스프링노트 API 의 경우 소스코드상에서 key값이외의 패스워드입력이 필요없지만... 한RSS API는 그냥 비밀번호문자열을 요구하기 때문에 쉘에서 입력하지 않는이상 소스코드안에 비밀번호를 써두어야한다.


    마지막으로, 요즘 오픈API를 제공해주는곳이 많아지면서 예전에 1~2개의 오픈 API 만으로는 할게 없었던것과 달리 좀더 매쉬업 할 거리가 많아진것 같다.
    이올린에 북마크하기(0) 이올린에 추천하기(0)

    Trackback URL : http://seapy.com/trackback/89

    1. # BlogIcon 성렬 2007/09/03 11:52 Delete Reply

      한RSS API 소개페이지에 참고사례로 추가해드렸습니다만, 혹시 괜찮겠지요? ;; ^^b

      1. Re: # BlogIcon nakada 2007/09/04 10:59 Delete

        저야 영광이지요;
        별달리 새로운것도 아닌데 감사합니다 ^^

    2. # BlogIcon namoman 2007/09/06 20:02 Delete Reply

      띄어쓰기좀해..;; =ㅅ= 난 중요 한글 인줄알고 한글화 시켰나? 했자너..ㅋㅋ 중요한 글 <-- 이렇게 말야...ㅋ

    3. # smcs 2008/01/28 15:30 Delete Reply

      안녕하세요 ^^ 이 매시업 프로그램에 대해서 궁금한게 있는데 혹시 도와주실 수 있으시면 이 번호로 연락부탁드릴께요!! 감사합니다.
      011-825-2784

    4. # BlogIcon dick clark new year 2008/05/23 04:55 Delete Reply

      이 위치는 아니라 유익한뿐 재미있는다!

    Leave a comment

    스프링노트 API 읽고 쓰기[Python]

    Posted 2007/08/05 16:35, Filed under: Python Story

    저번 사태 이후로.. 백업을 고심하다가

    내가 가진 자체 서버도 없는터라서 백업방법중 하나로

    스프링노트 API 를 이용해 파일첨부방식으로 하기로 결정하고

    API 를 이용해서 글을 읽고 쓰는것 까지는 햇는데 파일첨부는 아직이다 =_=

    요즘 API 이용해서 무언가를 한다는거에 재미가 들려있다.

    다음 API 이용 대상은 HanRss 너다 !!

    참고로 내가 작성중인 Python 스프링노트 API 읽고 쓰기

    이올린에 북마크하기(0) 이올린에 추천하기(0)

    Trackback URL : http://seapy.com/trackback/88

    1. # 얼음공주 2007/08/21 14:35 Delete Reply

      블로그 구경잘 하였습니다. 블로그에 필요한 동영상, boom4u.net 도 구경 오세요~~

    2. # BlogIcon namoman 2007/08/22 00:28 Delete Reply

      그게 뭐니

    3. # BlogIcon namoman 2007/08/22 00:29 Delete Reply

      그게 뭐니?

      1. Re: # BlogIcon nakada 2007/08/22 01:21 Delete

        머가 머야?

    4. # BlogIcon namoman 2007/08/22 13:15 Delete Reply

      스프링노트 API

      1. Re: # BlogIcon nakada 2007/08/27 00:29 Delete

        스프링노트라고 온라인상에서 메모 비슷하게 하는건데
        그걸 프로그래머가 작성하기 편하게 공개해준거야 ^^ㅋ

    5. # BlogIcon tracy lord porn sta 2008/05/23 04:34 Delete Reply

      걸출한 디자인! 좋은 디자인.

    6. # BlogIcon male breast reducti 2008/05/23 05:06 Delete Reply

      걸출한 뉴스!! 종류 블로그!

    Leave a comment