OSDN Git Service

stop using trunk directory in rectool
[rec10/rec10-git.git] / rec10 / branches / 0.5 / 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 zenhan
8 import xml.parsers.expat
9 import sqlite3
10 #import xml.sax as sax
11 #from xml.sax.saxutils import DefaultHandler
12 flags={}
13 lastflag=""
14 xmldate={}
15 db=""
16 bctype=""
17 def xml2db(xmlpath,dbpath,bctypetemp):#bctypeは放送種別で'TE'(地デジ)BS,CSがある。地デジの場合は te数字 が入る
18     global db,bctype
19     bctype=bctypetemp
20     #print path
21     createDB(dbpath)
22     #db.execute('drop table tv')
23     #db.execute('drop table ch')
24
25     p=xml.parsers.expat.ParserCreate()
26     p.buffer_text=True
27     p.StartElementHandler=start_element
28     p.EndElementHandler=end_element
29     p.CharacterDataHandler=char_data
30     parseDocument(p,xmlpath)
31
32 def createDB(path):
33     global db,bctype,fpath
34     fpath=path
35     db=sqlite3.connect(fpath)
36     print fpath
37     try:
38         db.execute("delete from tv where bctype = \'"+bctype+"\'")
39     except:
40         test=""
41     try:
42         db.execute("delete from ch where bctype = \'"+bctype+"\'")
43     except:
44         test=""
45     try:
46         db.execute('create table tv (bctype TEXT,channel TEXT NOT NULL,start TEXT,stop  TEXT,title TEXT,desc  TEXT)')
47     except:
48         test=""
49     try:
50         db.execute('create table ch (bctype TEXT,channel TEXT NOT NULL,display TEXT)')
51     except:
52         test=""
53 def writetvDB(bctype,channel,start,stop,title,desc):#tvdateは(放送種別,チャンネル,start,stop,title,desc)の形式
54     global db
55     try:
56         db.execute('insert into tv values (?,?,?,?,?,?)',(bctype,channel,start,stop,title,desc))
57     except:
58         print "xml2db-error(writetvDB):"+"'insert into tv values '"+title
59 def writetvDB_bef(datetv):#tvdateは(放送種別,チャンネル,start,stop,title,desc)の形式
60     global db
61     try:
62         db.execute('insert into tv values '+datetv)
63     except:
64         print "xml2db-error(writetvDB):"+"'insert into tv values '"+datetv
65 def writechDB(datech):#tvdateは(チャンネル,display)の形式
66     global db
67     db.execute('insert into ch values '+datech)
68 def parseDocument(p,xmlfile):
69     f=open(xmlfile,'r')
70     p.ParseFile(f)
71     f.close()
72 def start_element(name,attrs):
73     global flags,lastflag,xmldate
74     flags[name]=1
75     lastflag=name
76     for (key,val) in attrs.iteritems():
77         xmldate[name+":"+key]=val
78 def end_element(name):
79     global flags,lastflag,xmldate,db
80     if flags[name]==1: 
81         if name=="channel":
82             xmld="(\""+bctype+"\",\""+xmldate['channel:id']+"\",\""+xmldate['display-name']+"\")"
83             xmld=unicode(xmld)
84             writechDB(xmld)
85             xmldate['channel:id']=""
86             xmldate['display-name']=""
87             #xmldate={}
88             #print xmld
89         elif name=="programme":
90             ubctype=unicode(bctype)
91             uch=unicode(xmldate['programme:channel'])
92             ustart=unicode(xmldate['programme:start'].replace(" +0900",""))
93             ustop=unicode(xmldate['programme:stop'].replace(" +0900",""))
94             utitle=unicode(xmldate['title'].replace(",","-"))
95             udesc=unicode(xmldate['desc'])
96             writetvDB(ubctype,uch,ustart,ustop,utitle,udesc)
97             #print xmld
98             xmldate['title']=""
99             xmldate['desc']=""
100             #xmldate[]
101         if name=="tv":
102             """
103             r=db.execute("SELECT * FROM tv")
104             for row in r:
105                 print row
106             """
107             db.commit()
108             db.close()
109     flags[name]=0
110 def char_data(data):
111     global flags,lastflag,xmldate
112     data=data.replace("\n","")
113     data=data.replace("  ","")
114     data=data.replace("\"","")
115     data=data.replace("\'","")
116     try:
117         datat=zenhan.toHankaku(data)
118     except:
119         datat=data
120     data=datat.encode('utf-8')
121     if xmldate.has_key(lastflag):
122         if xmldate[lastflag]!=data:
123             xmldate[lastflag]+=data
124     else:
125         xmldate[lastflag]=data
126
127
128
129