3 # Rec10 TS Recording Tools
4 # Copyright (C) 2009-2010 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_in_settings()
53 self.new_auto_timeline_bayes()
54 self.new_auto_timeline_keyword()
59 con = MySQLdb.connect(db=self.dbname, host=self.dbhost, port=self.dbport, user=self.dbusr, passwd=self.dbpasswd, charset="utf8")
61 cur.execute('set names utf8;')
63 def close_db(self, db):
67 db = self.connect_db()
69 db[1].execute('drop table epg_ch')
77 ontv VARCHAR(30) PRIMARY KEY,\
89 def add_epg_ch(self, bctype, ontv, chtxt, ch, csch, updatetime):
90 db = self.connect_db()
93 VALUES (%s,%s,%s,%s,%s,"",%s,%s,%s)', \
94 (bctype, ontv, chtxt, ch, csch, updatetime, "1","1"))
96 def select_by_ontv_epg_ch(self, ontv):
97 db = self.connect_db()
98 dbexe = db[1].execute("\
99 SELECT bctype,ontv,chtxt,ch,csch,updatetime \
106 dls = db[1].fetchall()
110 r[5] = r[5].strftime("%Y-%m-%d %H:%M:%S")
113 def select_by_chtxt_epg_ch(self, chtxt):
114 db = self.connect_db()
115 dbexe = db[1].execute("\
116 SELECT bctype,ontv,chtxt,ch,csch,updatetime \
123 dls = db[1].fetchall()
127 r[5] = r[5].strftime("%Y-%m-%d %H:%M:%S")
130 def select_by_bctype_epg_ch(self, bctype):
131 db = self.connect_db()
132 dbexe = db[1].execute("\
133 SELECT bctype,ontv,chtxt,ch,csch,updatetime,status \
135 WHERE bctype = %s", \
140 dls = db[1].fetchall()
143 #recdblist.printutf8(dl)
145 r[5] = r[5].strftime("%Y-%m-%d %H:%M:%S")
149 def select_by_ch_epg_ch(self, ch):
150 db = self.connect_db()
151 dbexe = db[1].execute("\
153 bctype,ontv,chtxt,ch,csch,updatetime \
160 dls = db[1].fetchall()
164 r[5] = r[5].strftime("%Y-%m-%d %H:%M:%S")
167 def select_all_epg_ch(self):
168 db = self.connect_db()
169 dbexe = db[1].execute("\
170 SELECT bctype,ontv,chtxt,ch,csch,updatetime \
176 dls = db[1].fetchall()
180 r[5] = r[5].strftime("%Y-%m-%d %H:%M:%S")
183 def set_new_status(self,dhour):
184 db = self.connect_db()
185 dbexe = db[1].execute("UPDATE epg_ch \
189 updatetime < DATE_SUB(now(),INTERVAL " + dhour + " HOUR) \
194 def select_get_update_epg_ch(self, dhour):
195 db = self.connect_db()
196 dbexe = db[1].execute("SELECT bctype,chtxt,status FROM epg_ch \
199 updatetime < DATE_SUB(now(),INTERVAL " + dhour + " HOUR) \
205 ORDER BY status DESC")
207 #recdblist.printutf8(dbexe)
209 ret = db[1].fetchall()
212 def update_by_bctype_epg_ch(self, bctype):
213 db = self.connect_db()
219 WHERE bctype = %s", (bctype,))
221 def update_by_bctype_and_chtxt_epg_ch(self, bctype, chtxt):
222 db = self.connect_db()
228 WHERE bctype = %s AND chtxt = %s", (bctype, chtxt))
230 def update_status_by_bctype_epg_ch(self, bctype, status):
231 db = self.connect_db()
236 WHERE bctype = %s", \
240 def update_chname_by_ontv_epg_ch(self,ontv,chname):
241 db = self.connect_db()
250 def add_auto_proc_tmp(self,type,title,chtxt):
251 db = self.connect_db()
253 INSERT IGNORE into auto_proc_tmp \
255 values (%s,%s,%s)',(type,title,chtxt))
258 def new_auto_proc_tmp(self):
259 db = self.connect_db()
261 db[1].execute('drop table auto_proc_tmp')
266 CREATE TABLE auto_proc_tmp \
269 title VARCHAR(100) PRIMARY KEY,\
271 UNIQUE unibayeskey(title)\
276 def update_auto_proc(self):
277 db = self.connect_db()
279 db[1].execute('INSERT INTO auto_proc SELECT * FROM auto_proc_tmp')
283 def new_auto_proc(self):
284 db = self.connect_db()
286 db[1].execute('drop table auto_proc')
291 CREATE TABLE auto_proc \
294 title VARCHAR(100) PRIMARY KEY,\
296 UNIQUE unibayeskey(title)\
301 def drop_in_settings(self):
302 db = self.connect_db()
304 db[1].execute('drop table in_settings')
308 def new_in_settings(self):
309 db = self.connect_db()
312 CREATE TABLE in_settings \
316 auto_opt VARCHAR(20),\
317 auto_del_tmp TINYINT\
319 db[1].execute("INSERT IGNORE into in_settings VALUE (0,0,\"G\",1)")
323 def select_all_in_settings(self):
324 db = self.connect_db()
325 dbexe = db[1].execute("\
326 SELECT auto_jbk,auto_bayes,auto_del_tmp,auto_opt \
332 dls = db[1].fetchall()
342 def add_in_timeline_log(self , chtxt="", title="", btime="", etime="", opt="", exp="", longexp="", category=""):
343 db = self.connect_db()
345 INSERT IGNORE into in_timeline_log \
346 (chtxt,title,btime,etime,opt,exp,longexp,category) \
347 values (%s,%s,%s,%s,%s,%s,%s,%s)', \
348 ( chtxt, title, btime, etime, opt,exp,longexp,category))
351 def del_in_timeline_log(self, title="", chtxt="", btime=""):
355 db = self.connect_db()
357 DELETE FROM in_timeline_log \
358 WHERE title = %s AND chtxt = %s AND btime = %s", \
359 (title, chtxt, btime))
362 def new_in_timeline_log(self):
363 db = self.connect_db()
366 CREATE TABLE in_timeline_log \
368 id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,\
376 category VARCHAR(100),\
377 UNIQUE uni (chtxt,title,btime,category)\
382 def select_chtxt_by_title_timeline_log(self,title):
383 db = self.connect_db()
384 dbexe = db[1].execute("\
386 FROM in_timeline_log \
387 WHERE title LIKE \"%"+title+"%\"\
389 ORDER by sum(1) DESC limit 1")
390 retdb=db[1].fetchall()
397 def add_timeline(self, type="", chtxt="", title="", btime="", etime="", deltatime="", deltaday="", opt=""):
398 db = self.connect_db()
400 INSERT IGNORE into timeline \
401 (type,chtxt,title,btime,etime,deltatime,deltaday,opt) \
402 values (%s,%s,%s,%s,%s,%s,%s,%s)', \
403 (type, chtxt, title, btime, etime, deltatime, deltaday, opt))
406 def del_timeline(self, type="", title="", chtxt="", btime=""):
410 db = self.connect_db()
412 DELETE FROM timeline \
413 WHERE type = %s AND title = %s AND chtxt = %s AND btime = %s", \
414 (type, title, chtxt, btime))
417 def select_all_timeline(self):
418 db = self.connect_db()
420 dbr = db[1].execute("\
421 SELECT type, chtxt, title, btime, etime, deltatime ,deltaday ,opt \
423 dbl = db[1].fetchall()
426 for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in dbl:
431 btime = btime.strftime("%Y-%m-%d %H:%M:%S")
432 etime = etime.strftime("%Y-%m-%d %H:%M:%S")
436 ret['deltatime'] = ""
438 if deltatime == None:
443 ret['deltatime'] = deltatime
444 elif typet == 'keyevery':
445 ret['deltatime'] = deltatime
446 ret['deltaday'] = deltaday
450 def select_bytime_timeline(self, dminutes):
451 db = self.connect_db()
453 #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 )")
454 dbr = db[1].execute("SELECT \
455 type, chtxt, title, btime, etime, deltatime ,deltaday ,opt \
457 WHERE btime BETWEEN DATE_SUB(now(),INTERVAL " + dminutes + " MINUTE ) AND \
458 DATE_ADD(now(),INTERVAL " + dminutes + " MINUTE )")
459 dbl = db[1].fetchall()
461 #recdblist.printutf8(dbl)
463 for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in dbl:
468 btime = btime.strftime("%Y-%m-%d %H:%M:%S")
469 etime = etime.strftime("%Y-%m-%d %H:%M:%S")
473 if deltatime == None or deltatime == "":
475 if deltaday == None or deltaday == "":
477 if typet == recdblist.REC_KEYWORD:
478 ret['deltatime'] = deltatime
479 elif typet == recdblist.REC_KEYWORD_EVERY_SOME_DAYS:
480 ret['deltatime'] = deltatime
481 ret['deltaday'] = deltaday
484 def select_by_name_time_timeline(self,title,btime,btime2):
485 db = self.connect_db()
487 #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 )")
488 dbr = db[1].execute("SELECT \
489 type, chtxt, title, btime, etime, deltatime ,deltaday ,opt \
491 WHERE btime > %s AND \
492 btime < %s AND title = %s",(btime,btime2,title))
493 dbl = db[1].fetchall()
495 #recdblist.printutf8(dbl)
497 for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in dbl:
502 btime = btime.strftime("%Y-%m-%d %H:%M:%S")
503 etime = etime.strftime("%Y-%m-%d %H:%M:%S")
507 if deltatime == None or deltatime == "":
509 if deltaday == None or deltaday == "":
511 if typet == recdblist.REC_KEYWORD:
512 ret['deltatime'] = deltatime
513 elif typet == recdblist.REC_KEYWORD_EVERY_SOME_DAYS:
514 ret['deltatime'] = deltatime
515 ret['deltaday'] = deltaday
518 def select_bytime_all_timeline(self,btime,etime):
519 db = self.connect_db()
521 #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 )")
522 dbr = db[1].execute("SELECT \
523 type, chtxt, title, btime, etime, deltatime ,deltaday ,opt \
525 WHERE btime > %s AND \
526 etime < %s",(btime,etime))
527 dbl = db[1].fetchall()
529 #recdblist.printutf8(dbl)
531 for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in dbl:
536 btime = btime.strftime("%Y-%m-%d %H:%M:%S")
537 etime = etime.strftime("%Y-%m-%d %H:%M:%S")
541 if deltatime == None or deltatime == "":
543 if deltaday == None or deltaday == "":
545 if typet == recdblist.REC_KEYWORD:
546 ret['deltatime'] = deltatime
547 elif typet == recdblist.REC_KEYWORD_EVERY_SOME_DAYS:
548 ret['deltatime'] = deltatime
549 ret['deltaday'] = deltaday
552 def count_schedule_timeline(self, btime, etime):
555 return [te num,bs/cs num]
557 db = self.connect_db()
558 dbexe = "SELECT type,epg_ch.bctype,timeline.chtxt,title FROM timeline INNER JOIN epg_ch ON timeline.chtxt=epg_ch.chtxt"
559 dbexe = dbexe + " WHERE ((NOT(( timeline.etime <= %s )OR( timeline.btime >= %s ))) OR ((timeline.btime = %s) AND (timeline.etime = %s) ) )"
562 db[1].execute(dbexe, (btime, etime,btime,etime))
564 for typet, bctypet, chtxtt, titlet in dbl:
565 if (typet == recdblist.REC_RESERVE) or (typet == recdblist.REC_FINAL_RESERVE) or (typet == recdblist.REC_KEYWORD) or (typet == recdblist.REC_KEYWORD_EVERY_SOME_DAYS):
566 if bctypet.find("cs") > -1:
568 elif bctypet.find("bs") > -1:
570 elif bctypet.find("te") > -1:
574 def select_bytime_bychtxt_all_timeline(self,btime,etime,chtxt):
575 db = self.connect_db()
577 #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 )")
578 dbr = db[1].execute("SELECT \
579 type, chtxt, title, btime, etime, deltatime ,deltaday ,opt \
581 WHERE btime > %s AND \
583 AND chtxt=%s ",(btime,etime,chtxt))
584 dbl = db[1].fetchall()
586 #recdblist.printutf8(dbl)
588 for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in dbl:
593 btime = btime.strftime("%Y-%m-%d %H:%M:%S")
594 etime = etime.strftime("%Y-%m-%d %H:%M:%S")
598 if deltatime == None or deltatime == "":
600 if deltaday == None or deltaday == "":
602 if typet == recdblist.REC_KEYWORD:
603 ret['deltatime'] = deltatime
604 elif typet == recdblist.REC_KEYWORD_EVERY_SOME_DAYS:
605 ret['deltatime'] = deltatime
606 ret['deltaday'] = deltaday
609 def delete_old_timeline(self, dhour):
610 db = self.connect_db()
612 DELETE FROM timeline \
614 btime < DATE_SUB(now(),INTERVAL " + dhour + " HOUR )")
617 def new_in_auto_jbk_key(self):
618 db = self.connect_db()
621 CREATE TABLE in_auto_jbk_key \
623 id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,\
624 keyword VARCHAR(200),\
625 UNIQUE unijbk (keyword)\
630 def add_in_auto_jbk_key(self,key):
631 db = self.connect_db()
633 INSERT IGNORE into in_auto_jbk_key \
639 def select_all_in_auto_jbk_key(self):
640 db = self.connect_db()
641 dbexe = db[1].execute("\
643 FROM in_auto_jbk_key \
647 ret = db[1].fetchall()
650 def drop_in_status(self):
651 db = self.connect_db()
653 db[1].execute('drop table in_status')
657 def new_in_status(self):
658 db = self.connect_db()
661 CREATE TABLE in_status \
663 ts2avi TINYINT DEFAULT 0,\
664 terec TINYINT DEFAULT 0,\
665 bscsrec TINYINT DEFAULT 0,\
666 b252ts TINYINT DEFAULT 0,\
667 installed TINYINT DEFAULT 0\
669 db[1].execute("INSERT IGNORE into in_status VALUE (0,0,0,0,0)")
673 def select_all_in_status(self):
674 db = self.connect_db()
675 dbexe = db[1].execute("\
676 SELECT ts2avi,terec,bscsrec,b252ts \
682 dls = db[1].fetchall()
693 def change_ts2avi_in_status(self,i):
698 db = self.connect_db()
700 UPDATE in_status SET ts2avi=ts2avi+%s",i)
702 def change_terec_in_status(self,i):
707 db = self.connect_db()
709 UPDATE in_status SET terec=terec+%s",i)
711 def change_bscsrec_in_status(self,i):
716 db = self.connect_db()
718 UPDATE in_status SET bscsrec=bscsrec+%s",i)
720 def change_b252ts_in_status(self,i):
725 db = self.connect_db()
727 UPDATE in_status SET b252ts=b252ts+%s",i)
729 def select_installed_in_status(self):
730 db = self.connect_db()
731 dbexe = db[1].execute("\
732 SELECT ts2avi,terec,bscsrec,b252ts,installed \
738 dls = db[1].fetchall()
744 def change_installed_in_status(self):
748 db = self.connect_db()
750 UPDATE in_status SET installed=1")
752 def new_epg_timeline(self, bctype):
753 db = self.connect_db()
756 DELETE FROM epg_timeline \
757 WHERE bctype = %s", \
763 CREATE TABLE epg_timeline \
766 channel VARCHAR(100) NOT NULL,\
772 category VARCHAR(100),\
773 UNIQUE unitv(bctype,channel,start,stop,title)\
779 def add_epg_timeline(self, bctype, channel, start, stop, title, desc,longdesc, category):
780 db = self.connect_db()
782 INSERT IGNORE INTO epg_timeline \
783 VALUES (%s,%s,%s,%s,%s,%s,%s,%s)', \
784 (bctype, channel, start, stop, title, desc,longdesc,category))
787 def add_multi_epg_timeline(self, tvlists):
789 tvlists is (bctype,channel,start,stop,title,desc,longdesc,category) lists.
791 db = self.connect_db()
793 INSERT IGNORE INTO epg_timeline \
794 (bctype,channel,start,stop,title,exp,longexp,category) \
795 values(%s,%s,%s,%s,%s,%s,%s,%s)', \
798 def select_by_time_ngram_epg_timeline(self, btime, etime, chtxt):
799 db = self.connect_db()
802 epg_ch.chtxt,title,start,stop,exp,longexp,category \
805 WHERE epg_ch.ontv=epg_timeline.channel \
812 dbcmd = db[1].execute(dbexe, (btime, etime, chtxt))
815 retall = db[1].fetchall()
818 def select_by_time_keyword_auto_suggest_epg_timeline(self,keyword,btime,etime):
819 db = self.connect_db()
822 epg_ch.chtxt,title,start,stop,exp,longexp,category \
825 WHERE epg_ch.ontv=epg_timeline.channel \
832 ( title LIKE \'%%"+keyword+"%%\' ) \
834 ( exp LIKE \'%%"+keyword+"%%\' ) \
836 ( longexp LIKE \'%%"+keyword+"%%\' ) \
838 dbcmd = db[1].execute(dbexe,(btime, etime))
841 retall = db[1].fetchall()
844 def new_in_auto_bayes_key(self):
845 db = self.connect_db()
847 db[1].execute('CREATE TABLE in_auto_bayes_key \
849 keychar VARCHAR(10),\
851 ratio_rec DECIMAL(32,14),\
852 ratio_all DECIMAL(32,14),\
853 UNIQUE unibayeskey(keychar,chtxt)\
855 db[1].execute('CREATE INDEX keycharindex ON in_auto_bayes_key(keychar)')
860 def add_in_auto_bayes_key(self,key,chtxt,ratio_rec,ratio_all):
861 db = self.connect_db()
862 ratio_rec=str(ratio_rec)
863 ratio_all=str(ratio_all)
865 INSERT IGNORE INTO in_auto_bayes_key \
866 (keychar,chtxt,ratio_rec,ratio_all) \
867 values (%s,%s,%s,%s)',\
868 (key,chtxt,ratio_rec,ratio_all))
870 def add_num_in_auto_bayes_key(self,chtxt,add_rec_num,add_all_num):
871 db = self.connect_db()
872 add_rec_num=str(add_rec_num)
873 add_all_num=str(add_all_num)
875 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",\
876 (add_rec_num,add_all_num,chtxt))
878 def change_in_auto_bayes_key(self,key,chtxt,new_ratio_rec,new_ratio_all):
881 db = self.connect_db()
883 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)\
886 def change_ratio_all_reduce_in_auto_bayes_key(self,chtxt,beforenum,newnum):
887 beforenum=str(beforenum)
889 db = self.connect_db()
891 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)\
894 def change_ratio_all_in_auto_bayes_key(self,key,chtxt,beforenum,addnum):
895 db = self.connect_db()
897 beforenum=str(beforenum)
898 db[1].execute("INSERT INTO in_auto_bayes_key (keychar,chtxt,ratio_rec,ratio_all) \
899 VALUES (%s,%s,%s,%s)\
900 ON DUPLICATE KEY UPDATE \
901 ratio_all=CONVERT((ratio_all*%s+%s)/%s,DECIMAL(32,14))",(key,chtxt,"0",str(Decimal(addnum)/beforenumf),beforenum,chtxt,key))
903 def change_multi_ratio_all_in_auto_bayes_key(self,chtxt,beforenum,list):
905 list={key:addnum}のリスト
908 beforenum=str(beforenum)
909 db = self.connect_db()
910 for i,j in list.items():
911 retl=(i,chtxt,"0",str(Decimal(j)/beforenumf),beforenum,str(j),beforenum)
912 db[1].execute("INSERT INTO in_auto_bayes_key (keychar,chtxt,ratio_rec,ratio_all) \
913 VALUES (%s,%s,%s,%s)\
914 ON DUPLICATE KEY UPDATE \
915 ratio_all=CONVERT((ratio_all*%s+%s)/%s,DECIMAL(32,14))",retl)
917 def change_ratio_rec_reduce_in_auto_bayes_key(self,chtxt,beforenum,newnum):
918 beforenum=str(beforenum)
920 db = self.connect_db()
922 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)\
925 def change_ratio_rec_in_auto_bayes_key(self,key,chtxt,beforenum,addnum):
926 db = self.connect_db()
928 beforenum=str(beforenum)
929 db[1].execute("INSERT INTO in_auto_bayes_key (keychar,chtxt,ratio_rec,ratio_all) \
930 VALUES (%s,%s,%s,%s)\
931 ON DUPLICATE KEY UPDATE \
932 ratio_rec=CONVERT((ratio_rec*%s+%s)/%s,DECIMAL(32,14))",(key,chtxt,str(Decimal(addnum)/beforenumf),"0",beforenum,chtxt,key))
934 def change_multi_ratio_rec_in_auto_bayes_key(self,chtxt,beforenum,list):#self,key,chtxt,beforenum,addnum):
936 beforenum=str(beforenum)
937 db = self.connect_db()
938 for i,j in list.items():
939 retl=(i,chtxt,str(Decimal(j)/beforenumf),"0",beforenum,str(j),beforenum)
940 db[1].execute("INSERT INTO in_auto_bayes_key (keychar,chtxt,ratio_rec,ratio_all) \
941 VALUES (%s,%s,%s,%s)\
942 ON DUPLICATE KEY UPDATE \
943 ratio_rec=CONVERT((ratio_rec*%s+%s)/%s,DECIMAL(32,14))",retl)
945 def select_by_key_in_auto_bayes_key(self,key,chtxt):
946 db = self.connect_db()
947 dbexe = db[1].execute("\
948 SELECT keychar,chtxt,ratio_rec,ratio_all \
949 FROM in_auto_bayes_key \
950 WHERE keychar = %s AND chtxt = %s", \
954 dls = db[1].fetchall()
961 def new_auto_timeline_keyword(self):
962 db = self.connect_db()
965 CREATE TABLE auto_timeline_keyword \
967 id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,\
972 UNIQUE uni (chtxt,title,btime,etime)\
976 def add_auto_timeline_keyword(self,chtxt="", title="", btime="", etime=""):
977 db = self.connect_db()
979 INSERT IGNORE into auto_timeline_keyword \
980 (chtxt,title,btime,etime) \
981 values (%s,%s,%s,%s)', \
982 (chtxt, title, btime, etime))
985 def delete_old_auto_timeline_keyword(self, dhour):
986 db = self.connect_db()
988 DELETE FROM auto_timeline_keyword \
990 btime < DATE_SUB(now(),INTERVAL " + dhour + " HOUR )")
992 def new_auto_timeline_bayes(self):
993 db = self.connect_db()
996 CREATE TABLE auto_timeline_bayes \
998 id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,\
1000 title VARCHAR(100),\
1004 UNIQUE uni (chtxt,title,btime,etime)\
1008 def add_auto_timeline_bayes(self,chtxt="", title="", btime="", etime="",point=""):
1009 db = self.connect_db()
1011 INSERT IGNORE into auto_timeline_bayes \
1012 (chtxt,title,btime,etime,point) \
1013 values (%s,%s,%s,%s,%s)', \
1014 (chtxt, title, btime, etime,point))
1016 def delete_old_auto_timeline_bayes(self, dhour):
1017 db = self.connect_db()
1019 DELETE FROM auto_timeline_bayes \
1021 btime < DATE_SUB(now(),INTERVAL " + dhour + " HOUR )")