3 # Rec10 TS Recording Tools
4 # Copyright (C) 2009 Yukikaze
9 path = str(os.path.dirname(os.path.abspath(__file__))) + "/"
17 def __init__(self,dbname,user,passwd,host="localhost",port=3306):
24 con = MySQLdb.connect(user= user, passwd = passwd)
26 cur.execute('create database '+dbname)
31 db = self.connect_db()
33 db[1].execute('create table rectime (type TEXT,chtxt TEXT,title TEXT,btime DATETIME,etime DATETIME,deltatime TEXT,deltaday TEXT,opt TEXT,id INTEGER PRIMARY KEY,UNIQUE unique (type,chtxt,title,btime,deltaday))')
41 con=MySQLdb.connect(db=self.dbname,host=self.dbhost,port=self.dbport,user=self.dbusr,passwd=self.dbpasswd,charset="utf8")
43 cur.execute('set names utf8;')
45 def close_db(self,db):
49 db = self.connect_db()
51 db[1].execute('drop table chdata')
55 db[1].execute('create table chdata (bctype TEXT,ontv TEXT,chtxt TEXT,ch TEXT,csch TEXT,station TEXT,station_name TEXT,updatetime DATETIME)')
59 def add_chdata(self,bctype, ontv, chtxt, ch, csch, station, station_name,updatetime):
60 db = self.connect_db()
61 #bctype=bctype.encode('utf-8')
62 #ontv=ontv.encode('utf-8')
63 #chtxt=chtxt.encode('utf-8')
64 #ch=ch.encode('utf-8')
65 #csch=csch.encode('utf-8')
66 #station=station.encode('utf-8')
67 #station_name=station_name.encode('utf-8')
68 #updatetime=updatetime.encode('utf-8')
69 db[1].execute('insert into chdata values (%s,%s,%s,%s,%s,%s,%s,%s)',(bctype,ontv,chtxt,ch,csch,station,station_name,updatetime))
71 def select_by_ontv_chdata(self,ontv):
72 db = self.connect_db()
73 dbexe=db[1].execute("SELECT bctype,ontv,chtxt,ch,csch,updatetime FROM chdata WHERE ontv = %s",(ontv,))
77 def select_by_chtxt_chdata(self,chtxt):
78 db = self.connect_db()
79 dbexe=db[1].execute("SELECT bctype,ontv,chtxt,ch,csch,updatetime FROM chdata WHERE chtxt = %s",(chtxt,))
83 def select_by_bctype_chdata(self,bctype):
84 db = self.connect_db()
85 dbexe=db[1].execute("SELECT bctype,ontv,chtxt,ch,csch,updatetime FROM chdata WHERE bctype = %s",(bctype,))
89 def select_by_ch_chdata(self,ch):
90 db = self.connect_db()
91 dbexe=db[1].execute("SELECT bctype,ontv,chtxt,ch,csch,updatetime FROM chdata WHERE ch = %s",(ch,))
95 def select_all_chdata(self):
96 db = self.connect_db()
97 dbexe=db[1].execute("SELECT bctype,ontv,chtxt,ch,csch,updatetime FROM chdata ")
101 def select_get_update_chdata(self,dhour):
102 db = self.connect_db()
103 dbexe=db[1].execute("SELECT bctype,chtxt FROM chdata WHERE updatetime < DATE_SUB(now(),INTERVAL "+dhour+" HOUR)")
107 def update_by_bctype_chdata(self,bctype):
108 db = self.connect_db()
109 db[1].execute("UPDATE chdata SET updatetime=now() WHERE bctype = %s",(bctype,))
111 def update_by_bctype_and_chtxt_chdata(self,bctype,chtxt):
112 db = self.connect_db()
113 db[1].execute("UPDATE chdata SET updatetime=now() WHERE bctype = %s AND chtxt = %s",(bctype,chtxt))
115 def add_rectime(self,type="", chtxt="", title="", btime="", etime="", deltatime="", deltaday="", opt=""):
116 db = self.connect_db()
117 db[1].execute('insert into rectime (type,chtxt,title,btime,etime,deltatime,deltaday,opt) values (%s,%s,%s,%s,%s,%s,%s,%s)', (type, chtxt, title, btime, etime, deltatime, deltaday, opt))
120 def del_rectime(self,type="", title="", chtxt="", btime=""):
125 db[1].execute("delete from rectime where type = %s AND title = %s AND chtxt = %s AND btime = %s", (type, title, chtxt, btime))
128 def select_all_rectime(self):
131 for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in db[1].execute("SELECT type, chtxt, title, btime, etime, deltatime ,deltaday ,opt FROM rectime"):
135 ret['title']=title.encode('utf-8')
139 if deltatime == None:
144 ret['deltatime']=deltatime
145 elif typet == 'keyevery':
146 ret['deltatime']=deltatime
147 ret['deltaday']=deltaday
151 def select_bytime_rectime(self,dminutes):
154 for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in db[1].execute("SELECT type, chtxt, title, btime, etime, deltatime ,deltaday ,opt FROM rectime WHERE btime < DATE_SUB(now(),INTERVAL "+dminutes+" MINUTE ) AND btime > DATE_ADD(now(),INTERVAL "+dminutes+" MINUTE )"):
158 ret['title']=title.encode('utf-8')
162 if deltatime == None or deltatime == "":
164 if deltaday == None or deltaday == "":
167 ret['deltatime']=deltatime
168 elif typet == 'keyevery':
169 ret['deltatime']=deltatime
170 ret['deltaday']=deltaday
174 def delete_old_rectime(self,dhour):
176 db[1].execute("DELETE FROM rectime WHERE NOT ( type = %s OR type = %s ) AND btime < DATE_SUB(now(),INTERVAL "+dhour+" HOUR )", (recdb.REC_MISS_ENCODE, recdb.REC_KEYWORD_EVERY_SOME_DAYS))
179 def new_tv(self,bctype):
182 db[1].execute("delete from tv where bctype = %s", (bctype,))
186 db[1].execute('create table tv (bctype TEXT,channel TEXT NOT NULL,start TEXT,stop TEXT,title TEXT,desc TEXT)')
191 def add_tv(self,bctype, channel, start, stop, title, desc):
193 db[1].execute('insert into tv values (%s,%s,%s,%s,%s,%s)', (bctype, channel, start, stop, title, desc))
196 def add_multi_tv(self,tvlists):
198 tvlists is (bctype,channel,start,stop,title,desc) lists.
201 db[1].executemany('insert into tv values (%s,%s,%s,%s,%s,%s)', tvlists)
204 def select_by_title_tv(self,title):
207 for ch, title, start, stop in db[1].execute("SELECT channel,title,start,stop FROM tv WHERE title LIKE \"%"+titletxt+"%\""):
208 btime=start.replace(" +0900","")
209 btime=btime[0:4]+"-"+btime[4:6]+"-"+btime[6:8]+" "+btime[8:10]+":"+btime[10:12]+":00"
210 etime=stop.replace(" +0900","")
211 etime=etime[0:4]+"-"+etime[4:6]+"-"+etime[6:8]+" "+etime[8:10]+":"+etime[10:12]+":00"
213 chtxt=chdb.ontvsearch(ch)['chtxt']
216 ret.append(chtxt+","+title.encode('utf-8')+","+btime+","+etime)
219 def select_by_time_ngram_tv(self,btime,etime,chtxt):
221 dbexe="SELECT chdata.chtxt,title,start,stop FROM tv INNER JOIN chdata WHERE chdata.ontv=tv.channel AND start >= %s AND start <= %s AND chdata.chtxt=%s"
222 dbcmd=db[1].execute(dbexe,(btime,etime,chtxt))
223 retall=dbcmd.fetchall()
226 def new_ch(self,bctype):
229 db[1].execute("delete from ch where bctype = %s", (bctype,))
233 db[1].execute('create table ch (bctype TEXT,channel TEXT NOT NULL,display TEXT)')
238 def add_ch(self,bctype, channel, display):
240 db[1].execute('insert into ch values (%s,%s,%s)', (bctype, channel, display))
243 def add_multi_ch(self,chlists):
245 chlists is (bctype,channel,display) lists
248 db[1].executemany('insert into ch values (%s,%s,%s)', chlists)