OSDN Git Service

implement longexp.
[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
9 import chdb
10 import rec10d
11 import zenhan
12 flags = {}
13 lastflag = ""
14 xmldate = {}
15 db = ""
16 bctype = ""
17 chlists = []
18 tvlists = []
19 def xml2db(xmlpath, bctypetemp):#bctypeは放送種別で'TE'(地デジ)BS,CSがある。地デジの場合は te数字 が入る
20     global db, bctype
21     bctype = bctypetemp
22     #print path
23     #createDB()
24     #db.execute('drop table tv')
25     #db.execute('drop table ch')
26
27     p = xml.parsers.expat.ParserCreate()
28     p.buffer_text = True
29     p.StartElementHandler = start_element
30     p.EndElementHandler = end_element
31     p.CharacterDataHandler = char_data
32     parseDocument(p, xmlpath)
33
34 #def createDB():
35 #    global bctype
36 #    rec10d.rec10db.new_tv(bctype)
37 #    rec10d.rec10db.new_ch(bctype)
38 #def writetvDB(bctype,channel,start,stop,title,desc):#tvdateは(放送種別,チャンネル,start,stop,title,desc)の形式
39 #    rec10d.rec10db.add_tv(bctype,channel,start,stop,title,desc)
40 def writemultitvDB(tvlists):
41     global bctype
42     rec10d.rec10db.new_tv(bctype)
43     rec10d.rec10db.add_multi_tv(tvlists)
44 #def writechDB(bctype,id,display):#tvdateは(チャンネル,display)の形式
45 #    rec10d.rec10db.add_ch(bctype,id,display)
46 def writemultichDB(chlists):
47     global bctype
48     rec10d.rec10db.new_ch(bctype)
49     rec10d.rec10db.add_multi_ch(chlists)
50 def parseDocument(p, xmlfile):
51     f = open(xmlfile, 'r')
52     p.ParseFile(f)
53     f.close()
54 def start_element(name, attrs):
55     global flags, lastflag, xmldate
56     flags[name] = 1
57     lastflag = name
58     for (key, val) in attrs.iteritems():
59         xmldate[name + ":" + key] = val
60 def end_element(name):
61     global flags, lastflag, xmldate, db, chlists, tvlists
62     if flags[name] == 1:
63         if name == "channel":
64             ubctype = unicode(bctype)
65             uid = unicode(xmldate['channel:id'])
66             udn = unicode(xmldate['display-name'])
67             #print uid
68             bcsearch = None
69             bs = chdb.ontvsearch(xmldate['channel:id'])
70             if bs != None:
71                 #print bcsearch
72                 bcsearch = bs['bctype']
73             if ((bcsearch != None) and (bcsearch == bctype)):
74                 chlists.append([bctype, uid, udn])
75                 #print bcsearch+"/"+bctype+" 合致"
76             else:
77                 #if bcsearch!=None:
78                     #print bcsearch+"/"+bctype+" 不一致"
79                 ""
80             #writechDB(bctype,uid,udn)
81             xmldate['channel:id'] = ""
82             xmldate['display-name'] = ""
83         elif name == "programme":
84             ubctype = unicode(bctype)
85             uch = unicode(xmldate['programme:channel'])
86             ustart = unicode(xmldate['programme:start'].replace(" +0900", ""))
87             ustop = unicode(xmldate['programme:stop'].replace(" +0900", ""))
88             utitle = unicode(xmldate['title'].replace(",", "-"))
89             udesc = unicode(xmldate['desc'])
90             ulongdesc = unicode(xmldate['longdesc'])
91             ucategory = unicode(xmldate['category'])
92             #print ucategory+"//"
93             tvlists.append([ubctype, uch, ustart, ustop, utitle, udesc,ulongdesc,ucategory])
94             #writetvDB(ubctype,uch,ustart,ustop,utitle,udesc)
95             #print xmld
96             #print xmldate
97             xmldate['title'] = ""
98             xmldate['desc'] = ""
99             xmldate['longdesc'] = ""
100             xmldate['category'] =""
101             #xmldate[]
102         if name == "tv":
103             if len(chlists) > 0:
104                 writemultichDB(chlists)
105             chlists = []
106             if len(tvlists) > 0:
107                 writemultitvDB(tvlists)
108             tvlists = []
109             print bctype + " epg取り出し終了"
110     flags[name] = 0
111 def char_data(data):
112     global flags, lastflag, xmldate
113     data = data.replace("\n", "")
114     data = data.replace("  ", "")
115     data = data.replace("\"", "")
116     data = data.replace("\'", "")
117     try:
118         datat = zenhan.toHankaku_ABC123(data)
119     except:
120         datat = data
121     data = datat.encode('utf-8')
122     if xmldate.has_key(lastflag):
123         if xmldate[lastflag] != data:
124             xmldate[lastflag] += data
125     else:
126         xmldate[lastflag] = data