이 프로그램에서 더 개선됨 : http://qkqhxla1.tistory.com/347
웹툰을 좋아하는 나는 매번 네이버, 다음, 레진코믹스 각각 따로 들어가서
내가 좋아하는 웹툰을 골라서 보는 과정이 조금은 귀찮았다. (매번 클릭하고 찾는 그런 일련의 과정들이.)
그래서 나만의 웹툰 뷰어를 만들어보기로 했다. 실행시키는 즉시 오늘 요일의 모든 웹툰들 중에서, 내가 좋아하는 웹툰들 목록을 파싱해와서 그것들만 따로 뷰어로 보여주는것이다. 매 요일의 웹툰중에서 내가 가장 좋아하는 웹툰은 txt에 적어놓고, 이것만 참조해서 뷰어에 나온다. (원래는 소스코드안에 하드코딩했지만 자주 변경이 일어날것 같아서 txt파일로 변경) 나는 탭을 옮겨다니면서 웹툰을 감상하기만 하면 된다.
실행시키는 즉시 이렇게 뜬다. (참고로 오늘은 월요일.)
탭을 옮기면 다음과 같다.
여기서 웹툰을 눌러서 들어가서 볼 수 있다.
py2exe용 setup.py 는 맨 아래에 재정의.
소스 코드.(일부 수정. 개선점은 아래에 적음.)
# -*- encoding: cp949 -*- from PyQt4 import QtGui from PyQt4 import QtCore from PyQt4.QtWebKit import* import sys import urllib2 import re import time import operator """ my_webtoon = [u'신의 탑',u'낚시신공', #네이버 웹툰 목록. 줄마다 요일이 다름. u'마음의소리',u'하이브',u'하루 3컷', u'복학왕',u'하나(HANA)', u'전자오락수호대',u'제페토', u'갓 오브 하이스쿨', u'후레자식',u'아메리카노 엑소더스', u'무빙',u'왈퐈',u'귀신', #다음 웹툰 목록. 줄마다 요일이 다름. u'파인',u'에스탄시아 3', u'70',u'블랙 베히모스', u'시동',u'늑대처럼 울어라',u'브레이커2',u'체이서', u'무장',u'치삼만화', u'죽음이 본다',u'국민사형투표',u'꽃드림',u'마샬아츠', u'김철수씨 이야기',u'시계',u'미슐랭스타 시즌 3',#레진코믹스 웹툰 목록 u'몽중저택',u'법칙과 순서의 세계',u'레바툰', ] print my_webtoon,'\n'""" my_webtoon = map(lambda x:unicode(x.replace('\n',''),'cp949'),open('webtoon_list.txt','r').read().split(',')) n_today_webtoon = {} def get_today_webtoon(): global n_today_webtoon #오늘차 네이버 웹툰 목록 얻기. days = ['mon','tue','wed','thu','fri','sat','sun'] page = urllib2.urlopen('http://comic.naver.com/webtoon/weekday.nhn').read() today = re.findall('<h4 class="(\D+)"><span>\D+</span></h4>',page.split('<div class="col col_selected">')[1])[0] page = page.split('<h4 class="'+today+'"')[1].split('<h4 class="'+days[days.index(today)+1]+'"')[0] href = re.findall("""<a href="(.*)" .*? class="title" title="(.*)">.*?</a>""",page) for d in href: if d[1].decode('utf-8') in my_webtoon: n_today_webtoon['http://comic.naver.com/'+d[0]] = d[1].decode('utf-8') #오늘차 다음 웹툰 목록 얻기. page = urllib2.urlopen('http://webtoon.daum.net/webtoon/').read().decode('utf-8') today = page.split('<ul class="list_timeline">')[1].split('</ul> <!-- //'+u'연재시간표'+' -->')[0] href = re.findall('<a class="thumb_timeline" href="(.*?)" title="(.*?)">',today) for d in href: if d[1] in my_webtoon: n_today_webtoon['http://webtoon.daum.net/'+d[0]] = d[1] #오늘차 레진코믹스 웹툰 목록 얻기. page = urllib2.urlopen('http://www.lezhin.com/').read() today = page.split('lc.Home.init')[1] toon = re.findall('{"comicId":(.*?),"seq":\d+}',today) for line in toon: try: page = re.findall('"(.*?)","title":"(.*?)".*?,"completed":0,.*?,"days":"(\d+)"',line.decode('utf-8'))[0] today = int(page[2])-1 if int(page[2])-1>=0 else 7 #날짜계산. if today==time.localtime().tm_wday and page[1] in my_webtoon: n_today_webtoon['http://www.lezhin.com/comic/'+page[0]] = page[1] except: pass n_today_webtoon = sorted(n_today_webtoon.iteritems(), key=operator.itemgetter(0)) def main(): global n_today_webtoon get_today_webtoon() naver = u'네이버::'; daum = u'다음::'; lezhin = u'레진::' app = QtGui.QApplication(sys.argv) tabs = QtGui.QTabWidget() for link,name in n_today_webtoon: #웹툰 갯수만큼 탭을 만듬. web = QWebView() web.settings().setAttribute(QWebSettings.PluginsEnabled, True) web.load(QtCore.QUrl(link)) vBoxlayout = QtGui.QVBoxLayout() vBoxlayout.addWidget(web) tab1 = QtGui.QWidget() tab1.setLayout(vBoxlayout) #레이아웃을 위에 만든 vBoxlayout으로. tabs.resize(1100, 700) #탭 하나당 크기 이정도가 적당함. tabs.move(100, 50) #탭을 표시할 위치. 별로 의미없는듯 if link.find('naver') != -1: tabs.addTab(tab1,naver+name) elif link.find('daum') != -1: tabs.addTab(tab1,daum+name) elif link.find('lezhin') != -1: tabs.addTab(tab1,lezhin+name) tabs.setWindowTitle(u'만화 뷰어.') tabs.show() sys.exit(app.exec_()) if __name__ == '__main__': main()
아래는 내게 맞춰진 setup.py 파일.
#-*- coding: cp949 -*- from distutils.core import setup import py2exe, glob setup( windows=['hello.py'], #console=['hello.py']가 아니라 앞을 windows로 주면 보기싫은 콘솔 창이 사라짐. data_files=[ ('C:\\Users\\Ko\\Desktop\\python exe\\imageformats',glob.glob('C:\\Python27\\Lib\\site-packages\\PyQt4\\plugins\\imageformats\\*.*')) ], options = {'py2exe': { 'bundle_files':3, 'dist_dir':'C:\\Users\\Ko\\Desktop\\python exe', 'includes': ['sip','PyQt4.QtNetwork'], #그냥 py2exe로 만들었을때 이러한 모듈이 없다고 에러뜸. 이거 추가. "dll_excludes": ["MSVCP90.dll"] #이거 없다고 exe가 안만들어지는데 굳이 필요 없으므로 필요 없다고 표시해둠. }}, zipfile = None )
5월 13일 개선.
1. 웹툰을 보다가 종료가 되거나 추가하고싶으면 다시 exe를 만들어야했다. 그래서 웹툰 부분을 주석처리하고 webtoon_list.txt파일에서 이름을 받아서 파싱하는걸로 변경.
조금 큰 개선 : http://qkqhxla1.tistory.com/347
'Python > 2.7 for fun.' 카테고리의 다른 글
나만의 편한 프록시 실행파일 만들기 2. (0) | 2015.05.14 |
---|---|
나만의 편한 프록시 실행파일 만들기 1. (방법론) (0) | 2015.04.27 |
네이버 블로그에서 최근에 올라온 음악들 다운받기 2 코딩, xml다루기 (0) | 2015.03.15 |
네이버 블로그에서 최근에 올라온 음악들 다운받기 1 블로그 구조 분석 (0) | 2015.03.15 |
(편의) pyqt를 이용한 gui 만화책 정리 스크립트. (0) | 2015.03.01 |