From 4793813e107488b7cf6d74835681ed1d678f9a86 Mon Sep 17 00:00:00 2001 From: wonipapa Date: Wed, 9 Nov 2016 18:08:08 +0900 Subject: [PATCH] =?UTF-8?q?=EB=B2=84=EC=A0=84=201.0.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- epg2xml.py | 432 +++++++++++++++++++++++++++-------------------------- 1 file changed, 220 insertions(+), 212 deletions(-) diff --git a/epg2xml.py b/epg2xml.py index 6d2a898..7a13cd3 100644 --- a/epg2xml.py +++ b/epg2xml.py @@ -1,8 +1,9 @@ -#!/usr/bin/python +#!/usr/bin/env python # -*- coding: utf-8 -*- import os import sys +import httplib import urllib import json import datetime @@ -10,67 +11,50 @@ from bs4 import BeautifulSoup import codecs import socket import re -from xml.sax.saxutils import escape +from xml.sax.saxutils import escape, unescape import argparse reload(sys) sys.setdefaultencoding('utf-8') -__version__ = '1.0.1' +__version__ = '1.0.2' # Set My Configuration -MyISP = 'ChangeThis' # 사용하는 IPTV선택 (ex :KT, LG, SK) -userid = 'ChangeThis' #tvheadend admin 아이디 (ex : admin) -userpw = 'ChangeThis' #tvheadedn admin 비밀번호 (ex : admin) -host = 'ChangeThis' #tvheadend 서버 내부 IP (ex: 192.168.0.2) -port = '9981' #tvheadend port -ChDelimiter = '-SD' #HD채널과 SD 채널 구분자 -offset = 500 # SD Channel Offset Number - SD 채널 사용시 HD 채널과 번호차 -iconurl = '' #TV channel icon url (ex : http://www.example.com/Channels) -default_xml_filename='xmltv.xml' # epg 저장시 기본 저장 이름 (ex: /home/tvheadend/xmltv.xml) -default_xml_socket='xmltv.sock' # External XMLTV 사용시 기본 소켓 이름 (ex: /home/tvheadend/xmltv.sock) +default_icon_url = '' # TV channel icon url (ex : http://www.example.com/Channels) +default_fetch_limit = 2 # epg 데이터 가져오는 기간 +default_xml_filename = 'xmltv.xml' # epg 저장시 기본 저장 이름 (ex: /home/tvheadend/xmltv.xml) +default_xml_socket = 'xmltv.sock' # External XMLTV 사용시 기본 소켓 이름 (ex: /home/tvheadend/xmltv.sock) # Set My Configuration -hostinfo = userid + ':' + userpw + '@' + host + ':' + port - # Set date today = datetime.date.today() -nextday = today + datetime.timedelta(days=1) - -# Get Enabled Channel information -def getMyChannel(): - MyChannelNumber = [] - MyChannelurl = 'http://%s/api/channel/grid?all=1&dir=ASC&limit=999999999&sort=number&start=0' % (hostinfo) - MyChannels = json.loads(urllib.urlopen(MyChannelurl).read()) - for i, MyChannel in enumerate(MyChannels['entries']): - if MyChannel['enabled']: - if ChDelimiter in MyChannel['name']: - MyChannelNumber.append(MyChannel['number'] - offset) - else: - MyChannelNumber.append(MyChannel['number']) - return list(set(MyChannelNumber)) # Get epg data -def getEpg(channelnumber): - Channelfile = os.path.dirname(os.path.abspath(__file__)) + '/' + MyISP + 'Ch.json' +def getEpg(): + Channelfile = os.path.dirname(os.path.abspath(__file__)) + '/Channel.json' ChannelInfos = [] SiteEPG = [] #For epg.co.kr with open(Channelfile) as f: # Read Channel Information file Channeldata = json.load(f) for chinfo in Channeldata: - for i in channelnumber: - if i == chinfo[MyISP+'Ch']: + if chinfo['Enabled'] == 1 : + if MyISP == 'KT' and not( chinfo['KTCh'] is None) : ChannelInfos.append([chinfo['Id'], chinfo['Name'], chinfo['Source'], chinfo['ServiceId']]) + elif MyISP == 'LG' and not( chinfo['LGCh'] is None) : + ChannelInfos.append([chinfo['Id'], chinfo['Name'], chinfo['Source'], chinfo['ServiceId']]) + elif MyISP == 'SK' and not( chinfo['SKCh'] is None) : + ChannelInfos.append([chinfo['Id'], chinfo['Name'], chinfo['Source'], chinfo['ServiceId']]) + # Print Channel information for ChannelInfo in ChannelInfos: ChannelId = ChannelInfo[0] - ChannelName = escape(ChannelInfo[1]) + ChannelName = ChannelInfo[1] ChannelSource = ChannelInfo[2] ChannelServiceId = ChannelInfo[3] writeXML('\t' % (ChannelId)) - writeXML('\t\t%s' % (ChannelName)) - if iconurl: - writeXML('\t\t' % (iconurl, ChannelId)) + writeXML('\t\t' % (ChannelName)) + if IconUrl: + writeXML('\t\t' % (IconUrl, ChannelId)) writeXML('\t') @@ -97,108 +81,82 @@ def GetEPGFromEPG(ChannelInfos): pattern = "Preview\('(.*?)','(.*?)','(.*?)','(.*?)','(.*?)','(.*?)','(.*?)'\)\">.*?<\/a>(.*?)<\/td>" p = re.compile(pattern) ChannelInfo = [ChannelInfos[i:i+5] for i in range(0, len(ChannelInfos),5)] + + html = [] for i in range(len(ChannelInfo)): churl = '' for j in range(len(ChannelInfo[i])): churl += 'checkchannel%5B' + str(ChannelInfo[i][j][3]) + '%5D=' + str(ChannelInfo[i][j][0]) + '&' - - url = 'http://schedule.epg.co.kr/php/guide/schedule_day_on.php?%snext=&old_sub_channel_group=110&old_sub_channel_group=110&old_top_channel_group=2&search_sub_category=&search_sub_channel_group=110&search_top_category=&search_top_channel_group=2&selectday=%s&selectday2=%s&weekchannel=&ymd=%s' % (churl, today, today, today) - u = urllib.urlopen(url).read() - data = unicode(u, 'euc-kr', 'ignore').encode('utf-8', 'ignore') - soup = BeautifulSoup(data,'lxml', from_encoding='utf-8') - html = soup.select('td > a[href^="JavaScript:ViewContent"]') - - for i, cell in enumerate(html): - td = cell.parent - epgdata = p.findall(str(td)) - programName = escape(epgdata[0][1]) - channelId = epgdata[0][2] - startTime, endTime = epgdata[0][3].split('<br>~') - startTime = str(today.year) + '/' + startTime - startTime = datetime.datetime.strptime(startTime, "%Y/%m/%d %p %I:%M") - startTime = startTime.strftime("%Y%m%d%H%M%S") - endTime = str(today.year) + '/' + endTime - endTime = datetime.datetime.strptime(endTime, "%Y/%m/%d %p %I:%M") - endTime = endTime.strftime("%Y%m%d%H%M%S") - category = escape(epgdata[0][4]) - actors = escape(epgdata[0][5]) - producer = escape(epgdata[0][6]) - image = epgdata[0][7] - checkRebroadcast = re.search('rebroadcast', image) - if not (checkRebroadcast is None) : - programName = programName + ' (재방송)' - checkRating = re.findall('7|12|15|19', image) - if len(checkRating) == 0: - rating = '모든 연령 시청가' - else: - rating = '%s세 이상 시청가' % (checkRating[0]) - - episode = None - checkEpisode = re.search('(?<=\()[\d]+', programName) - if not (checkEpisode is None): - episode = int(checkEpisode.group()) - - desc = programName - if episode : desc = desc + '\n회차 : ' + str(episode) + '회' - desc = desc + '\n장르 : ' + category - if actors : desc = desc + '\n출연 : ' + actors - if producer : desc = desc + '\n제작 : ' + producer - desc = desc + '\n등급 : ' + rating - programdata = {'channelId':channelId, 'startTime':startTime, 'endTime':endTime, 'programName':programName, 'desc':desc, 'actors':actors, 'producer':producer, 'category':category, 'episode':episode, 'rating':rating} - writeProgram(programdata) + for k in range(period): + day = today + datetime.timedelta(days=k) + url = 'http://schedule.epg.co.kr/php/guide/schedule_day_on.php?%snext=&old_sub_channel_group=110&old_sub_channel_group=110&old_top_channel_group=2&search_sub_category=&search_sub_channel_group=110&search_top_category=&search_top_channel_group=2&selectday=%s&selectday2=%s&weekchannel=&ymd=%s' % (churl, day, day, day) + u = urllib.urlopen(url).read() + data = unicode(u, 'euc-kr', 'ignore').encode('utf-8', 'ignore') + soup = BeautifulSoup(data,'lxml', from_encoding='utf-8') + html.append(soup.select('td > a[href^="JavaScript:ViewContent"]')) + for row in html: + for i, cell in enumerate(row): + td = cell.parent + epgdata = p.findall(str(td)) + programName = unescape(epgdata[0][1].decode('string_escape')) + channelId = epgdata[0][2] + startTime, endTime = unescape(epgdata[0][3]).split('
~') + startTime = str(today.year) + '/' + startTime + startTime = datetime.datetime.strptime(startTime, '%Y/%m/%d %p %I:%M') + startTime = startTime.strftime('%Y%m%d%H%M%S') + endTime = str(today.year) + '/' + endTime + endTime = datetime.datetime.strptime(endTime, '%Y/%m/%d %p %I:%M') + endTime = endTime.strftime('%Y%m%d%H%M%S') + category = escape(epgdata[0][4]) + actors = escape(epgdata[0][5]) + producer = escape(epgdata[0][6]) + image = epgdata[0][7] + checkRebroadcast = re.search('rebroadcast', image) + if not (checkRebroadcast is None) : + programName = programName + ' (재방송)' + checkRating = re.findall('7|12|15|19', image) + if len(checkRating) == 0: + rating = '전체 연령 시청가' + else: + rating = '%s세 이상 시청가' % (checkRating[0]) + episode = None + checkEpisode = re.search('(?<=\()[\d]+', programName) + if not (checkEpisode is None): + episode = int(checkEpisode.group()) + desc = programName + if episode : desc = desc + '\n회차 : ' + str(episode) + '회' + desc = desc + '\n장르 : ' + category + if actors : desc = desc + '\n출연 : ' + actors + if producer : desc = desc + '\n제작 : ' + producer + desc = desc + '\n등급 : ' + rating + programdata = {'channelId':channelId, 'startTime':startTime, 'endTime':endTime, 'programName':programName, 'desc':desc, 'actors':actors, 'producer':producer, 'category':category, 'episode':episode, 'rating':rating} + writeProgram(programdata) # Get EPG data from KT def GetEPGFromKT(ChannelInfo): channelId = ChannelInfo[0] ServiceId = ChannelInfo[3] - - todayurl = 'http://tv.olleh.com/renewal_sub/liveTv/pop_schedule_week.asp?ch_name=&ch_no=%s&nowdate=%s&seldate=%s&tab_no=1' %(ServiceId, today, today) - nextdayurl = 'http://tv.olleh.com/renewal_sub/liveTv/pop_schedule_week.asp?ch_name=&ch_no=%s&nowdate=%s&seldate=%s&tab_no=1' % (ServiceId, nextday, nextday) - u1 = urllib.urlopen(todayurl).read() - data1 = unicode(u1, 'euc-kr', 'ignore').encode('utf-8', 'ignore') - soup1 = BeautifulSoup(data1,'lxml', from_encoding='utf-8') - - u2 = urllib.urlopen(nextdayurl).read() - data2 = unicode(u2, 'euc-kr', 'ignore').encode('utf-8', 'ignore') - soup2 = BeautifulSoup(data2,'lxml', from_encoding='utf-8') - - html = soup1.find('table', {'id':'pop_day'}).tbody.findAll('tr') - html1 = soup2.find('table', {'id':'pop_day'}).tbody.findAll('tr') - if not (html1 is None) and len(html1) > 0: - html2 = soup2.find('table', {'id':'pop_day'}).tbody.findAll('tr')[0] - else : - html2 = """ - - 00:00 - - - - - - - - """ - html2 = BeautifulSoup(html2,'lxml', from_encoding='utf-8').findAll('tr')[0] - html.append(html2) - - for row1, row2 in zip(html, html[1:]): - for cell1, cell2 in zip([row1.findAll('td')], [row2.findAll('td')]): - programName = escape(cell1[1].text).encode('utf-8') - startTime = cell1[0].text - startTime = str(today) + ' ' + startTime - startTime = datetime.datetime.strptime(startTime, "%Y-%m-%d %H:%M") - startTime = startTime.strftime("%Y%m%d%H%M%S") - endTime = cell2[0].text - if endTime == '00:00' : - endTime = str(nextday) + ' ' + endTime - else : - endTime = str(today) + ' ' + endTime - endTime = datetime.datetime.strptime(endTime, "%Y-%m-%d %H:%M") - endTime = endTime.strftime("%Y%m%d%H%M%S") - category = escape(cell1[4].text).encode('utf-8') - rating = escape(cell1[2].text).encode('utf-8') + epginfo = [] + for k in range(period): + day = today + datetime.timedelta(days=k) + url = 'http://tv.olleh.com/renewal_sub/liveTv/pop_schedule_week.asp?ch_name=&ch_no=%s&nowdate=%s&seldate=%s&tab_no=1' % (ServiceId, day, day) + u = urllib.urlopen(url).read() + data = unicode(u, 'euc-kr', 'ignore').encode('utf-8', 'ignore') + soup = BeautifulSoup(data,'lxml', from_encoding='utf-8') + html = soup.find('table', {'id':'pop_day'}).tbody.findAll('tr') + for row in html: + for cell in [row.findAll('td')]: + epginfo.append([cell[1].text, str(day) + ' ' + cell[0].text, cell[4].text, cell[2].text]) + for epg1, epg2 in zip(epginfo, epginfo[1:]): + programName = epg1[0].decode('string_escape') + startTime = datetime.datetime.strptime(epg1[1], '%Y-%m-%d %H:%M') + startTime = startTime.strftime('%Y%m%d%H%M%S') + endTime = datetime.datetime.strptime(epg2[1], '%Y-%m-%d %H:%M') + endTime = endTime.strftime('%Y%m%d%H%M%S') + category = escape(epg1[2]) + rating = escape(epg1[3]) if rating == 'all세 이상': - rating = '모든 연령 시청가' + rating = '전체 연령 시청가' else: rating = rating + ' 시청가' desc = programName + '\n장르 : ' + category + '\n등급 : ' + rating @@ -208,37 +166,65 @@ def GetEPGFromKT(ChannelInfo): programdata = {'channelId':channelId, 'startTime':startTime, 'endTime':endTime, 'programName':programName, 'desc':desc, 'actors':actors, 'producer':producer, 'category':category, 'episode':episode, 'rating':rating} writeProgram(programdata) - # Get EPG data from LG def GetEPGFromLG(ChannelInfo): - pass + channelId = ChannelInfo[0] + ServiceId = ChannelInfo[3] + epginfo = [] + for k in range(period): + day = today + datetime.timedelta(days=k) + url = 'https://www.uplus.co.kr/css/chgi/chgi/RetrieveTvSchedule.hpi?chnlCd=%s&evntCmpYmd=%s' % (ServiceId, day.strftime('%Y%m%d')) + u = urllib.urlopen(url).read() + data = unicode(u, 'euc-kr', 'ignore').encode('utf-8', 'ignore') + soup = BeautifulSoup(data,'lxml', from_encoding='utf-8') + html = soup.find('table', {'class':'datatable06'}).tbody.findAll('tr') + for row in html: + for cell in [row.findAll('td')]: + epginfo.append([cell[1].text.strip(), str(day) + ' ' + cell[0].text, cell[2].text.strip(), cell[1].find('img', alt=True)['alt'].strip()]) + for epg1, epg2 in zip(epginfo, epginfo[1:]): + programName = epg1[0].decode('string_escape') + startTime = datetime.datetime.strptime(epg1[1], "%Y-%m-%d %H:%M") + startTime = startTime.strftime("%Y%m%d%H%M%S") + endTime = datetime.datetime.strptime(epg2[1], "%Y-%m-%d %H:%M") + endTime = endTime.strftime("%Y%m%d%H%M%S") + category = escape(epg1[2]) + rating = escape(epg1[3]) + desc = programName + '\n장르 : ' + category + '\n등급 : ' + rating + actors = ''; + producer = ''; + episode = None + checkEpisode = re.search('(?<=\()[\d]+', programName) + if not (checkEpisode is None): + episode = int(checkEpisode.group()) + programdata = {'channelId':channelId, 'startTime':startTime, 'endTime':endTime, 'programName':programName, 'desc':desc, 'actors':actors, 'producer':producer, 'category':category, 'episode':episode, 'rating':rating} + writeProgram(programdata) # Get EPG data from SK def GetEPGFromSK(ChannelInfo): channelId = ChannelInfo[0] ServiceId = ChannelInfo[3] - url = 'http://m.btvplus.co.kr/Common/Inc/IFGetData.asp?variable=IF_LIVECHART_DETAIL&pcode=|^|start_time=%s00|^|end_time=%s24|^|svc_id=%s'%(today.strftime("%Y%m%d"), today.strftime("%Y%m%d"), ServiceId) + lastday = today + datetime.timedelta(days=period-1) + url = 'http://m.btvplus.co.kr/Common/Inc/IFGetData.asp?variable=IF_LIVECHART_DETAIL&pcode=|^|start_time=%s00|^|end_time=%s24|^|svc_id=%s' % (today.strftime("%Y%m%d"), lastday.strftime("%Y%m%d"), ServiceId) u = urllib.urlopen(url).read() data = json.loads(u, encoding='utf-8') programs = data['channel']['programs'] for program in programs: programName = program['programName'] if programName: - programName = escape(programName) programName = programName.replace('(재)', ' (재방송)') actors = program['actorName'] if actors: actors = escape(actors) producer = program['directorName'] if producer: producer = escape(producer) startTime = datetime.datetime.fromtimestamp(int(program['startTime'])/1000) - startTime = startTime.strftime("%Y%m%d%H%M%S") + startTime = startTime.strftime('%Y%m%d%H%M%S') endTime = datetime.datetime.fromtimestamp(int(program['endTime'])/1000) - endTime = endTime.strftime("%Y%m%d%H%M%S") - category = program['mainGenreName'] + endTime = endTime.strftime('%Y%m%d%H%M%S') + category = program['mainGenreName'] + '-' + program['subGenreName'] if category: category = escape(category) rating = program['ratingCd'] if rating == '0': - rating = '모든 연령 시청가' + rating = '전체 시청가' else : rating = '%s세 이상 시청가' % (rating) episode = None @@ -251,7 +237,7 @@ def GetEPGFromSK(ChannelInfo): if actors : desc = desc + '\n출연 : ' + actors if producer : desc = desc + '\n제작 : ' + producer desc = desc + '\n등급 : ' + rating - + if program['synopsis'] : desc = desc + '\n' + program['synopsis'] programdata = {'channelId':channelId, 'startTime':startTime, 'endTime':endTime, 'programName':programName, 'desc':desc, 'actors':actors, 'producer':producer, 'category':category, 'episode':episode, 'rating':rating} writeProgram(programdata) @@ -259,86 +245,111 @@ def GetEPGFromSK(ChannelInfo): def GetEPGFromSKY(ChannelInfo): channelId = ChannelInfo[0] ServiceId = ChannelInfo[3] - url = 'http://www.skylife.co.kr/channel/epg/channelScheduleList.do?area=in&inFd_channel_id=%s&inairdate=%s&indate_type=now' % (ServiceId, today) - u = urllib.urlopen(url).read() - data = json.loads(u) - programs = data['scheduleListIn'] - - for program in programs: - programName = program['program_name'] - if programName: programName = escape(programName) - rebroadcast = program['rebroad'] - if rebroadcast == 'Y': programName = programName + ' (재방송)' - actors = program['cast'] - if actors: actors = escape(actors) - producer = program['dirt'] - if producer: producer = escape(producer) - startTime = program['starttime'] - endTime = program['endtime'] - category = program['program_category1'] + '-' + program['program_category2'] - if category: category = escape(category) - rating = escape(program['grade']) - if rating == '0': - rating = '모든 연령 시청가' - else : - rating = '%s세 이상 시청가' % (rating) - episode = program['episode_id'] - if episode : episode = int(episode) - description = program['description'] - if description: description = escape(description) - summary = program['summary'] - if summary: summary = escape(summary) - desc = programName - if episode : desc = desc + '\n회차 : ' + str(episode) + '회' - desc = desc + '\n장르 : ' + category - if actors : desc = desc + '\n출연 : ' + actors - if producer : desc = desc + '\n제작 : ' + producer - desc = desc + '\n등급 : ' + rating - if description: desc = desc + '\n' + description - if summary : desc = desc + '\n' + summary - - programdata = {'channelId':channelId, 'startTime':startTime, 'endTime':endTime, 'programName':programName, 'desc':desc, 'actors':actors, 'producer':producer, 'category':category, 'episode':episode, 'rating':rating} - writeProgram(programdata) + for k in range(period): + day = today + datetime.timedelta(days=k) + url = 'http://www.skylife.co.kr/channel/epg/channelScheduleList.do?area=in&inFd_channel_id=%s&inairdate=%s&indate_type=now' % (ServiceId, day) + u = urllib.urlopen(url).read() + data = json.loads(u, encoding='utf-8') + programs = data['scheduleListIn'] + for program in {v['starttime']:v for v in programs}.values(): + programName = unescape(program['program_name']).replace('lt;','<').replace('gt;','>').replace('amp;','&') + rebroadcast = program['rebroad'] + if rebroadcast == 'Y': programName = programName + ' (재방송)' + actors = program['cast'] + if actors: actors = escape(actors) + producer = program['dirt'] + if producer: producer = escape(producer) + startTime = program['starttime'] + endTime = program['endtime'] + category = program['program_category1'] + '/' + program['program_category2'] + if category: category = escape(category) + rating = escape(program['grade']) + if rating == '0': + rating = '전체 시청가' + else : + rating = '%s세 이상 시청가' % (rating) + episode = program['episode_id'] + if episode : episode = int(episode) + description = program['description'] + if description: description = unescape(description).replace('lt;','<').replace('gt;','>').replace('amp;','&') + summary = program['summary'] + if summary: summary = unescape(summary).replace('lt;','<').replace('gt;','>').replace('amp;','&') + desc = programName + if episode : desc = desc + '\n회차 : ' + str(episode) + '회' + desc = desc + '\n장르 : ' + category + if actors : desc = desc + '\n출연 : ' + actors + if producer : desc = desc + '\n제작 : ' + producer + desc = desc + '\n등급 : ' + rating + if description: desc = desc + '\n' + description + if summary : desc = desc + '\n' + summary + programdata = {'channelId':channelId, 'startTime':startTime, 'endTime':endTime, 'programName':programName, 'desc':desc, 'actors':actors, 'producer':producer, 'category':category, 'episode':episode, 'rating':rating} + writeProgram(programdata) # Write Program def writeProgram(programdata): - channelId = programdata['channelId'] - startTime = programdata['startTime'] - endTime = programdata['endTime'] - programName = programdata['programName'] - desc = programdata['desc'] - actors = programdata['actors'] - producer = programdata['producer'] - category = programdata['category'] - episode = programdata['episode'] - rating = programdata['rating'] - print '\t' % (startTime, endTime,channelId) - print '\t\t%s' % (programName) - print '\t\t%s' % (desc) - if actors or producer: - print '\t\t' - if actors: print '\t\t\t%s' % (actors) - if producer: print '\t\t\t%s' % (producer) - print '\t\t' - print '\t\t%s' %(category) - if episode: - print '\t\t%s' % (episode) - print '\t\t\n\t\t\t%s\n\t\t' % (rating) - print '\t' + channelId = programdata['channelId'] + startTime = programdata['startTime'] + endTime = programdata['endTime'] + programName = programdata['programName'] + desc = programdata['desc'] + actors = programdata['actors'] + producer = programdata['producer'] + category = programdata['category'] + episode = programdata['episode'] + rating = programdata['rating'] + contentTypeDict={'교양':'Arts / Culture (without music)', '만화':'Cartoons / Puppets', '교육':'Education / Science / Factual topics', '취미':'Leisure hobbies', '드라마':'Movie / Drama', '영화':'Movie / Drama', '음악':'Music / Ballet / Dance', '뉴스':'News / Current affairs', '다큐':'Documentary', '시사/다큐':'Documentary', '연예':'Show / Game show', '스포츠':'Sports', '홈쇼핑':'Advertisement / Shopping'} + contentType = '' + for key, value in contentTypeDict.iteritems(): + if category.startswith(key): + contentType = value + print '\t' % (startTime, endTime,channelId) + print '\t\t<![CDATA[%s]]>' % (programName) + print '\t\t' % (desc) + if actors or producer: + print '\t\t' + if actors: print '\t\t\t%s' % (actors) + if producer: print '\t\t\t%s' % (producer) + print '\t\t' + print '\t\t%s' % (category) + print '\t\t%s' % (contentType) + if episode: + print '\t\t%s' % (episode) + print '\t\t\n\t\t\t%s\n\t\t' % (rating) + print '\t' # Write XML def writeXML(data): print data -parser = argparse.ArgumentParser(description=u'EPG 정보를 출력하는 방법을 결정') -cmds = parser.add_mutually_exclusive_group(required=True) -parser.add_argument('-v', '--version', action='version', version='%(prog)s ' + __version__) -cmds.add_argument('-d', '--display', action='store_true', help='EPG 정보 화면출력') -cmds.add_argument('-o', '--outfile', metavar=default_xml_filename, nargs='?', const=default_xml_filename, help='EPG 정보 저장') -cmds.add_argument('-s', '--socket', metavar=default_xml_socket, nargs='?', const=default_xml_socket, help='xmltv.sock(External: XMLTV)로 EPG정보 전송') +parser = argparse.ArgumentParser(description='EPG 정보를 출력하는 방법을 선택한다') +argu1 = parser.add_argument_group(description='IPTV 선택') +argu1.add_argument('-i', dest = 'iptv', choices = ['KT', 'LG', 'SK'], help = '사용하는 IPTV : KT, LG, SK', required = True) +argu2 = parser.add_mutually_exclusive_group(required = True) +argu2.add_argument('-v', '--version', action = 'version', version = '%(prog)s version : ' + __version__) +argu2.add_argument('-d', '--display', action = 'store_true', help = 'EPG 정보 화면출력') +argu2.add_argument('-o', '--outfile', metavar = default_xml_filename, nargs = '?', const = default_xml_filename, help = 'EPG 정보 저장') +argu2.add_argument('-s', '--socket', metavar = default_xml_socket, nargs = '?', const = default_xml_socket, help = 'xmltv.sock(External: XMLTV)로 EPG정보 전송') +argu3 = parser.add_argument_group('추가옵션') +argu3.add_argument('-l', '--limit', dest='limit', type = int, metavar = "1-7", choices = range(1,8), help = 'EPG 정보를 가져올 기간, 기본값: '+ str(default_fetch_limit), default = default_fetch_limit) +argu3.add_argument('--icon', dest='icon', metavar = "http://www.example.com/icon", help = '채널 아이콘 URL, 기본값: '+ default_icon_url, default = default_icon_url) args = parser.parse_args() +if args.iptv: + if any(args.iptv in s for s in ['KT', 'LG', 'SK']): + MyISP = args.iptv + else: + sys.exit() + +if args.limit: + period = args.limit +else: + period = default_fetch_limit; + +if args.icon: + IconUrl = args.icon +else : + IconUrl = default_icon_url if args.outfile: sys.stdout = codecs.open(args.outfile, 'w+', encoding='utf-8') elif args.socket: @@ -347,11 +358,8 @@ elif args.socket: sockfile = sock.makefile('w+') sys.stdout = sockfile -MyChannelNumber = getMyChannel() - writeXML('') writeXML('') -writeXML('') -getEpg(MyChannelNumber) +writeXML('') +getEpg() writeXML('') -