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

« Previous : 1 : ... 3 : 4 : 5 : 6 : 7 : 8 : 9 : 10 : 11 : ... 128 : Next »