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()
240 WHERE bctype = %s", \
244 def update_chname_by_ontv_epg_ch(self,ontv,chname):
245 db = self.connect_db()
254 def add_auto_proc_tmp(self,type,title,chtxt):
255 db = self.connect_db()
257 INSERT IGNORE into auto_proc_tmp \
259 values (%s,%s,%s)',(type,title,chtxt))
262 def new_auto_proc_tmp(self):
263 db = self.connect_db()
265 db[1].execute('drop table auto_proc_tmp')
270 CREATE TABLE auto_proc_tmp \
273 title VARCHAR(100) PRIMARY KEY,\
275 UNIQUE unibayeskey(title)\
280 def update_auto_proc(self):
281 db = self.connect_db()
283 db[1].execute('INSERT INTO auto_proc SELECT * FROM auto_proc_tmp')
287 def new_auto_proc(self):
288 db = self.connect_db()
290 db[1].execute('drop table auto_proc')
295 CREATE TABLE auto_proc \
298 title VARCHAR(100) PRIMARY KEY,\
300 UNIQUE unibayeskey(title)\
305 def add_auto_proc(self,type,title,chtxt):
306 db = self.connect_db()
308 INSERT IGNORE into auto_proc \
310 values (%s,%s,%s)',(type,title,chtxt))
313 def drop_in_settings(self):
314 db = self.connect_db()
316 db[1].execute('drop table in_settings')
320 def new_in_settings(self):
321 db = self.connect_db()
324 CREATE TABLE in_settings \
328 auto_opt VARCHAR(20),\
329 auto_del_tmp TINYINT\
331 db[1].execute("INSERT IGNORE into in_settings VALUE (0,0,\"G\",1)")
335 def select_all_in_settings(self):
336 db = self.connect_db()
337 dbexe = db[1].execute("\
338 SELECT auto_jbk,auto_bayes,auto_del_tmp,auto_opt \
344 dls = db[1].fetchall()
354 def add_in_timeline_log(self , chtxt="", title="", btime="", etime="", opt="", exp="", longexp="", category=""):
355 db = self.connect_db()
357 INSERT IGNORE into in_timeline_log \
358 (chtxt,title,btime,etime,opt,exp,longexp,category) \
359 values (%s,%s,%s,%s,%s,%s,%s,%s)', \
360 ( chtxt, title, btime, etime, opt,exp,longexp,category))
363 def del_in_timeline_log(self, title="", chtxt="", btime=""):
367 db = self.connect_db()
369 DELETE FROM in_timeline_log \
370 WHERE title = %s AND chtxt = %s AND btime = %s", \
371 (title, chtxt, btime))
374 def new_in_timeline_log(self):
375 db = self.connect_db()
378 CREATE TABLE in_timeline_log \
380 id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,\
388 category VARCHAR(100),\
389 UNIQUE uni (chtxt,title,btime,category)\
394 def select_chtxt_by_title_timeline_log(self,title):
395 db = self.connect_db()
396 dbexe = db[1].execute("\
398 FROM in_timeline_log \
399 WHERE title LIKE \"%"+title+"%\"\
401 ORDER by sum(1) DESC limit 1")
402 retdb=db[1].fetchall()
409 def add_timeline(self, type="", chtxt="", title="", btime="", etime="", deltatime="", deltaday="", opt=""):
410 db = self.connect_db()
412 INSERT IGNORE into timeline \
413 (type,chtxt,title,btime,etime,deltatime,deltaday,opt) \
414 values (%s,%s,%s,%s,%s,%s,%s,%s)', \
415 (type, chtxt, title, btime, etime, deltatime, deltaday, opt))
418 def del_timeline(self, type="", title="", chtxt="", btime=""):
422 db = self.connect_db()
424 DELETE FROM timeline \
425 WHERE type = %s AND title = %s AND chtxt = %s AND btime = %s", \
426 (type, title, chtxt, btime))
429 def select_all_timeline(self):
430 db = self.connect_db()
432 dbr = db[1].execute("\
433 SELECT type, chtxt, title, btime, etime, deltatime ,deltaday ,opt \
435 dbl = db[1].fetchall()
438 for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in dbl:
443 btime = btime.strftime("%Y-%m-%d %H:%M:%S")
444 etime = etime.strftime("%Y-%m-%d %H:%M:%S")
448 ret['deltatime'] = ""
450 if deltatime == None:
455 ret['deltatime'] = deltatime
456 elif typet == 'keyevery':
457 ret['deltatime'] = deltatime
458 ret['deltaday'] = deltaday
462 def select_bytime_timeline(self, dminutes):
463 db = self.connect_db()
465 #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 )")
466 dbr = db[1].execute("SELECT \
467 type, chtxt, title, btime, etime, deltatime ,deltaday ,opt \
469 WHERE btime BETWEEN DATE_SUB(now(),INTERVAL " + dminutes + " MINUTE ) AND \
470 DATE_ADD(now(),INTERVAL " + dminutes + " MINUTE )")
471 dbl = db[1].fetchall()
473 #recdblist.printutf8(dbl)
475 for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in dbl:
480 btime = btime.strftime("%Y-%m-%d %H:%M:%S")
481 etime = etime.strftime("%Y-%m-%d %H:%M:%S")
485 if deltatime == None or deltatime == "":
487 if deltaday == None or deltaday == "":
489 if typet == recdblist.REC_KEYWORD:
490 ret['deltatime'] = deltatime
491 elif typet == recdblist.REC_KEYWORD_EVERY_SOME_DAYS:
492 ret['deltatime'] = deltatime
493 ret['deltaday'] = deltaday
496 def select_by_name_time_timeline(self,title,btime,btime2):
497 db = self.connect_db()
499 #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 )")
500 dbr = db[1].execute("SELECT \
501 type, chtxt, title, btime, etime, deltatime ,deltaday ,opt \
503 WHERE btime > %s AND \
504 btime < %s AND title = %s",(btime,btime2,title))
505 dbl = db[1].fetchall()
507 #recdblist.printutf8(dbl)
509 for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in dbl:
514 btime = btime.strftime("%Y-%m-%d %H:%M:%S")
515 etime = etime.strftime("%Y-%m-%d %H:%M:%S")
519 if deltatime == None or deltatime == "":
521 if deltaday == None or deltaday == "":
523 if typet == recdblist.REC_KEYWORD:
524 ret['deltatime'] = deltatime
525 elif typet == recdblist.REC_KEYWORD_EVERY_SOME_DAYS:
526 ret['deltatime'] = deltatime
527 ret['deltaday'] = deltaday
530 def select_bytime_all_timeline(self,btime,etime):
531 db = self.connect_db()
533 #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 )")
534 dbr = db[1].execute("SELECT \
535 type, chtxt, title, btime, etime, deltatime ,deltaday ,opt \
537 WHERE btime > %s AND \
538 etime < %s",(btime,etime))
539 dbl = db[1].fetchall()
541 #recdblist.printutf8(dbl)
543 for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in dbl:
548 btime = btime.strftime("%Y-%m-%d %H:%M:%S")
549 etime = etime.strftime("%Y-%m-%d %H:%M:%S")
553 if deltatime == None or deltatime == "":
555 if deltaday == None or deltaday == "":
557 if typet == recdblist.REC_KEYWORD:
558 ret['deltatime'] = deltatime
559 elif typet == recdblist.REC_KEYWORD_EVERY_SOME_DAYS:
560 ret['deltatime'] = deltatime
561 ret['deltaday'] = deltaday
564 def count_schedule_timeline(self, btime, etime):
567 return [te num,bs/cs num]
569 db = self.connect_db()
570 dbexe = "SELECT type,epg_ch.bctype,timeline.chtxt,title FROM timeline INNER JOIN epg_ch ON timeline.chtxt=epg_ch.chtxt"
571 dbexe = dbexe + " WHERE ((NOT(( timeline.etime <= %s )OR( timeline.btime >= %s ))) OR ((timeline.btime = %s) AND (timeline.etime = %s) ) )"
574 db[1].execute(dbexe, (btime, etime,btime,etime))
576 for typet, bctypet, chtxtt, titlet in dbl:
577 if (typet == recdblist.REC_RESERVE) or (typet == recdblist.REC_FINAL_RESERVE) or (typet == recdblist.REC_KEYWORD) or (typet == recdblist.REC_KEYWORD_EVERY_SOME_DAYS):
578 if bctypet.find("cs") > -1:
580 elif bctypet.find("bs") > -1:
582 elif bctypet.find("te") > -1:
586 def select_bytime_bychtxt_all_timeline(self,btime,etime,chtxt):
587 db = self.connect_db()
589 #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 )")
590 dbr = db[1].execute("SELECT \
591 type, chtxt, title, btime, etime, deltatime ,deltaday ,opt \
593 WHERE btime > %s AND \
595 AND chtxt=%s ",(btime,etime,chtxt))
596 dbl = db[1].fetchall()
598 #recdblist.printutf8(dbl)
600 for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in dbl:
605 btime = btime.strftime("%Y-%m-%d %H:%M:%S")
606 etime = etime.strftime("%Y-%m-%d %H:%M:%S")
610 if deltatime == None or deltatime == "":
612 if deltaday == None or deltaday == "":
614 if typet == recdblist.REC_KEYWORD:
615 ret['deltatime'] = deltatime
616 elif typet == recdblist.REC_KEYWORD_EVERY_SOME_DAYS:
617 ret['deltatime'] = deltatime
618 ret['deltaday'] = deltaday
621 def delete_old_timeline(self, dhour):
622 db = self.connect_db()
624 DELETE FROM timeline \
626 btime < DATE_SUB(now(),INTERVAL " + dhour + " HOUR )")
629 def new_in_auto_jbk_key(self):
630 db = self.connect_db()
633 CREATE TABLE in_auto_jbk_key \
635 id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,\
636 keyword VARCHAR(200),\
637 UNIQUE unijbk (keyword)\
642 def add_in_auto_jbk_key(self,key):
643 db = self.connect_db()
645 INSERT IGNORE into in_auto_jbk_key \
651 def select_all_in_auto_jbk_key(self):
652 db = self.connect_db()
653 dbexe = db[1].execute("\
655 FROM in_auto_jbk_key \
659 ret = db[1].fetchall()
662 def drop_in_status(self):
663 db = self.connect_db()
665 db[1].execute('drop table in_status')
669 def new_in_status(self):
670 db = self.connect_db()
673 CREATE TABLE in_status \
675 ts2avi TINYINT DEFAULT 0,\
676 terec TINYINT DEFAULT 0,\
677 bscsrec TINYINT DEFAULT 0,\
678 b252ts TINYINT DEFAULT 0,\
679 installed TINYINT DEFAULT 0\
681 db[1].execute("INSERT IGNORE into in_status VALUE (0,0,0,0,0)")
685 def select_all_in_status(self):
686 db = self.connect_db()
687 dbexe = db[1].execute("\
688 SELECT ts2avi,terec,bscsrec,b252ts \
694 dls = db[1].fetchall()
705 def change_ts2avi_in_status(self,i):
710 db = self.connect_db()
712 UPDATE in_status SET ts2avi=ts2avi+%s",i)
714 def change_terec_in_status(self,i):
719 db = self.connect_db()
721 UPDATE in_status SET terec=terec+%s",i)
723 def change_bscsrec_in_status(self,i):
728 db = self.connect_db()
730 UPDATE in_status SET bscsrec=bscsrec+%s",i)
732 def change_b252ts_in_status(self,i):
737 db = self.connect_db()
739 UPDATE in_status SET b252ts=b252ts+%s",i)
741 def select_installed_in_status(self):
742 db = self.connect_db()
743 dbexe = db[1].execute("\
744 SELECT ts2avi,terec,bscsrec,b252ts,installed \
750 dls = db[1].fetchall()
756 def change_installed_in_status(self):
760 db = self.connect_db()
762 UPDATE in_status SET installed=1")
764 def new_epg_timeline(self, bctype):
765 db = self.connect_db()
768 DELETE FROM epg_timeline \
769 WHERE bctype = %s", \
775 CREATE TABLE epg_timeline \
778 channel VARCHAR(100) NOT NULL,\
784 category VARCHAR(100),\
785 UNIQUE unitv(bctype,channel,start,stop,title)\
791 def add_epg_timeline(self, bctype, channel, start, stop, title, desc,longdesc, category):
792 db = self.connect_db()
794 INSERT IGNORE INTO epg_timeline \
795 VALUES (%s,%s,%s,%s,%s,%s,%s,%s)', \
796 (bctype, channel, start, stop, title, desc,longdesc,category))
799 def add_multi_epg_timeline(self, tvlists):
801 tvlists is (bctype,channel,start,stop,title,desc,longdesc,category) lists.
803 db = self.connect_db()
805 INSERT IGNORE INTO epg_timeline \
806 (bctype,channel,start,stop,title,exp,longexp,category) \
807 values(%s,%s,%s,%s,%s,%s,%s,%s)', \
810 def select_by_time_ngram_epg_timeline(self, btime, etime, chtxt):
811 db = self.connect_db()
814 epg_ch.chtxt,title,start,stop,exp,longexp,category \
817 WHERE epg_ch.ontv=epg_timeline.channel \
824 dbcmd = db[1].execute(dbexe, (btime, etime, chtxt))
827 retall = db[1].fetchall()
830 def select_by_time_keyword_auto_suggest_epg_timeline(self,keyword,btime,etime):
831 db = self.connect_db()
834 epg_ch.chtxt,title,start,stop,exp,longexp,category \
837 WHERE epg_ch.ontv=epg_timeline.channel \
844 ( title LIKE \'%%"+keyword+"%%\' ) \
846 ( exp LIKE \'%%"+keyword+"%%\' ) \
848 ( longexp LIKE \'%%"+keyword+"%%\' ) \
850 dbcmd = db[1].execute(dbexe,(btime, etime))
853 retall = db[1].fetchall()
856 def new_in_auto_bayes_key(self):
857 db = self.connect_db()
859 db[1].execute('CREATE TABLE in_auto_bayes_key \
861 keychar VARCHAR(10),\
863 ratio_rec DECIMAL(32,14),\
864 ratio_all DECIMAL(32,14),\
865 UNIQUE unibayeskey(keychar,chtxt)\
867 db[1].execute('CREATE INDEX keycharindex ON in_auto_bayes_key(keychar)')
872 def add_in_auto_bayes_key(self,key,chtxt,ratio_rec,ratio_all):
873 db = self.connect_db()
874 ratio_rec=str(ratio_rec)
875 ratio_all=str(ratio_all)
877 INSERT IGNORE INTO in_auto_bayes_key \
878 (keychar,chtxt,ratio_rec,ratio_all) \
879 values (%s,%s,%s,%s)',\
880 (key,chtxt,ratio_rec,ratio_all))
882 def add_num_in_auto_bayes_key(self,chtxt,add_rec_num,add_all_num):
883 db = self.connect_db()
884 add_rec_num=str(add_rec_num)
885 add_all_num=str(add_all_num)
887 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",\
888 (add_rec_num,add_all_num,chtxt))
890 def change_in_auto_bayes_key(self,key,chtxt,new_ratio_rec,new_ratio_all):
893 db = self.connect_db()
895 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)\
898 def change_ratio_all_reduce_in_auto_bayes_key(self,chtxt,beforenum,newnum):
899 beforenum=str(beforenum)
901 db = self.connect_db()
903 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)\
906 def change_ratio_all_in_auto_bayes_key(self,key,chtxt,beforenum,addnum):
907 db = self.connect_db()
909 beforenum=str(beforenum)
910 db[1].execute("INSERT INTO in_auto_bayes_key (keychar,chtxt,ratio_rec,ratio_all) \
911 VALUES (%s,%s,%s,%s)\
912 ON DUPLICATE KEY UPDATE \
913 ratio_all=CONVERT((ratio_all*%s+%s)/%s,DECIMAL(32,14))",(key,chtxt,"0",str(Decimal(addnum)/beforenumf),beforenum,chtxt,key))
915 def change_multi_ratio_all_in_auto_bayes_key(self,chtxt,beforenum,list):
917 list={key:addnum}のリスト
920 beforenum=str(beforenum)
921 db = self.connect_db()
922 for i,j in list.items():
923 retl=(i,chtxt,"0",str(Decimal(j)/beforenumf),beforenum,str(j),beforenum)
925 db[1].execute("INSERT INTO in_auto_bayes_key (keychar,chtxt,ratio_rec,ratio_all) \
926 VALUES (%s,%s,%s,%s)\
927 ON DUPLICATE KEY UPDATE \
928 ratio_all=CONVERT((ratio_all*%s+%s)/%s,DECIMAL(32,14))",retl)
932 def change_ratio_rec_reduce_in_auto_bayes_key(self,chtxt,beforenum,newnum):
933 beforenum=str(beforenum)
935 db = self.connect_db()
937 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)\
940 def change_ratio_rec_in_auto_bayes_key(self,key,chtxt,beforenum,addnum):
941 db = self.connect_db()
943 beforenum=str(beforenum)
944 db[1].execute("INSERT INTO in_auto_bayes_key (keychar,chtxt,ratio_rec,ratio_all) \
945 VALUES (%s,%s,%s,%s)\
946 ON DUPLICATE KEY UPDATE \
947 ratio_rec=CONVERT((ratio_rec*%s+%s)/%s,DECIMAL(32,14))",(key,chtxt,str(Decimal(addnum)/beforenumf),"0",beforenum,chtxt,key))
949 def change_multi_ratio_rec_in_auto_bayes_key(self,chtxt,beforenum,list):#self,key,chtxt,beforenum,addnum):
951 beforenum=str(beforenum)
952 db = self.connect_db()
953 for i,j in list.items():
954 retl=(i,chtxt,str(Decimal(j)/beforenumf),"0",beforenum,str(j),beforenum)
956 db[1].execute("INSERT INTO in_auto_bayes_key (keychar,chtxt,ratio_rec,ratio_all) \
957 VALUES (%s,%s,%s,%s)\
958 ON DUPLICATE KEY UPDATE \
959 ratio_rec=CONVERT((ratio_rec*%s+%s)/%s,DECIMAL(32,14))",retl)
963 def select_by_key_in_auto_bayes_key(self,key,chtxt):
964 db = self.connect_db()
965 dbexe = db[1].execute("\
966 SELECT keychar,chtxt,ratio_rec,ratio_all \
967 FROM in_auto_bayes_key \
968 WHERE keychar = %s AND chtxt = %s", \
972 dls = db[1].fetchall()
979 def new_auto_timeline_keyword(self):
980 db = self.connect_db()
983 CREATE TABLE auto_timeline_keyword \
985 id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,\
990 UNIQUE uni (chtxt,title,btime,etime)\
994 def add_auto_timeline_keyword(self,chtxt="", title="", btime="", etime=""):
995 db = self.connect_db()
997 INSERT IGNORE into auto_timeline_keyword \
998 (chtxt,title,btime,etime) \
999 values (%s,%s,%s,%s)', \
1000 (chtxt, title, btime, etime))
1003 def delete_old_auto_timeline_keyword(self, dhour):
1004 db = self.connect_db()
1006 DELETE FROM auto_timeline_keyword \
1008 btime < DATE_SUB(now(),INTERVAL " + dhour + " HOUR )")
1010 def new_auto_timeline_bayes(self):
1011 db = self.connect_db()
1014 CREATE TABLE auto_timeline_bayes \
1016 id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,\
1018 title VARCHAR(100),\
1022 UNIQUE uni (chtxt,title,btime,etime)\
1026 def add_auto_timeline_bayes(self,chtxt="", title="", btime="", etime="",point=""):
1027 db = self.connect_db()
1029 INSERT IGNORE into auto_timeline_bayes \
1030 (chtxt,title,btime,etime,point) \
1031 values (%s,%s,%s,%s,%s)', \
1032 (chtxt, title, btime, etime,point))
1034 def delete_old_auto_timeline_bayes(self, dhour):
1035 db = self.connect_db()
1037 DELETE FROM auto_timeline_bayes \
1039 btime < DATE_SUB(now(),INTERVAL " + dhour + " HOUR )")