OSDN Git Service

epg-longexp fuction added.
[rec10/rec10-git.git] / rec10 / trunk / src / xml2db.py
1 #!/usr/bin/python
2 # coding: UTF-8
3 # Rec10 TS Recording Tools
4 # Copyright (C) 2009 Yukikaze
5 #import sys
6 #import os
7 import xml.parsers.expat
8 import auto_rec
9 import chdb
10 import rec10d
11 import zenhan
12 import datetime
13 import recdb
14 flags = {}
15 lastflag = ""
16 xmldate = {}
17 db = ""
18 bctype = ""
19 chlists = []
20 tvlists = []
21 bayes={}
22 dtb=""
23 def xml2db(xmlpath, bctypetemp):#bctypeは放送種別で'TE'(地デジ)BS,CSがある。地デジの場合は te数字 が入る
24     global db, bctype
25     bctype = bctypetemp
26     p = xml.parsers.expat.ParserCreate()
27     p.buffer_text = True
28     p.StartElementHandler = start_element
29     p.EndElementHandler = end_element
30     p.CharacterDataHandler = char_data
31     parseDocument(p, xmlpath)
32 def writemultitvDB(tvlists):
33     global bctype
34     rec10d.rec10db.new_tv(bctype)
35     rec10d.rec10db.add_multi_tv(tvlists)
36 def writemultichDB(chlists):
37     global bctype
38     rec10d.rec10db.new_ch(bctype)
39     rec10d.rec10db.add_multi_ch(chlists)
40 def parseDocument(p, xmlfile):
41     f = open(xmlfile, 'r')
42     p.ParseFile(f)
43     f.close()
44 def start_element(name, attrs):
45     global flags, lastflag, xmldate,dtb
46     flags[name] = 1
47     lastflag = name
48     for (key, val) in attrs.iteritems():
49         xmldate[name + ":" + key] = val
50     dtb=datetime.datetime.now()
51 def end_element(name):
52     global flags, lastflag, xmldate, db, chlists, tvlists ,bayes,dtb
53     if flags[name] == 1:
54         if name == "channel":
55             ubctype = unicode(bctype)
56             uid = unicode(xmldate['channel:id'])
57             udn = unicode(xmldate['display-name'])
58             #print uid
59             bcsearch = None
60             bs = chdb.ontvsearch(xmldate['channel:id'])
61             if bs != None:
62                 #print bcsearch
63                 bcsearch = bs['bctype']
64             if ((bcsearch != None) and (bcsearch == bctype)):
65                 chlists.append([bctype, uid, udn])
66             xmldate['channel:id'] = ""
67             xmldate['display-name'] = ""
68         elif name == "programme":
69             ubctype = unicode(bctype)
70             uch = unicode(xmldate['programme:channel'])
71             ustart = unicode(xmldate['programme:start'].replace(" +0900", ""))
72             ustop = unicode(xmldate['programme:stop'].replace(" +0900", ""))
73             utitle = unicode(xmldate['title'].replace(",", "-"))
74             udesc = unicode(xmldate['desc'])
75             ulongdesc = unicode(xmldate['longdesc'])
76             ucategory = unicode(xmldate['category'])
77             tch=chdb.ontvsearch(uch)
78             if tch!=None:
79                 if tch.get('bctype',"")==ubctype:
80                     bt=bayes.get(tch['chtxt'],["","",0])
81                     bt2=[bt[0]+utitle+" ",bt[1]+udesc+" "+ulongdesc+" ",bt[2]+1]
82                     bayes[tch['chtxt']]=bt2
83                     tvlists.append([ubctype, uch, ustart, ustop, utitle, udesc,ulongdesc,ucategory])
84                     if auto_rec.calc_key(tch['chtxt'], utitle, udesc+" "+ulongdesc):
85                         recdb.rec_reckey(recdb.REC_BAYES_SUGGEST, utitle, tch['chtxt'], ustart,ustop,"")
86             xmldate['title'] = ""
87             xmldate['desc'] = ""
88             xmldate['longdesc'] = ""
89             xmldate['category'] =""
90         if name == "tv":
91             if len(chlists) > 0:
92                 writemultichDB(chlists)
93             chlists = []
94             if len(tvlists) > 0:
95                 writemultitvDB(tvlists)
96             tvlists = []
97             for ct,list in bayes.items():
98                 auto_rec.update_recall(ct,list[0],list[1],list[2])
99                 auto_rec.update_recall("ALL",list[0],list[1],list[2])
100             dtb=datetime.datetime.now()-dtb
101             print bctype + " epg取り出し終了"
102             print str(dtb.days * 24 * 60 * 60 + dtb.seconds)+"seconds taken for updating bayes-auto DB ."
103     flags[name] = 0
104 def char_data(data):
105     global flags, lastflag, xmldate
106     data = data.replace("\n", "")
107     data = data.replace("  ", "")
108     data = data.replace("\"", "")
109     data = data.replace("\'", "")
110     try:
111         datat = zenhan.toHankaku_ABC123(data)
112     except:
113         datat = data
114     data = datat.encode('utf-8')
115     if xmldate.has_key(lastflag):
116         if xmldate[lastflag] != data:
117             xmldate[lastflag] += data
118     else:
119         xmldate[lastflag] = data