3 # Rec10 TS Recording Tools
4 # Copyright (C) 2009 Yukikaze
7 import xml.parsers.expat
21 def xml2db(xmlpath, bctypetemp):#bctypeは放送種別で'TE'(地デジ)BS,CSがある。地デジの場合は te数字 が入る
24 p = xml.parsers.expat.ParserCreate()
26 p.StartElementHandler = start_element
27 p.EndElementHandler = end_element
28 p.CharacterDataHandler = char_data
29 parseDocument(p, xmlpath)
30 def writemultitvDB(tvlists):
32 rec10d.rec10db.new_tv(bctype)
33 rec10d.rec10db.add_multi_tv(tvlists)
34 def writemultichDB(chlists):
36 rec10d.rec10db.new_ch(bctype)
37 rec10d.rec10db.add_multi_ch(chlists)
38 def parseDocument(p, xmlfile):
39 f = open(xmlfile, 'r')
42 def start_element(name, attrs):
43 global flags, lastflag, xmldate
46 for (key, val) in attrs.iteritems():
47 xmldate[name + ":" + key] = val
48 def end_element(name):
49 global flags, lastflag, xmldate, db, chlists, tvlists ,bayes
52 ubctype = unicode(bctype)
53 uid = unicode(xmldate['channel:id'])
54 udn = unicode(xmldate['display-name'])
57 bs = chdb.ontvsearch(xmldate['channel:id'])
60 bcsearch = bs['bctype']
61 if ((bcsearch != None) and (bcsearch == bctype)):
62 chlists.append([bctype, uid, udn])
63 xmldate['channel:id'] = ""
64 xmldate['display-name'] = ""
65 elif name == "programme":
66 ubctype = unicode(bctype)
67 uch = unicode(xmldate['programme:channel'])
68 ustart = unicode(xmldate['programme:start'].replace(" +0900", ""))
69 ustop = unicode(xmldate['programme:stop'].replace(" +0900", ""))
70 utitle = unicode(xmldate['title'].replace(",", "-"))
71 udesc = unicode(xmldate['desc'])
72 ulongdesc = unicode(xmldate['longdesc'])
73 ucategory = unicode(xmldate['category'])
74 tch=chdb.ontvsearch(uch)
76 if tch.get('bctype',"")==ubctype:
77 bt=bayes.get(tch['chtxt'],["","",0])
78 bt2=[bt[0]+utitle+" ",bt[1]+udesc+" "+ulongdesc+" ",bt[2]+1]
79 bayes[tch['chtxt']]=bt2
80 tvlists.append([ubctype, uch, ustart, ustop, utitle, udesc,ulongdesc,ucategory])
81 if auto_rec.calc_key(chtxt, utitle, udesc+" "+ulongdesc):
85 xmldate['longdesc'] = ""
86 xmldate['category'] =""
89 writemultichDB(chlists)
92 writemultitvDB(tvlists)
94 dtb=datetime.datetime.now()
95 for ct,list in bayes.items():
96 auto_rec.update_recall(ct,list[0],list[1],list[2])
97 dtb=datetime.datetime.now()-dtb
98 print bctype + " epg取り出し終了"
99 print str(dtb.days * 24 * 60 * 60 + dtb.seconds)+"second taken for updating bayes-auto DB ."
102 global flags, lastflag, xmldate
103 data = data.replace("\n", "")
104 data = data.replace(" ", "")
105 data = data.replace("\"", "")
106 data = data.replace("\'", "")
108 datat = zenhan.toHankaku_ABC123(data)
111 data = datat.encode('utf-8')
112 if xmldate.has_key(lastflag):
113 if xmldate[lastflag] != data:
114 xmldate[lastflag] += data
116 xmldate[lastflag] = data