OSDN Git Service

put DB accessing functions together(dbSQLite.py).
[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 rec10d
8 import zenhan
9 import xml.parsers.expat
10 flags={}
11 lastflag=""
12 xmldate={}
13 db=""
14 bctype=""
15 def xml2db(xmlpath,dbpath,bctypetemp):#bctypeは放送種別で'TE'(地デジ)BS,CSがある。地デジの場合は te数字 が入る
16     global db,bctype
17     bctype=bctypetemp
18     #print path
19     createDB()
20     #db.execute('drop table tv')
21     #db.execute('drop table ch')
22
23     p=xml.parsers.expat.ParserCreate()
24     p.buffer_text=True
25     p.StartElementHandler=start_element
26     p.EndElementHandler=end_element
27     p.CharacterDataHandler=char_data
28     parseDocument(p,xmlpath)
29
30 def createDB():
31     global bctype
32     rec10d.rec10db.new_tv(bctype)
33     rec10d.rec10db.new_ch(bctype)
34 def writetvDB(bctype,channel,start,stop,title,desc):#tvdateは(放送種別,チャンネル,start,stop,title,desc)の形式
35     rec10d.rec10db.add_tv(bctype,channel,start,stop,title,desc)
36 def writechDB(bctype,id,display):#tvdateは(チャンネル,display)の形式
37     rec10d.rec10db.add_ch(bctype,id,display)
38 def parseDocument(p,xmlfile):
39     f=open(xmlfile,'r')
40     p.ParseFile(f)
41     f.close()
42 def start_element(name,attrs):
43     global flags,lastflag,xmldate
44     flags[name]=1
45     lastflag=name
46     for (key,val) in attrs.iteritems():
47         xmldate[name+":"+key]=val
48 def end_element(name):
49     global flags,lastflag,xmldate,db
50     if flags[name]==1: 
51         if name=="channel":
52             ubctype=unicode(bctype)
53             uid=unicode(xmldate['channel:id'])
54             udn=unicode(xmldate['display-name'])
55             writechDB(bctype,uid,udn)
56             xmldate['channel:id']=""
57             xmldate['display-name']=""
58         elif name=="programme":
59             ubctype=unicode(bctype)
60             uch=unicode(xmldate['programme:channel'])
61             ustart=unicode(xmldate['programme:start'].replace(" +0900",""))
62             ustop=unicode(xmldate['programme:stop'].replace(" +0900",""))
63             utitle=unicode(xmldate['title'].replace(",","-"))
64             udesc=unicode(xmldate['desc'])
65             writetvDB(ubctype,uch,ustart,ustop,utitle,udesc)
66             #print xmld
67             xmldate['title']=""
68             xmldate['desc']=""
69             #xmldate[]
70         if name=="tv":
71             """
72             r=db.execute("SELECT * FROM tv")
73             for row in r:
74                 print row
75             """
76             print bctype+" epg取り出し終了"
77     flags[name]=0
78 def char_data(data):
79     global flags,lastflag,xmldate
80     data=data.replace("\n","")
81     data=data.replace("  ","")
82     data=data.replace("\"","")
83     data=data.replace("\'","")
84     try:
85         datat=zenhan.toHankaku(data)
86     except:
87         datat=data
88     data=datat.encode('utf-8')
89     if xmldate.has_key(lastflag):
90         if xmldate[lastflag]!=data:
91             xmldate[lastflag]+=data
92     else:
93         xmldate[lastflag]=data
94
95
96
97