3 # Rec10 TS Recording Tools
4 # Copyright (C) 2009 Yukikaze
7 from decimal import Decimal
14 def __init__(self, dbname, user, passwd, host="localhost", port=3306):
18 self.dbpasswd = passwd
21 con = MySQLdb.connect(user=user, passwd=passwd)
23 cur.execute('CREATE DATABASE ' + dbname + " DEFAULT CHARACTER SET utf8")
28 db = self.connect_db()
31 CREATE TABLE timeline \
33 id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,\
39 deltatime VARCHAR(5),\
42 UNIQUE uni (type,chtxt,title,btime,deltaday)\
47 self.new_epg_timeline("")
48 self.new_in_timeline_log()
49 self.new_in_auto_bayes_key()
50 self.new_in_auto_jbk_key()
52 self.new_auto_timeline_bayes()
53 self.new_auto_timeline_keyword()
58 con = MySQLdb.connect(db=self.dbname, host=self.dbhost, port=self.dbport, user=self.dbusr, passwd=self.dbpasswd, charset="utf8")
60 cur.execute('set names utf8;')
62 def close_db(self, db):
66 db = self.connect_db()
68 db[1].execute('drop table epg_ch')
76 ontv VARCHAR(30) PRIMARY KEY,\
88 def add_epg_ch(self, bctype, ontv, chtxt, ch, csch, updatetime):
89 db = self.connect_db()
92 VALUES (%s,%s,%s,%s,%s,"",%s,%s,%s)', \
93 (bctype, ontv, chtxt, ch, csch, updatetime, "1","1"))
95 def select_by_ontv_epg_ch(self, ontv):
96 db = self.connect_db()
97 dbexe = db[1].execute("\
98 SELECT bctype,ontv,chtxt,ch,csch,updatetime \
105 dls = db[1].fetchall()
109 r[5] = r[5].strftime("%Y-%m-%d %H:%M:%S")
112 def select_by_chtxt_epg_ch(self, chtxt):
113 db = self.connect_db()
114 dbexe = db[1].execute("\
115 SELECT bctype,ontv,chtxt,ch,csch,updatetime \
122 dls = db[1].fetchall()
126 r[5] = r[5].strftime("%Y-%m-%d %H:%M:%S")
129 def select_by_bctype_epg_ch(self, bctype):
130 db = self.connect_db()
131 dbexe = db[1].execute("\
132 SELECT bctype,ontv,chtxt,ch,csch,updatetime,status \
134 WHERE bctype = %s", \
139 dls = db[1].fetchall()
142 #recdblist.printutf8(dl)
144 r[5] = r[5].strftime("%Y-%m-%d %H:%M:%S")
148 def select_by_ch_epg_ch(self, ch):
149 db = self.connect_db()
150 dbexe = db[1].execute("\
152 bctype,ontv,chtxt,ch,csch,updatetime \
159 dls = db[1].fetchall()
163 r[5] = r[5].strftime("%Y-%m-%d %H:%M:%S")
166 def select_all_epg_ch(self):
167 db = self.connect_db()
168 dbexe = db[1].execute("\
169 SELECT bctype,ontv,chtxt,ch,csch,updatetime \
175 dls = db[1].fetchall()
179 r[5] = r[5].strftime("%Y-%m-%d %H:%M:%S")
182 def set_new_status(self,dhour):
183 db = self.connect_db()
184 dbexe = db[1].execute("UPDATE epg_ch \
188 updatetime < DATE_SUB(now(),INTERVAL " + dhour + " HOUR) \
193 def select_get_update_epg_ch(self, dhour):
194 db = self.connect_db()
195 dbexe = db[1].execute("SELECT bctype,chtxt,status FROM epg_ch \
198 updatetime < DATE_SUB(now(),INTERVAL " + dhour + " HOUR) \
204 ORDER BY status DESC")
206 #recdblist.printutf8(dbexe)
208 ret = db[1].fetchall()
211 def update_by_bctype_epg_ch(self, bctype):
212 db = self.connect_db()
218 WHERE bctype = %s", (bctype,))
220 def update_by_bctype_and_chtxt_epg_ch(self, bctype, chtxt):
221 db = self.connect_db()
227 WHERE bctype = %s AND chtxt = %s", (bctype, chtxt))
229 def update_status_by_bctype_epg_ch(self, bctype, status):
230 db = self.connect_db()
235 WHERE bctype = %s", \
239 def update_chname_by_ontv_epg_ch(self,ontv,chname):
240 db = self.connect_db()
249 def add_auto_proc_tmp(self,type,title,chtxt):
250 db = self.connect_db()
252 INSERT IGNORE into auto_proc_tmp \
254 values (%s,%s,%s)',(type,title,chtxt))
257 def new_auto_proc_tmp(self):
258 db = self.connect_db()
260 db[1].execute('drop table auto_proc_tmp')
265 CREATE TABLE auto_proc_tmp \
268 title VARCHAR(100) PRIMARY KEY,\
270 UNIQUE unibayeskey(title)\
275 def update_auto_proc(self):
276 db = self.connect_db()
278 db[1].execute('INSERT INTO auto_proc SELECT * FROM auto_proc_tmp')
282 def new_auto_proc(self):
283 db = self.connect_db()
285 db[1].execute('drop table auto_proc')
290 CREATE TABLE auto_proc \
293 title VARCHAR(100) PRIMARY KEY,\
295 UNIQUE unibayeskey(title)\
300 def add_in_timeline_log(self , chtxt="", title="", btime="", etime="", opt="", exp="", longexp="", category=""):
301 db = self.connect_db()
303 INSERT IGNORE into in_timeline_log \
304 (chtxt,title,btime,etime,opt,exp,longexp,category) \
305 values (%s,%s,%s,%s,%s,%s,%s,%s)', \
306 ( chtxt, title, btime, etime, opt,exp,longexp,category))
309 def del_in_timeline_log(self, title="", chtxt="", btime=""):
313 db = self.connect_db()
315 DELETE FROM in_timeline_log \
316 WHERE title = %s AND chtxt = %s AND btime = %s", \
317 (title, chtxt, btime))
320 def new_in_timeline_log(self):
321 db = self.connect_db()
324 CREATE TABLE in_timeline_log \
326 id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,\
334 category VARCHAR(100),\
335 UNIQUE uni (chtxt,title,btime,category)\
340 def select_chtxt_by_title_timeline_log(self,title):
341 db = self.connect_db()
342 dbexe = db[1].execute("\
344 FROM in_timeline_log \
345 WHERE title LIKE \"%"+title+"%\"\
347 ORDER by sum(1) DESC limit 1")
348 retdb=db[1].fetchall()
355 def add_timeline(self, type="", chtxt="", title="", btime="", etime="", deltatime="", deltaday="", opt=""):
356 db = self.connect_db()
358 INSERT IGNORE into timeline \
359 (type,chtxt,title,btime,etime,deltatime,deltaday,opt) \
360 values (%s,%s,%s,%s,%s,%s,%s,%s)', \
361 (type, chtxt, title, btime, etime, deltatime, deltaday, opt))
364 def del_timeline(self, type="", title="", chtxt="", btime=""):
368 db = self.connect_db()
370 DELETE FROM timeline \
371 WHERE type = %s AND title = %s AND chtxt = %s AND btime = %s", \
372 (type, title, chtxt, btime))
375 def select_all_timeline(self):
376 db = self.connect_db()
378 dbr = db[1].execute("\
379 SELECT type, chtxt, title, btime, etime, deltatime ,deltaday ,opt \
381 dbl = db[1].fetchall()
384 for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in dbl:
389 btime = btime.strftime("%Y-%m-%d %H:%M:%S")
390 etime = etime.strftime("%Y-%m-%d %H:%M:%S")
394 ret['deltatime'] = ""
396 if deltatime == None:
401 ret['deltatime'] = deltatime
402 elif typet == 'keyevery':
403 ret['deltatime'] = deltatime
404 ret['deltaday'] = deltaday
408 def select_bytime_timeline(self, dminutes):
409 db = self.connect_db()
411 #dbr=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 )")
412 dbr = db[1].execute("SELECT \
413 type, chtxt, title, btime, etime, deltatime ,deltaday ,opt \
415 WHERE btime BETWEEN DATE_SUB(now(),INTERVAL " + dminutes + " MINUTE ) AND \
416 DATE_ADD(now(),INTERVAL " + dminutes + " MINUTE )")
417 dbl = db[1].fetchall()
419 #recdblist.printutf8(dbl)
421 for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in dbl:
426 btime = btime.strftime("%Y-%m-%d %H:%M:%S")
427 etime = etime.strftime("%Y-%m-%d %H:%M:%S")
431 if deltatime == None or deltatime == "":
433 if deltaday == None or deltaday == "":
435 if typet == recdblist.REC_KEYWORD:
436 ret['deltatime'] = deltatime
437 elif typet == recdblist.REC_KEYWORD_EVERY_SOME_DAYS:
438 ret['deltatime'] = deltatime
439 ret['deltaday'] = deltaday
442 def select_bytime_all_timeline(self,btime,etime,chtxt):
443 db = self.connect_db()
445 #dbr=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 )")
446 dbr = db[1].execute("SELECT \
447 type, chtxt, title, btime, etime, deltatime ,deltaday ,opt \
449 WHERE btime > %s AND \
451 AND chtxt=%s ",(btime,etime,chtxt))
452 dbl = db[1].fetchall()
454 #recdblist.printutf8(dbl)
456 for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in dbl:
461 btime = btime.strftime("%Y-%m-%d %H:%M:%S")
462 etime = etime.strftime("%Y-%m-%d %H:%M:%S")
466 if deltatime == None or deltatime == "":
468 if deltaday == None or deltaday == "":
470 if typet == recdblist.REC_KEYWORD:
471 ret['deltatime'] = deltatime
472 elif typet == recdblist.REC_KEYWORD_EVERY_SOME_DAYS:
473 ret['deltatime'] = deltatime
474 ret['deltaday'] = deltaday
477 def delete_old_timeline(self, dhour):
478 db = self.connect_db()
480 DELETE FROM timeline \
482 btime < DATE_SUB(now(),INTERVAL " + dhour + " HOUR )")
485 def new_in_auto_jbk_key(self):
486 db = self.connect_db()
489 CREATE TABLE in_auto_jbk_key \
491 id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,\
492 keyword VARCHAR(200),\
493 UNIQUE unijbk (keyword)\
498 def add_in_auto_jbk_key(self,key):
499 db = self.connect_db()
501 INSERT IGNORE into in_auto_jbk_key \
507 def select_all_in_auto_jbk_key(self):
508 db = self.connect_db()
509 dbexe = db[1].execute("\
511 FROM in_auto_jbk_key \
515 ret = db[1].fetchall()
518 def new_in_status(self):
519 db = self.connect_db()
522 CREATE TABLE in_status \
524 ts2avi TINYINT DEFAULT 0,\
525 terec TINYINT DEFAULT 0,\
526 bscsrec TINYINT DEFAULT 0,\
527 b252ts TINYINT DEFAULT 0,\
528 installed TINYINT DEFAULT 0\
530 db[1].execute("INSERT IGNORE into in_status VALUE (0,0,0,0,0)")
534 def select_all_in_status(self):
535 db = self.connect_db()
536 dbexe = db[1].execute("\
537 SELECT ts2avi,terec,bscsrec,b252ts \
543 dls = db[1].fetchall()
554 def change_ts2avi_in_status(self,i):
559 db = self.connect_db()
561 UPDATE in_status SET ts2avi=ts2avi+%s",i)
563 def change_terec_in_status(self,i):
568 db = self.connect_db()
570 UPDATE in_status SET terec=terec+%s",i)
572 def change_bscsrec_in_status(self,i):
577 db = self.connect_db()
579 UPDATE in_status SET bscsrec=bscsrec+%s",i)
581 def change_b252ts_in_status(self,i):
586 db = self.connect_db()
588 UPDATE in_status SET b252ts=b252ts+%s",i)
590 def select_installed_in_status(self):
591 db = self.connect_db()
592 dbexe = db[1].execute("\
593 SELECT ts2avi,terec,bscsrec,b252ts,installed \
599 dls = db[1].fetchall()
605 def change_installed_in_status(self):
609 db = self.connect_db()
611 UPDATE in_status SET installed=1")
613 def new_epg_timeline(self, bctype):
614 db = self.connect_db()
617 DELETE FROM epg_timeline \
618 WHERE bctype = %s", \
624 CREATE TABLE epg_timeline \
627 channel VARCHAR(100) NOT NULL,\
633 category VARCHAR(100),\
634 UNIQUE unitv(bctype,channel,start,stop,title)\
640 def add_epg_timeline(self, bctype, channel, start, stop, title, desc,longdesc, category):
641 db = self.connect_db()
643 INSERT IGNORE INTO epg_timeline \
644 VALUES (%s,%s,%s,%s,%s,%s,%s,%s)', \
645 (bctype, channel, start, stop, title, desc,longdesc,category))
648 def add_multi_epg_timeline(self, tvlists):
650 tvlists is (bctype,channel,start,stop,title,desc,longdesc,category) lists.
652 db = self.connect_db()
654 INSERT IGNORE INTO epg_timeline \
655 (bctype,channel,start,stop,title,exp,longexp,category) \
656 values(%s,%s,%s,%s,%s,%s,%s,%s)', \
659 def select_by_time_ngram_epg_timeline(self, btime, etime, chtxt):
660 db = self.connect_db()
663 epg_ch.chtxt,title,start,stop,exp,longexp,category \
666 WHERE epg_ch.ontv=epg_timeline.channel \
673 dbcmd = db[1].execute(dbexe, (btime, etime, chtxt))
676 retall = db[1].fetchall()
679 def select_by_time_keyword_auto_suggest_epg_timeline(self,keyword,btime,etime):
680 db = self.connect_db()
683 epg_ch.chtxt,title,start,stop,exp,longexp,category \
686 WHERE epg_ch.ontv=epg_timeline.channel \
693 ( title LIKE \'%%"+keyword+"%%\' ) \
695 ( exp LIKE \'%%"+keyword+"%%\' ) \
697 ( longexp LIKE \'%%"+keyword+"%%\' ) \
699 dbcmd = db[1].execute(dbexe,(btime, etime))
702 retall = db[1].fetchall()
705 def new_in_auto_bayes_key(self):
706 db = self.connect_db()
708 db[1].execute('CREATE TABLE in_auto_bayes_key \
710 keychar VARCHAR(10),\
712 ratio_rec DECIMAL(32,14),\
713 ratio_all DECIMAL(32,14),\
714 UNIQUE unibayeskey(keychar,chtxt)\
716 db[1].execute('CREATE INDEX keycharindex ON in_auto_bayes_key(keychar)')
721 def add_in_auto_bayes_key(self,key,chtxt,ratio_rec,ratio_all):
722 db = self.connect_db()
723 ratio_rec=str(ratio_rec)
724 ratio_all=str(ratio_all)
726 INSERT IGNORE INTO in_auto_bayes_key \
727 (keychar,chtxt,ratio_rec,ratio_all) \
728 values (%s,%s,%s,%s)',\
729 (key,chtxt,ratio_rec,ratio_all))
731 def add_num_in_auto_bayes_key(self,chtxt,add_rec_num,add_all_num):
732 db = self.connect_db()
733 add_rec_num=str(add_rec_num)
734 add_all_num=str(add_all_num)
736 UPDATE in_auto_bayes_key SET ratio_rec=CONVERT(ratio_rec+%s,DECIMAL(32,14)),ratio_all=CONVERT(ratio_all+%s,DECIMAL(32,14)) WHERE keychar=\"NUM\" AND chtxt=%s",\
737 (add_rec_num,add_all_num,chtxt))
739 def change_in_auto_bayes_key(self,key,chtxt,new_ratio_rec,new_ratio_all):
742 db = self.connect_db()
744 UPDATE in_auto_bayes_key SET ratio_rec=%s,ratio_all=%s WHERE keychar=%s AND chtxt=%s",(str(new_ratio_rec),str(new_ratio_all),key,chtxt)\
747 def change_ratio_all_reduce_in_auto_bayes_key(self,chtxt,beforenum,newnum):
748 beforenum=str(beforenum)
750 db = self.connect_db()
752 UPDATE in_auto_bayes_key SET ratio_all=CONVERT(ratio_all*%s/(%s+%s),DECIMAL(32,14)) WHERE chtxt=%s AND NOT (keychar=\"NUM\")",(beforenum,newnum,beforenum,chtxt)\
755 def change_ratio_all_in_auto_bayes_key(self,key,chtxt,beforenum,addnum):
756 db = self.connect_db()
758 beforenum=str(beforenum)
759 db[1].execute("INSERT INTO in_auto_bayes_key (keychar,chtxt,ratio_rec,ratio_all) \
760 VALUES (%s,%s,%s,%s)\
761 ON DUPLICATE KEY UPDATE \
762 ratio_all=CONVERT((ratio_all*%s+%s)/%s,DECIMAL(32,14))",(key,chtxt,"0",str(Decimal(addnum)/beforenumf),beforenum,chtxt,key))
764 def change_multi_ratio_all_in_auto_bayes_key(self,chtxt,beforenum,list):
766 list={key:addnum}のリスト
769 beforenum=str(beforenum)
770 db = self.connect_db()
771 for i,j in list.items():
772 retl=(i,chtxt,"0",str(Decimal(j)/beforenumf),beforenum,str(j),beforenum)
773 db[1].execute("INSERT INTO in_auto_bayes_key (keychar,chtxt,ratio_rec,ratio_all) \
774 VALUES (%s,%s,%s,%s)\
775 ON DUPLICATE KEY UPDATE \
776 ratio_all=CONVERT((ratio_all*%s+%s)/%s,DECIMAL(32,14))",retl)
778 def change_ratio_rec_reduce_in_auto_bayes_key(self,chtxt,beforenum,newnum):
779 beforenum=str(beforenum)
781 db = self.connect_db()
783 UPDATE in_auto_bayes_key SET ratio_rec=CONVERT(ratio_rec*%s/(%s+%s),DECIMAL(32,14)) WHERE chtxt=%s AND NOT (keychar=\"NUM\")",(beforenum,newnum,beforenum,chtxt)\
786 def change_ratio_rec_in_auto_bayes_key(self,key,chtxt,beforenum,addnum):
787 db = self.connect_db()
789 beforenum=str(beforenum)
790 db[1].execute("INSERT INTO in_auto_bayes_key (keychar,chtxt,ratio_rec,ratio_all) \
791 VALUES (%s,%s,%s,%s)\
792 ON DUPLICATE KEY UPDATE \
793 ratio_rec=CONVERT((ratio_rec*%s+%s)/%s,DECIMAL(32,14))",(key,chtxt,str(Decimal(addnum)/beforenumf),"0",beforenum,chtxt,key))
795 def change_multi_ratio_rec_in_auto_bayes_key(self,chtxt,beforenum,list):#self,key,chtxt,beforenum,addnum):
797 beforenum=str(beforenum)
798 db = self.connect_db()
799 for i,j in list.items():
800 retl=(i,chtxt,str(Decimal(j)/beforenumf),"0",beforenum,str(j),beforenum)
801 db[1].execute("INSERT INTO in_auto_bayes_key (keychar,chtxt,ratio_rec,ratio_all) \
802 VALUES (%s,%s,%s,%s)\
803 ON DUPLICATE KEY UPDATE \
804 ratio_rec=CONVERT((ratio_rec*%s+%s)/%s,DECIMAL(32,14))",retl)
806 def select_by_key_in_auto_bayes_key(self,key,chtxt):
807 db = self.connect_db()
808 dbexe = db[1].execute("\
809 SELECT keychar,chtxt,ratio_rec,ratio_all \
810 FROM in_auto_bayes_key \
811 WHERE keychar = %s AND chtxt = %s", \
815 dls = db[1].fetchall()
822 def new_auto_timeline_keyword(self):
823 db = self.connect_db()
826 CREATE TABLE auto_timeline_keyword \
828 id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,\
833 UNIQUE uni (chtxt,title,btime,etime)\
837 def add_auto_timeline_keyword(self,chtxt="", title="", btime="", etime=""):
838 db = self.connect_db()
840 INSERT IGNORE into auto_timeline_keyword \
841 (chtxt,title,btime,etime) \
842 values (%s,%s,%s,%s)', \
843 (chtxt, title, btime, etime))
846 def delete_old_auto_timeline_keyword(self, dhour):
847 db = self.connect_db()
849 DELETE FROM auto_timeline_keyword \
851 btime < DATE_SUB(now(),INTERVAL " + dhour + " HOUR )")
853 def new_auto_timeline_bayes(self):
854 db = self.connect_db()
857 CREATE TABLE auto_timeline_bayes \
859 id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,\
865 UNIQUE uni (chtxt,title,btime,etime)\
869 def add_auto_timeline_bayes(self,chtxt="", title="", btime="", etime="",point=""):
870 db = self.connect_db()
872 INSERT IGNORE into auto_timeline_bayes \
873 (chtxt,title,btime,etime,point) \
874 values (%s,%s,%s,%s,%s)', \
875 (chtxt, title, btime, etime,point))
877 def delete_old_auto_timeline_bayes(self, dhour):
878 db = self.connect_db()
880 DELETE FROM auto_timeline_bayes \
882 btime < DATE_SUB(now(),INTERVAL " + dhour + " HOUR )")