3 # Rec10 TS Recording Tools
4 # Copyright (C) 2009 Yukikaze
7 import xml.parsers.expat
23 def xml2db(xmlpath, bctypetemp):#bctypeは放送種別で'TE'(地デジ)BS,CSがある。地デジの場合は te数字 が入る
26 p = xml.parsers.expat.ParserCreate()
28 p.StartElementHandler = start_element
29 p.EndElementHandler = end_element
30 p.CharacterDataHandler = char_data
31 parseDocument(p, xmlpath)
32 def writemultitvDB(tvlists):
34 rec10d.rec10db.new_epg_timeline(bctype)
35 rec10d.rec10db.add_multi_epg_timeline(tvlists)
36 def writemultichDB(chlists):
37 for bctype,ontv,dn in chlists:
38 rec10d.rec10db.update_chname_by_ontv_epg_ch(ontv, dn)
39 def parseDocument(p, xmlfile):
40 f = open(xmlfile, 'r')
43 def start_element(name, attrs):
44 global flags, lastflag, xmldate,dtb
47 for (key, val) in attrs.iteritems():
48 xmldate[name + ":" + key] = val
49 dtb=datetime.datetime.now()
50 def end_element(name):
51 global flags, lastflag, xmldate, db, chlists, tvlists ,bayes,dtb
54 ubctype = unicode(bctype)
55 uid = unicode(xmldate['channel:id'])
56 udn = unicode(xmldate['display-name'])
59 bs = chdb.ontvsearch(xmldate['channel:id'])
62 bcsearch = bs['bctype']
63 if ((bcsearch != None) and (bcsearch == bctype)):
64 chlists.append([bctype, uid, udn])
65 xmldate['channel:id'] = ""
66 xmldate['display-name'] = ""
67 elif name == "programme":
68 ubctype = unicode(bctype)
69 uch = unicode(xmldate['programme:channel'])
70 ustart = unicode(xmldate['programme:start'].replace(" +0900", ""))
71 ustop = unicode(xmldate['programme:stop'].replace(" +0900", ""))
72 utitle = unicode(xmldate['title'].replace(",", "-"))
73 udesc = unicode(xmldate['desc'])
74 ulongdesc = unicode(xmldate['longdesc'])
75 ucategory = unicode(xmldate['category'])
76 tch=chdb.ontvsearch(uch)
78 if tch.get('bctype',"")==ubctype:
79 bt=bayes.get(tch['chtxt'],["","",0])
80 bt2=[bt[0]+utitle+" ",bt[1]+udesc+" "+ulongdesc+" ",bt[2]+1]
81 bayes[tch['chtxt']]=bt2
82 tvlists.append([ubctype, uch, ustart, ustop, utitle, udesc,ulongdesc,ucategory])
83 if auto_rec.calc_key(tch['chtxt'], utitle, udesc+" "+ulongdesc):
84 recdb.add_auto_bayes(utitle, tch['chtxt'], ustart,ustop)
87 xmldate['longdesc'] = ""
88 xmldate['category'] =""
91 writemultichDB(chlists)
94 writemultitvDB(tvlists)
96 for ct,list in bayes.items():
97 auto_rec.update_recall(ct,list[0],list[1],list[2])
98 auto_rec.update_recall("ALL",list[0],list[1],list[2])
99 dtb=datetime.datetime.now()-dtb
100 print bctype + " epg取り出し終了"
101 print str(dtb.days * 24 * 60 * 60 + dtb.seconds)+"seconds taken for updating bayes-auto DB ."
104 global flags, lastflag, xmldate
105 data = data.replace("\n", "")
106 data = data.replace(" ", "")
107 data = data.replace("\"", "")
108 data = data.replace("\'", "")
110 datat = zenhan.toHankaku_ABC123(data)
113 data = datat.encode('utf-8')
114 if xmldate.has_key(lastflag):
115 if xmldate[lastflag] != data:
116 xmldate[lastflag] += data
118 xmldate[lastflag] = data