#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re, time, datetime
__version__ = '0.1.0'
class TVProgramInfo:
def __init__(self):
self._org_codec = 'sjis'
self.station, self.title, self.subtitle = '', '', ''
self.description, self.performer, self.memo = '', '', ''
self.start_t, self.end_t = (), ()
def _get_codec(self, _h):
_pat = re.compile('; charset=(.*?)\r\n')
_searched = _pat.search(_h)
if _searched:
self._org_codec = _searched.group(1)
def _get_time_t(self, _y, _m, _d, _H, _M):
_d = datetime.date(_y, _m, _d) + datetime.timedelta(hours = _H)
if _M < 0:
_t = (_d.year, _d.month, _d.day, _H % 24, 0, 0, 0, 0, 0)
elif _m < 60:
_t = (_d.year, _d.month, _d.day, _H % 24, _M, 0, 0, 0, 0)
else:
_t = (_d.year, _d.month, _d.day, _H % 24, 59, 0, 0, 0, 0)
return time.localtime(time.mktime(_t))
def _parse_header(self, _h):
self._get_codec(_h)
_lines = _h.splitlines()
for _line in _lines:
_t = _line.split(': ', 2)
if len(_t) == 2:
_key, _value = _t[0], _t[1]
else:
_key, _value = _t[0], ''
if _key == 'station':
self.station = unicode(_value, self._org_codec)
elif _key == 'program-title':
self.title = unicode(_value, self._org_codec)
elif _key == 'program-subtitle':
self.subtitle = unicode(_value, self._org_codec)
elif _key == 'description':
self.description = unicode(_value, self._org_codec)
elif _key == 'performer':
self.performer = unicode(_value, self._org_codec)
elif _key == 'year':
_y = int(_value)
elif _key == 'month':
_m = int(_value)
elif _key == 'date':
_d = int(_value)
elif _key == 'start':
_HM = _value.split(':')
_s_H = int(_HM[0])
_s_M = int(_HM[1])
elif _key == 'end':
_HM = _value.split(':')
_e_H = int(_HM[0])
_e_M = int(_HM[1])
self.start_t = self._get_time_t(_y, _m, _d, _s_H, _s_M)
self.end_t = self._get_time_t(_y, _m, _d, _e_H, _e_M)
def _parse_body(self, _b):
self.memo = unicode(_b, self._org_codec, 'ignore')
def parse(self, src):
_t = src.split('\r\n\r\n', 2)
if len(_t) == 2:
self._parse_header(_t[0])
self._parse_body(_t[1])
else:
self._parse_header(_t[0])
self.memo = u''
if __name__ == '__main__':
import sys
f = file(sys.argv[1])
p = f.read()
f.close()
tvpi = TVProgramInfo()
tvpi.parse(p)
print 'Station:', tvpi.station.encode('euc-jp')
print 'Title:', tvpi.title.encode('euc-jp')
if tvpi.subtitle:
print 'Sub Title:', tvpi.subtitle.encode('euc-jp')
print 'Start:', tvpi.start_t
print 'End:', tvpi.end_t
if tvpi.performer:
print 'Performer:', tvpi.performer.encode('euc-jp')
if tvpi.description:
print 'Description:', tvpi.description.encode('euc-jp')
if tvpi.memo:
print 'Memo:', tvpi.memo.encode('euc-jp')