3 # Rec10 TS Recording Tools
4 # Copyright (C) 2009-2010 Yukikaze
9 from decimal import Decimal
16 def __init__(self, dbname, user, passwd, host="localhost", port=3306):
17 warnings.filterwarnings('ignore', "Data truncated for column")
21 self.dbpasswd = passwd
24 con = MySQLdb.connect(user=user, passwd=passwd)
26 cur.execute('CREATE DATABASE ' + dbname + " DEFAULT CHARACTER SET utf8")
31 db = self.connect_db()
34 CREATE TABLE timeline \
36 id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,\
42 deltatime VARCHAR(5),\
45 UNIQUE uni (type,chtxt,title,btime,deltaday)\
50 self.new_epg_timeline("")
51 self.new_in_timeline_log()
52 self.new_in_auto_bayes_key()
53 self.new_in_auto_jbk_key()
55 self.new_in_settings()
56 self.new_auto_timeline_bayes()
57 self.new_auto_timeline_keyword()
62 con = MySQLdb.connect(db=self.dbname, host=self.dbhost, port=self.dbport, user=self.dbusr, passwd=self.dbpasswd, charset="utf8")
64 cur.execute('set names utf8;')
66 def close_db(self, db):
70 db = self.connect_db()
72 db[1].execute('drop table epg_ch')
80 ontv VARCHAR(30) PRIMARY KEY,\
92 def add_epg_ch(self, bctype, ontv, chtxt, ch, csch, updatetime):
93 db = self.connect_db()
96 VALUES (%s,%s,%s,%s,%s,"",%s,%s,%s)', \
97 (bctype, ontv, chtxt, ch, csch, updatetime, "1","1"))
99 def select_by_ontv_epg_ch(self, ontv):
100 db = self.connect_db()
101 dbexe = db[1].execute("\
102 SELECT bctype,ontv,chtxt,ch,csch,updatetime \
109 dls = db[1].fetchall()
113 r[5] = r[5].strftime("%Y-%m-%d %H:%M:%S")
116 def select_by_chtxt_epg_ch(self, chtxt):
117 db = self.connect_db()
118 dbexe = db[1].execute("\
119 SELECT bctype,ontv,chtxt,ch,csch,updatetime \
126 dls = db[1].fetchall()
130 r[5] = r[5].strftime("%Y-%m-%d %H:%M:%S")
133 def select_by_bctype_epg_ch(self, bctype):
134 db = self.connect_db()
135 dbexe = db[1].execute("\
136 SELECT bctype,ontv,chtxt,ch,csch,updatetime,status \
138 WHERE bctype = %s", \
143 dls = db[1].fetchall()
146 #recdblist.printutf8(dl)
148 r[5] = r[5].strftime("%Y-%m-%d %H:%M:%S")
152 def select_by_ch_epg_ch(self, ch):
153 db = self.connect_db()
154 dbexe = db[1].execute("\
156 bctype,ontv,chtxt,ch,csch,updatetime \
163 dls = db[1].fetchall()
167 r[5] = r[5].strftime("%Y-%m-%d %H:%M:%S")
170 def select_all_epg_ch(self):
171 db = self.connect_db()
172 dbexe = db[1].execute("\
173 SELECT bctype,ontv,chtxt,ch,csch,updatetime \
179 dls = db[1].fetchall()
183 r[5] = r[5].strftime("%Y-%m-%d %H:%M:%S")
186 def set_new_status(self,dhour):
187 db = self.connect_db()
188 dbexe = db[1].execute("UPDATE epg_ch \
192 updatetime < DATE_SUB(now(),INTERVAL " + dhour + " HOUR) \
197 def select_get_update_epg_ch(self, dhour):
198 db = self.connect_db()
199 dbexe = db[1].execute("SELECT bctype,chtxt,status FROM epg_ch \
202 updatetime < DATE_SUB(now(),INTERVAL " + dhour + " HOUR) \
208 ORDER BY status DESC")
210 #recdblist.printutf8(dbexe)
212 ret = db[1].fetchall()
215 def update_by_bctype_epg_ch(self, bctype):
216 db = self.connect_db()
222 WHERE bctype = %s", (bctype,))
224 def update_by_bctype_and_chtxt_epg_ch(self, bctype, chtxt):
225 db = self.connect_db()
231 WHERE bctype = %s AND chtxt = %s", (bctype, chtxt))
233 def update_status_by_bctype_epg_ch(self, bctype, status):
234 db = self.connect_db()
239 WHERE bctype = %s", \
243 def update_chname_by_ontv_epg_ch(self,ontv,chname):
244 db = self.connect_db()
253 def add_auto_proc_tmp(self,type,title,chtxt):
254 db = self.connect_db()
256 INSERT IGNORE into auto_proc_tmp \
258 values (%s,%s,%s)',(type,title,chtxt))
261 def new_auto_proc_tmp(self):
262 db = self.connect_db()
264 db[1].execute('drop table auto_proc_tmp')
269 CREATE TABLE auto_proc_tmp \
272 title VARCHAR(100) PRIMARY KEY,\
274 UNIQUE unibayeskey(title)\
279 def update_auto_proc(self):
280 db = self.connect_db()
282 db[1].execute('INSERT INTO auto_proc SELECT * FROM auto_proc_tmp')
286 def new_auto_proc(self):
287 db = self.connect_db()
289 db[1].execute('drop table auto_proc')
294 CREATE TABLE auto_proc \
297 title VARCHAR(100) PRIMARY KEY,\
299 UNIQUE unibayeskey(title)\
304 def add_auto_proc(self,type,title,chtxt):
305 db = self.connect_db()
307 INSERT IGNORE into auto_proc \
309 values (%s,%s,%s)',(type,title,chtxt))
312 def drop_in_settings(self):
313 db = self.connect_db()
315 db[1].execute('drop table in_settings')
319 def new_in_settings(self):
320 db = self.connect_db()
323 CREATE TABLE in_settings \
327 auto_opt VARCHAR(20),\
328 auto_del_tmp TINYINT\
330 db[1].execute("INSERT IGNORE into in_settings VALUE (0,0,\"G\",1)")
334 def select_all_in_settings(self):
335 db = self.connect_db()
336 dbexe = db[1].execute("\
337 SELECT auto_jbk,auto_bayes,auto_del_tmp,auto_opt \
343 dls = db[1].fetchall()
353 def add_in_timeline_log(self , chtxt="", title="", btime="", etime="", opt="", exp="", longexp="", category=""):
354 db = self.connect_db()
356 INSERT IGNORE into in_timeline_log \
357 (chtxt,title,btime,etime,opt,exp,longexp,category) \
358 values (%s,%s,%s,%s,%s,%s,%s,%s)', \
359 ( chtxt, title, btime, etime, opt,exp,longexp,category))
362 def del_in_timeline_log(self, title="", chtxt="", btime=""):
366 db = self.connect_db()
368 DELETE FROM in_timeline_log \
369 WHERE title = %s AND chtxt = %s AND btime = %s", \
370 (title, chtxt, btime))
373 def new_in_timeline_log(self):
374 db = self.connect_db()
377 CREATE TABLE in_timeline_log \
379 id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,\
387 category VARCHAR(100),\
388 UNIQUE uni (chtxt,title,btime,category)\
393 def select_chtxt_by_title_timeline_log(self,title):
394 db = self.connect_db()
395 dbexe = db[1].execute("\
397 FROM in_timeline_log \
398 WHERE title LIKE \"%"+title+"%\"\
400 ORDER by sum(1) DESC limit 1")
401 retdb=db[1].fetchall()
408 def add_timeline(self, type="", chtxt="", title="", btime="", etime="", deltatime="", deltaday="", opt=""):
409 db = self.connect_db()
411 INSERT IGNORE into timeline \
412 (type,chtxt,title,btime,etime,deltatime,deltaday,opt) \
413 values (%s,%s,%s,%s,%s,%s,%s,%s)', \
414 (type, chtxt, title, btime, etime, deltatime, deltaday, opt))
417 def del_timeline(self, type="", title="", chtxt="", btime=""):
421 db = self.connect_db()
423 DELETE FROM timeline \
424 WHERE type = %s AND title = %s AND chtxt = %s AND btime = %s", \
425 (type, title, chtxt, btime))
428 def select_all_timeline(self):
429 db = self.connect_db()
431 dbr = db[1].execute("\
432 SELECT type, chtxt, title, btime, etime, deltatime ,deltaday ,opt \
434 dbl = db[1].fetchall()
437 for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in dbl:
442 btime = btime.strftime("%Y-%m-%d %H:%M:%S")
443 etime = etime.strftime("%Y-%m-%d %H:%M:%S")
447 ret['deltatime'] = ""
449 if deltatime == None:
454 ret['deltatime'] = deltatime
455 elif typet == 'keyevery':
456 ret['deltatime'] = deltatime
457 ret['deltaday'] = deltaday
461 def select_bytime_timeline(self, dminutes):
462 db = self.connect_db()
464 #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 )")
465 dbr = db[1].execute("SELECT \
466 type, chtxt, title, btime, etime, deltatime ,deltaday ,opt \
468 WHERE btime BETWEEN DATE_SUB(now(),INTERVAL " + dminutes + " MINUTE ) AND \
469 DATE_ADD(now(),INTERVAL " + dminutes + " MINUTE )")
470 dbl = db[1].fetchall()
472 #recdblist.printutf8(dbl)
474 for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in dbl:
479 btime = btime.strftime("%Y-%m-%d %H:%M:%S")
480 etime = etime.strftime("%Y-%m-%d %H:%M:%S")
484 if deltatime == None or deltatime == "":
486 if deltaday == None or deltaday == "":
488 if typet == recdblist.REC_KEYWORD:
489 ret['deltatime'] = deltatime
490 elif typet == recdblist.REC_KEYWORD_EVERY_SOME_DAYS:
491 ret['deltatime'] = deltatime
492 ret['deltaday'] = deltaday
495 def select_by_name_time_timeline(self,title,btime,btime2):
496 db = self.connect_db()
498 #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 )")
499 dbr = db[1].execute("SELECT \
500 type, chtxt, title, btime, etime, deltatime ,deltaday ,opt \
502 WHERE btime > %s AND \
503 btime < %s AND title = %s",(btime,btime2,title))
504 dbl = db[1].fetchall()
506 #recdblist.printutf8(dbl)
508 for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in dbl:
513 btime = btime.strftime("%Y-%m-%d %H:%M:%S")
514 etime = etime.strftime("%Y-%m-%d %H:%M:%S")
518 if deltatime == None or deltatime == "":
520 if deltaday == None or deltaday == "":
522 if typet == recdblist.REC_KEYWORD:
523 ret['deltatime'] = deltatime
524 elif typet == recdblist.REC_KEYWORD_EVERY_SOME_DAYS:
525 ret['deltatime'] = deltatime
526 ret['deltaday'] = deltaday
529 def select_bytime_all_timeline(self,btime,etime):
530 db = self.connect_db()
532 #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 )")
533 dbr = db[1].execute("SELECT \
534 type, chtxt, title, btime, etime, deltatime ,deltaday ,opt \
536 WHERE btime > %s AND \
537 etime < %s",(btime,etime))
538 dbl = db[1].fetchall()
540 #recdblist.printutf8(dbl)
542 for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in dbl:
547 btime = btime.strftime("%Y-%m-%d %H:%M:%S")
548 etime = etime.strftime("%Y-%m-%d %H:%M:%S")
552 if deltatime == None or deltatime == "":
554 if deltaday == None or deltaday == "":
556 if typet == recdblist.REC_KEYWORD:
557 ret['deltatime'] = deltatime
558 elif typet == recdblist.REC_KEYWORD_EVERY_SOME_DAYS:
559 ret['deltatime'] = deltatime
560 ret['deltaday'] = deltaday
563 def count_schedule_timeline(self, btime, etime):
566 return [te num,bs/cs num]
568 db = self.connect_db()
569 dbexe = "SELECT type,epg_ch.bctype,timeline.chtxt,title FROM timeline INNER JOIN epg_ch ON timeline.chtxt=epg_ch.chtxt"
570 dbexe = dbexe + " WHERE ((NOT(( timeline.etime <= %s )OR( timeline.btime >= %s ))) OR ((timeline.btime = %s) AND (timeline.etime = %s) ) )"
573 db[1].execute(dbexe, (btime, etime,btime,etime))
575 for typet, bctypet, chtxtt, titlet in dbl:
576 if (typet == recdblist.REC_RESERVE) or (typet == recdblist.REC_FINAL_RESERVE) or (typet == recdblist.REC_KEYWORD) or (typet == recdblist.REC_KEYWORD_EVERY_SOME_DAYS):
577 if bctypet.find("cs") > -1:
579 elif bctypet.find("bs") > -1:
581 elif bctypet.find("te") > -1:
585 def select_bytime_bychtxt_all_timeline(self,btime,etime,chtxt):
586 db = self.connect_db()
588 #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 )")
589 dbr = db[1].execute("SELECT \
590 type, chtxt, title, btime, etime, deltatime ,deltaday ,opt \
592 WHERE btime > %s AND \
594 AND chtxt=%s ",(btime,etime,chtxt))
595 dbl = db[1].fetchall()
597 #recdblist.printutf8(dbl)
599 for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in dbl:
604 btime = btime.strftime("%Y-%m-%d %H:%M:%S")
605 etime = etime.strftime("%Y-%m-%d %H:%M:%S")
609 if deltatime == None or deltatime == "":
611 if deltaday == None or deltaday == "":
613 if typet == recdblist.REC_KEYWORD:
614 ret['deltatime'] = deltatime
615 elif typet == recdblist.REC_KEYWORD_EVERY_SOME_DAYS:
616 ret['deltatime'] = deltatime
617 ret['deltaday'] = deltaday
620 def delete_old_timeline(self, dhour):
621 db = self.connect_db()
623 DELETE FROM timeline \
625 btime < DATE_SUB(now(),INTERVAL " + dhour + " HOUR )")
628 def new_in_auto_jbk_key(self):
629 db = self.connect_db()
632 CREATE TABLE in_auto_jbk_key \
634 id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,\
635 keyword VARCHAR(200),\
636 UNIQUE unijbk (keyword)\
641 def add_in_auto_jbk_key(self,key):
642 db = self.connect_db()
644 INSERT IGNORE into in_auto_jbk_key \
650 def select_all_in_auto_jbk_key(self):
651 db = self.connect_db()
652 dbexe = db[1].execute("\
654 FROM in_auto_jbk_key \
658 ret = db[1].fetchall()
661 def drop_in_status(self):
662 db = self.connect_db()
664 db[1].execute('drop table in_status')
668 def new_in_status(self):
669 db = self.connect_db()
672 CREATE TABLE in_status \
674 ts2avi TINYINT DEFAULT 0,\
675 terec TINYINT DEFAULT 0,\
676 bscsrec TINYINT DEFAULT 0,\
677 b252ts TINYINT DEFAULT 0,\
678 installed TINYINT DEFAULT 0\
680 db[1].execute("INSERT IGNORE into in_status VALUE (0,0,0,0,0)")
684 def select_all_in_status(self):
685 db = self.connect_db()
686 dbexe = db[1].execute("\
687 SELECT ts2avi,terec,bscsrec,b252ts \
693 dls = db[1].fetchall()
704 def change_ts2avi_in_status(self,i):
709 db = self.connect_db()
711 UPDATE in_status SET ts2avi=ts2avi+%s",i)
713 def change_terec_in_status(self,i):
718 db = self.connect_db()
720 UPDATE in_status SET terec=terec+%s",i)
722 def change_bscsrec_in_status(self,i):
727 db = self.connect_db()
729 UPDATE in_status SET bscsrec=bscsrec+%s",i)
731 def change_b252ts_in_status(self,i):
736 db = self.connect_db()
738 UPDATE in_status SET b252ts=b252ts+%s",i)
740 def select_installed_in_status(self):
741 db = self.connect_db()
742 dbexe = db[1].execute("\
743 SELECT ts2avi,terec,bscsrec,b252ts,installed \
749 dls = db[1].fetchall()
755 def change_installed_in_status(self):
759 db = self.connect_db()
761 UPDATE in_status SET installed=1")
763 def new_epg_timeline(self, bctype):
764 db = self.connect_db()
767 DELETE FROM epg_timeline \
768 WHERE bctype = %s", \
774 CREATE TABLE epg_timeline \
777 channel VARCHAR(100) NOT NULL,\
783 category VARCHAR(100),\
784 UNIQUE unitv(bctype,channel,start,stop,title)\
790 def add_epg_timeline(self, bctype, channel, start, stop, title, desc,longdesc, category):
791 db = self.connect_db()
793 INSERT IGNORE INTO epg_timeline \
794 VALUES (%s,%s,%s,%s,%s,%s,%s,%s)', \
795 (bctype, channel, start, stop, title, desc,longdesc,category))
798 def add_multi_epg_timeline(self, tvlists):
800 tvlists is (bctype,channel,start,stop,title,desc,longdesc,category) lists.
802 db = self.connect_db()
804 INSERT IGNORE INTO epg_timeline \
805 (bctype,channel,start,stop,title,exp,longexp,category) \
806 values(%s,%s,%s,%s,%s,%s,%s,%s)', \
809 def select_by_time_ngram_epg_timeline(self, btime, etime, chtxt):
810 db = self.connect_db()
813 epg_ch.chtxt,title,start,stop,exp,longexp,category \
816 WHERE epg_ch.ontv=epg_timeline.channel \
823 dbcmd = db[1].execute(dbexe, (btime, etime, chtxt))
826 retall = db[1].fetchall()
829 def select_by_time_keyword_auto_suggest_epg_timeline(self,keyword,btime,etime):
830 db = self.connect_db()
833 epg_ch.chtxt,title,start,stop,exp,longexp,category \
836 WHERE epg_ch.ontv=epg_timeline.channel \
843 ( title LIKE \'%%"+keyword+"%%\' ) \
845 ( exp LIKE \'%%"+keyword+"%%\' ) \
847 ( longexp LIKE \'%%"+keyword+"%%\' ) \
849 dbcmd = db[1].execute(dbexe,(btime, etime))
852 retall = db[1].fetchall()
855 def new_in_auto_bayes_key(self):
856 db = self.connect_db()
858 db[1].execute('CREATE TABLE in_auto_bayes_key \
860 keychar VARCHAR(10),\
862 ratio_rec DECIMAL(32,14),\
863 ratio_all DECIMAL(32,14),\
864 UNIQUE unibayeskey(keychar,chtxt)\
866 db[1].execute('CREATE INDEX keycharindex ON in_auto_bayes_key(keychar)')
871 def add_in_auto_bayes_key(self,key,chtxt,ratio_rec,ratio_all):
872 db = self.connect_db()
873 ratio_rec=str(ratio_rec)
874 ratio_all=str(ratio_all)
876 INSERT IGNORE INTO in_auto_bayes_key \
877 (keychar,chtxt,ratio_rec,ratio_all) \
878 values (%s,%s,%s,%s)',\
879 (key,chtxt,ratio_rec,ratio_all))
881 def add_num_in_auto_bayes_key(self,chtxt,add_rec_num,add_all_num):
882 db = self.connect_db()
883 add_rec_num=str(add_rec_num)
884 add_all_num=str(add_all_num)
886 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",\
887 (add_rec_num,add_all_num,chtxt))
889 def change_in_auto_bayes_key(self,key,chtxt,new_ratio_rec,new_ratio_all):
892 db = self.connect_db()
894 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)\
897 def change_ratio_all_reduce_in_auto_bayes_key(self,chtxt,beforenum,newnum):
898 beforenum=str(beforenum)
900 db = self.connect_db()
902 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)\
905 def change_ratio_all_in_auto_bayes_key(self,key,chtxt,beforenum,addnum):
906 db = self.connect_db()
908 beforenum=str(beforenum)
909 db[1].execute("INSERT INTO in_auto_bayes_key (keychar,chtxt,ratio_rec,ratio_all) \
910 VALUES (%s,%s,%s,%s)\
911 ON DUPLICATE KEY UPDATE \
912 ratio_all=CONVERT((ratio_all*%s+%s)/%s,DECIMAL(32,14))",(key,chtxt,"0",str(Decimal(addnum)/beforenumf),beforenum,chtxt,key))
914 def change_multi_ratio_all_in_auto_bayes_key(self,chtxt,beforenum,list):
916 list={key:addnum}のリスト
919 beforenum=str(beforenum)
920 db = self.connect_db()
921 for i,j in list.items():
922 retl=(i,chtxt,"0",str(Decimal(j)/beforenumf),beforenum,str(j),beforenum)
924 db[1].execute("INSERT INTO in_auto_bayes_key (keychar,chtxt,ratio_rec,ratio_all) \
925 VALUES (%s,%s,%s,%s)\
926 ON DUPLICATE KEY UPDATE \
927 ratio_all=CONVERT((ratio_all*%s+%s)/%s,DECIMAL(32,14))",retl)
931 def change_ratio_rec_reduce_in_auto_bayes_key(self,chtxt,beforenum,newnum):
932 beforenum=str(beforenum)
934 db = self.connect_db()
936 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)\
939 def change_ratio_rec_in_auto_bayes_key(self,key,chtxt,beforenum,addnum):
940 db = self.connect_db()
942 beforenum=str(beforenum)
943 db[1].execute("INSERT INTO in_auto_bayes_key (keychar,chtxt,ratio_rec,ratio_all) \
944 VALUES (%s,%s,%s,%s)\
945 ON DUPLICATE KEY UPDATE \
946 ratio_rec=CONVERT((ratio_rec*%s+%s)/%s,DECIMAL(32,14))",(key,chtxt,str(Decimal(addnum)/beforenumf),"0",beforenum,chtxt,key))
948 def change_multi_ratio_rec_in_auto_bayes_key(self,chtxt,beforenum,list):#self,key,chtxt,beforenum,addnum):
950 beforenum=str(beforenum)
951 db = self.connect_db()
952 for i,j in list.items():
953 retl=(i,chtxt,str(Decimal(j)/beforenumf),"0",beforenum,str(j),beforenum)
955 db[1].execute("INSERT INTO in_auto_bayes_key (keychar,chtxt,ratio_rec,ratio_all) \
956 VALUES (%s,%s,%s,%s)\
957 ON DUPLICATE KEY UPDATE \
958 ratio_rec=CONVERT((ratio_rec*%s+%s)/%s,DECIMAL(32,14))",retl)
962 def select_by_key_in_auto_bayes_key(self,key,chtxt):
963 db = self.connect_db()
964 dbexe = db[1].execute("\
965 SELECT keychar,chtxt,ratio_rec,ratio_all \
966 FROM in_auto_bayes_key \
967 WHERE keychar = %s AND chtxt = %s", \
971 dls = db[1].fetchall()
978 def new_auto_timeline_keyword(self):
979 db = self.connect_db()
982 CREATE TABLE auto_timeline_keyword \
984 id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,\
989 UNIQUE uni (chtxt,title,btime,etime)\
993 def add_auto_timeline_keyword(self,chtxt="", title="", btime="", etime=""):
994 db = self.connect_db()
996 INSERT IGNORE into auto_timeline_keyword \
997 (chtxt,title,btime,etime) \
998 values (%s,%s,%s,%s)', \
999 (chtxt, title, btime, etime))
1002 def delete_old_auto_timeline_keyword(self, dhour):
1003 db = self.connect_db()
1005 DELETE FROM auto_timeline_keyword \
1007 btime < DATE_SUB(now(),INTERVAL " + dhour + " HOUR )")
1009 def new_auto_timeline_bayes(self):
1010 db = self.connect_db()
1013 CREATE TABLE auto_timeline_bayes \
1015 id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,\
1017 title VARCHAR(100),\
1021 UNIQUE uni (chtxt,title,btime,etime)\
1025 def add_auto_timeline_bayes(self,chtxt="", title="", btime="", etime="",point=""):
1026 db = self.connect_db()
1028 INSERT IGNORE into auto_timeline_bayes \
1029 (chtxt,title,btime,etime,point) \
1030 values (%s,%s,%s,%s,%s)', \
1031 (chtxt, title, btime, etime,point))
1033 def delete_old_auto_timeline_bayes(self, dhour):
1034 db = self.connect_db()
1036 DELETE FROM auto_timeline_bayes \
1038 btime < DATE_SUB(now(),INTERVAL " + dhour + " HOUR )")