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 add_auto_proc(self,type,title,chtxt):
302 db = self.connect_db()
304 INSERT IGNORE into auto_proc \
306 values (%s,%s,%s)',(type,title,chtxt))
309 def drop_in_settings(self):
310 db = self.connect_db()
312 db[1].execute('drop table in_settings')
316 def new_in_settings(self):
317 db = self.connect_db()
320 CREATE TABLE in_settings \
324 auto_opt VARCHAR(20),\
325 auto_del_tmp TINYINT\
327 db[1].execute("INSERT IGNORE into in_settings VALUE (0,0,\"G\",1)")
331 def select_all_in_settings(self):
332 db = self.connect_db()
333 dbexe = db[1].execute("\
334 SELECT auto_jbk,auto_bayes,auto_del_tmp,auto_opt \
340 dls = db[1].fetchall()
350 def add_in_timeline_log(self , chtxt="", title="", btime="", etime="", opt="", exp="", longexp="", category=""):
351 db = self.connect_db()
353 INSERT IGNORE into in_timeline_log \
354 (chtxt,title,btime,etime,opt,exp,longexp,category) \
355 values (%s,%s,%s,%s,%s,%s,%s,%s)', \
356 ( chtxt, title, btime, etime, opt,exp,longexp,category))
359 def del_in_timeline_log(self, title="", chtxt="", btime=""):
363 db = self.connect_db()
365 DELETE FROM in_timeline_log \
366 WHERE title = %s AND chtxt = %s AND btime = %s", \
367 (title, chtxt, btime))
370 def new_in_timeline_log(self):
371 db = self.connect_db()
374 CREATE TABLE in_timeline_log \
376 id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,\
384 category VARCHAR(100),\
385 UNIQUE uni (chtxt,title,btime,category)\
390 def select_chtxt_by_title_timeline_log(self,title):
391 db = self.connect_db()
392 dbexe = db[1].execute("\
394 FROM in_timeline_log \
395 WHERE title LIKE \"%"+title+"%\"\
397 ORDER by sum(1) DESC limit 1")
398 retdb=db[1].fetchall()
405 def add_timeline(self, type="", chtxt="", title="", btime="", etime="", deltatime="", deltaday="", opt=""):
406 db = self.connect_db()
408 INSERT IGNORE into timeline \
409 (type,chtxt,title,btime,etime,deltatime,deltaday,opt) \
410 values (%s,%s,%s,%s,%s,%s,%s,%s)', \
411 (type, chtxt, title, btime, etime, deltatime, deltaday, opt))
414 def del_timeline(self, type="", title="", chtxt="", btime=""):
418 db = self.connect_db()
420 DELETE FROM timeline \
421 WHERE type = %s AND title = %s AND chtxt = %s AND btime = %s", \
422 (type, title, chtxt, btime))
425 def select_all_timeline(self):
426 db = self.connect_db()
428 dbr = db[1].execute("\
429 SELECT type, chtxt, title, btime, etime, deltatime ,deltaday ,opt \
431 dbl = db[1].fetchall()
434 for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in dbl:
439 btime = btime.strftime("%Y-%m-%d %H:%M:%S")
440 etime = etime.strftime("%Y-%m-%d %H:%M:%S")
444 ret['deltatime'] = ""
446 if deltatime == None:
451 ret['deltatime'] = deltatime
452 elif typet == 'keyevery':
453 ret['deltatime'] = deltatime
454 ret['deltaday'] = deltaday
458 def select_bytime_timeline(self, dminutes):
459 db = self.connect_db()
461 #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 )")
462 dbr = db[1].execute("SELECT \
463 type, chtxt, title, btime, etime, deltatime ,deltaday ,opt \
465 WHERE btime BETWEEN DATE_SUB(now(),INTERVAL " + dminutes + " MINUTE ) AND \
466 DATE_ADD(now(),INTERVAL " + dminutes + " MINUTE )")
467 dbl = db[1].fetchall()
469 #recdblist.printutf8(dbl)
471 for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in dbl:
476 btime = btime.strftime("%Y-%m-%d %H:%M:%S")
477 etime = etime.strftime("%Y-%m-%d %H:%M:%S")
481 if deltatime == None or deltatime == "":
483 if deltaday == None or deltaday == "":
485 if typet == recdblist.REC_KEYWORD:
486 ret['deltatime'] = deltatime
487 elif typet == recdblist.REC_KEYWORD_EVERY_SOME_DAYS:
488 ret['deltatime'] = deltatime
489 ret['deltaday'] = deltaday
492 def select_by_name_time_timeline(self,title,btime,btime2):
493 db = self.connect_db()
495 #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 )")
496 dbr = db[1].execute("SELECT \
497 type, chtxt, title, btime, etime, deltatime ,deltaday ,opt \
499 WHERE btime > %s AND \
500 btime < %s AND title = %s",(btime,btime2,title))
501 dbl = db[1].fetchall()
503 #recdblist.printutf8(dbl)
505 for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in dbl:
510 btime = btime.strftime("%Y-%m-%d %H:%M:%S")
511 etime = etime.strftime("%Y-%m-%d %H:%M:%S")
515 if deltatime == None or deltatime == "":
517 if deltaday == None or deltaday == "":
519 if typet == recdblist.REC_KEYWORD:
520 ret['deltatime'] = deltatime
521 elif typet == recdblist.REC_KEYWORD_EVERY_SOME_DAYS:
522 ret['deltatime'] = deltatime
523 ret['deltaday'] = deltaday
526 def select_bytime_all_timeline(self,btime,etime):
527 db = self.connect_db()
529 #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 )")
530 dbr = db[1].execute("SELECT \
531 type, chtxt, title, btime, etime, deltatime ,deltaday ,opt \
533 WHERE btime > %s AND \
534 etime < %s",(btime,etime))
535 dbl = db[1].fetchall()
537 #recdblist.printutf8(dbl)
539 for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in dbl:
544 btime = btime.strftime("%Y-%m-%d %H:%M:%S")
545 etime = etime.strftime("%Y-%m-%d %H:%M:%S")
549 if deltatime == None or deltatime == "":
551 if deltaday == None or deltaday == "":
553 if typet == recdblist.REC_KEYWORD:
554 ret['deltatime'] = deltatime
555 elif typet == recdblist.REC_KEYWORD_EVERY_SOME_DAYS:
556 ret['deltatime'] = deltatime
557 ret['deltaday'] = deltaday
560 def count_schedule_timeline(self, btime, etime):
563 return [te num,bs/cs num]
565 db = self.connect_db()
566 dbexe = "SELECT type,epg_ch.bctype,timeline.chtxt,title FROM timeline INNER JOIN epg_ch ON timeline.chtxt=epg_ch.chtxt"
567 dbexe = dbexe + " WHERE ((NOT(( timeline.etime <= %s )OR( timeline.btime >= %s ))) OR ((timeline.btime = %s) AND (timeline.etime = %s) ) )"
570 db[1].execute(dbexe, (btime, etime,btime,etime))
572 for typet, bctypet, chtxtt, titlet in dbl:
573 if (typet == recdblist.REC_RESERVE) or (typet == recdblist.REC_FINAL_RESERVE) or (typet == recdblist.REC_KEYWORD) or (typet == recdblist.REC_KEYWORD_EVERY_SOME_DAYS):
574 if bctypet.find("cs") > -1:
576 elif bctypet.find("bs") > -1:
578 elif bctypet.find("te") > -1:
582 def select_bytime_bychtxt_all_timeline(self,btime,etime,chtxt):
583 db = self.connect_db()
585 #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 )")
586 dbr = db[1].execute("SELECT \
587 type, chtxt, title, btime, etime, deltatime ,deltaday ,opt \
589 WHERE btime > %s AND \
591 AND chtxt=%s ",(btime,etime,chtxt))
592 dbl = db[1].fetchall()
594 #recdblist.printutf8(dbl)
596 for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in dbl:
601 btime = btime.strftime("%Y-%m-%d %H:%M:%S")
602 etime = etime.strftime("%Y-%m-%d %H:%M:%S")
606 if deltatime == None or deltatime == "":
608 if deltaday == None or deltaday == "":
610 if typet == recdblist.REC_KEYWORD:
611 ret['deltatime'] = deltatime
612 elif typet == recdblist.REC_KEYWORD_EVERY_SOME_DAYS:
613 ret['deltatime'] = deltatime
614 ret['deltaday'] = deltaday
617 def delete_old_timeline(self, dhour):
618 db = self.connect_db()
620 DELETE FROM timeline \
622 btime < DATE_SUB(now(),INTERVAL " + dhour + " HOUR )")
625 def new_in_auto_jbk_key(self):
626 db = self.connect_db()
629 CREATE TABLE in_auto_jbk_key \
631 id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,\
632 keyword VARCHAR(200),\
633 UNIQUE unijbk (keyword)\
638 def add_in_auto_jbk_key(self,key):
639 db = self.connect_db()
641 INSERT IGNORE into in_auto_jbk_key \
647 def select_all_in_auto_jbk_key(self):
648 db = self.connect_db()
649 dbexe = db[1].execute("\
651 FROM in_auto_jbk_key \
655 ret = db[1].fetchall()
658 def drop_in_status(self):
659 db = self.connect_db()
661 db[1].execute('drop table in_status')
665 def new_in_status(self):
666 db = self.connect_db()
669 CREATE TABLE in_status \
671 ts2avi TINYINT DEFAULT 0,\
672 terec TINYINT DEFAULT 0,\
673 bscsrec TINYINT DEFAULT 0,\
674 b252ts TINYINT DEFAULT 0,\
675 installed TINYINT DEFAULT 0\
677 db[1].execute("INSERT IGNORE into in_status VALUE (0,0,0,0,0)")
681 def select_all_in_status(self):
682 db = self.connect_db()
683 dbexe = db[1].execute("\
684 SELECT ts2avi,terec,bscsrec,b252ts \
690 dls = db[1].fetchall()
701 def change_ts2avi_in_status(self,i):
706 db = self.connect_db()
708 UPDATE in_status SET ts2avi=ts2avi+%s",i)
710 def change_terec_in_status(self,i):
715 db = self.connect_db()
717 UPDATE in_status SET terec=terec+%s",i)
719 def change_bscsrec_in_status(self,i):
724 db = self.connect_db()
726 UPDATE in_status SET bscsrec=bscsrec+%s",i)
728 def change_b252ts_in_status(self,i):
733 db = self.connect_db()
735 UPDATE in_status SET b252ts=b252ts+%s",i)
737 def select_installed_in_status(self):
738 db = self.connect_db()
739 dbexe = db[1].execute("\
740 SELECT ts2avi,terec,bscsrec,b252ts,installed \
746 dls = db[1].fetchall()
752 def change_installed_in_status(self):
756 db = self.connect_db()
758 UPDATE in_status SET installed=1")
760 def new_epg_timeline(self, bctype):
761 db = self.connect_db()
764 DELETE FROM epg_timeline \
765 WHERE bctype = %s", \
771 CREATE TABLE epg_timeline \
774 channel VARCHAR(100) NOT NULL,\
780 category VARCHAR(100),\
781 UNIQUE unitv(bctype,channel,start,stop,title)\
787 def add_epg_timeline(self, bctype, channel, start, stop, title, desc,longdesc, category):
788 db = self.connect_db()
790 INSERT IGNORE INTO epg_timeline \
791 VALUES (%s,%s,%s,%s,%s,%s,%s,%s)', \
792 (bctype, channel, start, stop, title, desc,longdesc,category))
795 def add_multi_epg_timeline(self, tvlists):
797 tvlists is (bctype,channel,start,stop,title,desc,longdesc,category) lists.
799 db = self.connect_db()
801 INSERT IGNORE INTO epg_timeline \
802 (bctype,channel,start,stop,title,exp,longexp,category) \
803 values(%s,%s,%s,%s,%s,%s,%s,%s)', \
806 def select_by_time_ngram_epg_timeline(self, btime, etime, chtxt):
807 db = self.connect_db()
810 epg_ch.chtxt,title,start,stop,exp,longexp,category \
813 WHERE epg_ch.ontv=epg_timeline.channel \
820 dbcmd = db[1].execute(dbexe, (btime, etime, chtxt))
823 retall = db[1].fetchall()
826 def select_by_time_keyword_auto_suggest_epg_timeline(self,keyword,btime,etime):
827 db = self.connect_db()
830 epg_ch.chtxt,title,start,stop,exp,longexp,category \
833 WHERE epg_ch.ontv=epg_timeline.channel \
840 ( title LIKE \'%%"+keyword+"%%\' ) \
842 ( exp LIKE \'%%"+keyword+"%%\' ) \
844 ( longexp LIKE \'%%"+keyword+"%%\' ) \
846 dbcmd = db[1].execute(dbexe,(btime, etime))
849 retall = db[1].fetchall()
852 def new_in_auto_bayes_key(self):
853 db = self.connect_db()
855 db[1].execute('CREATE TABLE in_auto_bayes_key \
857 keychar VARCHAR(10),\
859 ratio_rec DECIMAL(32,14),\
860 ratio_all DECIMAL(32,14),\
861 UNIQUE unibayeskey(keychar,chtxt)\
863 db[1].execute('CREATE INDEX keycharindex ON in_auto_bayes_key(keychar)')
868 def add_in_auto_bayes_key(self,key,chtxt,ratio_rec,ratio_all):
869 db = self.connect_db()
870 ratio_rec=str(ratio_rec)
871 ratio_all=str(ratio_all)
873 INSERT IGNORE INTO in_auto_bayes_key \
874 (keychar,chtxt,ratio_rec,ratio_all) \
875 values (%s,%s,%s,%s)',\
876 (key,chtxt,ratio_rec,ratio_all))
878 def add_num_in_auto_bayes_key(self,chtxt,add_rec_num,add_all_num):
879 db = self.connect_db()
880 add_rec_num=str(add_rec_num)
881 add_all_num=str(add_all_num)
883 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",\
884 (add_rec_num,add_all_num,chtxt))
886 def change_in_auto_bayes_key(self,key,chtxt,new_ratio_rec,new_ratio_all):
889 db = self.connect_db()
891 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)\
894 def change_ratio_all_reduce_in_auto_bayes_key(self,chtxt,beforenum,newnum):
895 beforenum=str(beforenum)
897 db = self.connect_db()
899 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)\
902 def change_ratio_all_in_auto_bayes_key(self,key,chtxt,beforenum,addnum):
903 db = self.connect_db()
905 beforenum=str(beforenum)
906 db[1].execute("INSERT INTO in_auto_bayes_key (keychar,chtxt,ratio_rec,ratio_all) \
907 VALUES (%s,%s,%s,%s)\
908 ON DUPLICATE KEY UPDATE \
909 ratio_all=CONVERT((ratio_all*%s+%s)/%s,DECIMAL(32,14))",(key,chtxt,"0",str(Decimal(addnum)/beforenumf),beforenum,chtxt,key))
911 def change_multi_ratio_all_in_auto_bayes_key(self,chtxt,beforenum,list):
913 list={key:addnum}のリスト
916 beforenum=str(beforenum)
917 db = self.connect_db()
918 for i,j in list.items():
919 retl=(i,chtxt,"0",str(Decimal(j)/beforenumf),beforenum,str(j),beforenum)
921 db[1].execute("INSERT INTO in_auto_bayes_key (keychar,chtxt,ratio_rec,ratio_all) \
922 VALUES (%s,%s,%s,%s)\
923 ON DUPLICATE KEY UPDATE \
924 ratio_all=CONVERT((ratio_all*%s+%s)/%s,DECIMAL(32,14))",retl)
928 def change_ratio_rec_reduce_in_auto_bayes_key(self,chtxt,beforenum,newnum):
929 beforenum=str(beforenum)
931 db = self.connect_db()
933 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)\
936 def change_ratio_rec_in_auto_bayes_key(self,key,chtxt,beforenum,addnum):
937 db = self.connect_db()
939 beforenum=str(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))",(key,chtxt,str(Decimal(addnum)/beforenumf),"0",beforenum,chtxt,key))
945 def change_multi_ratio_rec_in_auto_bayes_key(self,chtxt,beforenum,list):#self,key,chtxt,beforenum,addnum):
947 beforenum=str(beforenum)
948 db = self.connect_db()
949 for i,j in list.items():
950 retl=(i,chtxt,str(Decimal(j)/beforenumf),"0",beforenum,str(j),beforenum)
951 db[1].execute("INSERT INTO in_auto_bayes_key (keychar,chtxt,ratio_rec,ratio_all) \
952 VALUES (%s,%s,%s,%s)\
953 ON DUPLICATE KEY UPDATE \
954 ratio_rec=CONVERT((ratio_rec*%s+%s)/%s,DECIMAL(32,14))",retl)
956 def select_by_key_in_auto_bayes_key(self,key,chtxt):
957 db = self.connect_db()
958 dbexe = db[1].execute("\
959 SELECT keychar,chtxt,ratio_rec,ratio_all \
960 FROM in_auto_bayes_key \
961 WHERE keychar = %s AND chtxt = %s", \
965 dls = db[1].fetchall()
972 def new_auto_timeline_keyword(self):
973 db = self.connect_db()
976 CREATE TABLE auto_timeline_keyword \
978 id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,\
983 UNIQUE uni (chtxt,title,btime,etime)\
987 def add_auto_timeline_keyword(self,chtxt="", title="", btime="", etime=""):
988 db = self.connect_db()
990 INSERT IGNORE into auto_timeline_keyword \
991 (chtxt,title,btime,etime) \
992 values (%s,%s,%s,%s)', \
993 (chtxt, title, btime, etime))
996 def delete_old_auto_timeline_keyword(self, dhour):
997 db = self.connect_db()
999 DELETE FROM auto_timeline_keyword \
1001 btime < DATE_SUB(now(),INTERVAL " + dhour + " HOUR )")
1003 def new_auto_timeline_bayes(self):
1004 db = self.connect_db()
1007 CREATE TABLE auto_timeline_bayes \
1009 id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,\
1011 title VARCHAR(100),\
1015 UNIQUE uni (chtxt,title,btime,etime)\
1019 def add_auto_timeline_bayes(self,chtxt="", title="", btime="", etime="",point=""):
1020 db = self.connect_db()
1022 INSERT IGNORE into auto_timeline_bayes \
1023 (chtxt,title,btime,etime,point) \
1024 values (%s,%s,%s,%s,%s)', \
1025 (chtxt, title, btime, etime,point))
1027 def delete_old_auto_timeline_bayes(self, dhour):
1028 db = self.connect_db()
1030 DELETE FROM auto_timeline_bayes \
1032 btime < DATE_SUB(now(),INTERVAL " + dhour + " HOUR )")