#!/usr/bin/python
# coding: UTF-8
# Rec10 TS Recording Tools
-# Copyright (C) 2009 Yukikaze
+# Copyright (C) 2009-2010 Yukikaze
import MySQLdb
import recdblist
+import warnings
+import traceback
+
from decimal import Decimal
class DB_MySQL:
dbname = ""
dbpasswd = ""
dbport = 0
def __init__(self, dbname, user, passwd, host="localhost", port=3306):
+ warnings.filterwarnings('ignore', "Data truncated for column")
self.dbname = dbname
self.dbhost = host
self.dbusr = user
cur.execute('CREATE DATABASE ' + dbname + " DEFAULT CHARACTER SET utf8")
cur.close()
con.close()
- except:
- ""
+ except Exception, inst:
+ if not ((type(inst)==MySQLdb.ProgrammingError and inst[0]==1007)or(type(inst)==MySQLdb.OperationError and inst[0]==1050)):
+ recdblist.Commonlogex("Error", "init (dbMySQL.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)
db = self.connect_db()
try:
db[1].execute('\
deltatime VARCHAR(5),\
deltaday VARCHAR(5),\
opt VARCHAR(20),\
+ epgtitle VARCHAR(100),\
+ epgbtime DATETIME,\
+ epgetime DATETIME,\
+ epgduplicate TINYINT DEFAULT 0,\
+ epgchange TINYINT DEFAULT 0,\
+ epgexp VARCHAR(200),\
+ counter TINYINT DEFAULT -1,\
UNIQUE uni (type,chtxt,title,btime,deltaday)\
)')
- except:
- ""
+ except Exception, inst:
+ if not ((type(inst)==MySQLdb.ProgrammingError and inst[0]==1007)or(type(inst)==MySQLdb.OperationError and inst[0]==1050)):
+ recdblist.Commonlogex("Error", "init (dbMySQL.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)
self.close_db(db)
self.new_epg_timeline("")
self.new_in_timeline_log()
self.new_in_auto_bayes_key()
self.new_in_auto_jbk_key()
- self.new_auto_proc()
self.new_in_status()
+ self.new_in_settings()
self.new_auto_timeline_bayes()
self.new_auto_timeline_keyword()
def connect_db(self):
db = self.connect_db()
try:
db[1].execute('drop table epg_ch')
- except:
- ""
+ except Exception, inst:
+ if not ((type(inst)==MySQLdb.ProgrammingError and inst[0]==1007)or(type(inst)==MySQLdb.OperationError and inst[0]==1050)):
+ recdblist.Commonlogex("Error", "new_epg_ch drop (dbMySQL.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)
+
try:
db[1].execute('\
CREATE TABLE epg_ch \
(\
bctype VARCHAR(15),\
- ontv VARCHAR(30) PRIMARY KEY,\
- chtxt VARCHAR(20),\
+ chtxt VARCHAR(20) PRIMARY KEY,\
ch VARCHAR(20),\
csch VARCHAR(20),\
chname VARCHAR(100),\
updatetime DATETIME,\
- status TINYINT\
- show TINYINT\
+ status TINYINT,\
+ isshow TINYINT\
)')
- except:
- ""
+ except Exception, inst:
+ if not ((type(inst)==MySQLdb.ProgrammingError and inst[0]==1007)or(type(inst)==MySQLdb.OperationError and inst[0]==1050)):
+ recdblist.Commonlogex("Error", "new_epg_ch (dbMySQL.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)
+
self.close_db(db)
- def add_epg_ch(self, bctype, ontv, chtxt, ch, csch, updatetime):
+ def add_epg_ch(self, bctype, chtxt, ch, csch, updatetime):
db = self.connect_db()
db[1].execute('\
INSERT INTO epg_ch \
- VALUES (%s,%s,%s,%s,%s,"",%s,%s,%s)', \
- (bctype, ontv, chtxt, ch, csch, updatetime, "1","1"))
- self.close_db(db)
- def select_by_ontv_epg_ch(self, ontv):
- db = self.connect_db()
- dbexe = db[1].execute("\
- SELECT bctype,ontv,chtxt,ch,csch,updatetime \
- FROM epg_ch \
- WHERE ontv = %s", \
- (ontv,))
- ret = []
- dls = []
- if dbexe > 0:
- dls = db[1].fetchall()
+ VALUES (%s,%s,%s,%s,"",%s,%s,%s)', \
+ (bctype, chtxt, ch, csch, updatetime, "1","1"))
self.close_db(db)
- for dl in dls:
- r = list(dl)
- r[5] = r[5].strftime("%Y-%m-%d %H:%M:%S")
- ret.append(r)
- return ret
def select_by_chtxt_epg_ch(self, chtxt):
db = self.connect_db()
dbexe = db[1].execute("\
- SELECT bctype,ontv,chtxt,ch,csch,updatetime \
+ SELECT bctype,chtxt,ch,csch,updatetime \
FROM epg_ch \
WHERE chtxt = %s", \
(chtxt,))
self.close_db(db)
for dl in dls:
r = list(dl)
- r[5] = r[5].strftime("%Y-%m-%d %H:%M:%S")
+ r[4] = r[4].strftime("%Y-%m-%d %H:%M:%S")
ret.append(r)
return ret
def select_by_bctype_epg_ch(self, bctype):
db = self.connect_db()
dbexe = db[1].execute("\
- SELECT bctype,ontv,chtxt,ch,csch,updatetime,status \
+ SELECT bctype,chtxt,ch,csch,updatetime,status \
FROM epg_ch \
WHERE bctype = %s", \
(bctype,))
for dl in dls:
#recdblist.printutf8(dl)
r = list(dl)
- r[5] = r[5].strftime("%Y-%m-%d %H:%M:%S")
- r[6] = str(r[6])
+ r[4] = r[4].strftime("%Y-%m-%d %H:%M:%S")
+ r[5] = str(r[5])
ret.append(r)
return ret
def select_by_ch_epg_ch(self, ch):
db = self.connect_db()
dbexe = db[1].execute("\
SELECT \
- bctype,ontv,chtxt,ch,csch,updatetime \
+ bctype,chtxt,ch,csch,updatetime \
FROM epg_ch \
WHERE ch = %s", \
(ch,))
self.close_db(db)
for dl in dls:
r = list(dl)
- r[5] = r[5].strftime("%Y-%m-%d %H:%M:%S")
+ r[4] = r[4].strftime("%Y-%m-%d %H:%M:%S")
ret.append(r)
return ret
def select_all_epg_ch(self):
db = self.connect_db()
dbexe = db[1].execute("\
- SELECT bctype,ontv,chtxt,ch,csch,updatetime \
+ SELECT bctype,chtxt,ch,csch,updatetime \
FROM epg_ch \
")
ret = []
self.close_db(db)
for dl in dls:
r = list(dl)
- r[5] = r[5].strftime("%Y-%m-%d %H:%M:%S")
+ r[4] = r[4].strftime("%Y-%m-%d %H:%M:%S")
ret.append(r)
return ret
def set_new_status(self,dhour):
def select_get_update_epg_ch(self, dhour):
db = self.connect_db()
dbexe = db[1].execute("SELECT bctype,chtxt,status FROM epg_ch \
- WHERE \
+ WHERE (\
( \
updatetime < DATE_SUB(now(),INTERVAL " + dhour + " HOUR) \
AND \
status = 1 \
) \
OR \
- status > 1 \
+ status > 1 )\
ORDER BY status DESC")
ret = []
#recdblist.printutf8(dbexe)
db[1].execute("\
UPDATE epg_ch \
SET \
- status=%s \
+ status=%s , \
+ updatetime=now() \
WHERE bctype = %s", \
(status, bctype)\
)
self.close_db(db)
- def update_chname_by_ontv_epg_ch(self,ontv,chname):
+ def update_chname_by_chtxt_epg_ch(self,chtxt,chname):
db = self.connect_db()
db[1].execute("\
UPDATE epg_ch \
SET \
chname=%s \
- WHERE ontv = %s", \
- (chname, ontv)\
+ WHERE chtxt = %s", \
+ (chname, chtxt)\
)
self.close_db(db)
- def add_auto_proc(self,type,title,chtxt):
+ def add_auto_proc_tmp(self,type,title,chtxt):
db = self.connect_db()
db[1].execute('\
- INSERT IGNORE into auto_proc \
+ INSERT IGNORE into auto_proc_tmp \
(type,title,chtxt) \
values (%s,%s,%s)',(type,title,chtxt))
##db.commit()
self.close_db(db)
+ def new_auto_proc_tmp(self):
+ db = self.connect_db()
+ try:
+ db[1].execute('drop table auto_proc_tmp')
+ except Exception, inst:
+ if not ((type(inst)==MySQLdb.ProgrammingError and inst[0]==1007)or(type(inst)==MySQLdb.OperationError and inst[0]==1050)):
+ recdblist.Commonlogex("Error", "new_auto_proc_tmp drop (dbMySQL.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)
+
+ try:
+ db[1].execute('\
+ CREATE TABLE auto_proc_tmp \
+ (\
+ type VARCHAR(20),\
+ title VARCHAR(100) PRIMARY KEY,\
+ chtxt VARCHAR(30),\
+ UNIQUE unibayeskey(title)\
+ )')
+ except Exception, inst:
+ if not ((type(inst)==MySQLdb.ProgrammingError and inst[0]==1007)or(type(inst)==MySQLdb.OperationError and inst[0]==1050)):
+ recdblist.Commonlogex("Error", "new_auto_proc_tmp (dbMySQL.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)
+
+ self.close_db(db)
+ def update_auto_proc(self):
+ db = self.connect_db()
+ try:
+ db[1].execute('INSERT INTO auto_proc SELECT * FROM auto_proc_tmp')
+ except Exception, inst:
+ if not ((type(inst)==MySQLdb.ProgrammingError and inst[0]==1007)or(type(inst)==MySQLdb.OperationError and inst[0]==1050)):
+ recdblist.Commonlogex("Error", "update_auto_proc (dbMySQL.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)
+
+ self.close_db(db)
def new_auto_proc(self):
db = self.connect_db()
try:
db[1].execute('drop table auto_proc')
- except:
- ""
+ except Exception, inst:
+ if not ((type(inst)==MySQLdb.ProgrammingError and inst[0]==1007)or(type(inst)==MySQLdb.OperationError and inst[0]==1050)):
+ recdblist.Commonlogex("Error", "new_auto_proc drop (dbMySQL.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)
+
try:
db[1].execute('\
CREATE TABLE auto_proc \
chtxt VARCHAR(30),\
UNIQUE unibayeskey(title)\
)')
- except:
- ""
+ except Exception, inst:
+ if not ((type(inst)==MySQLdb.ProgrammingError and inst[0]==1007)or(type(inst)==MySQLdb.OperationError and inst[0]==1050)):
+ recdblist.Commonlogex("Error", "new_auto_proc (dbMySQL.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)
+
+ self.close_db(db)
+ def add_auto_proc(self,type,title,chtxt):
+ db = self.connect_db()
+ db[1].execute('\
+ INSERT IGNORE into auto_proc \
+ (type,title,chtxt) \
+ values (%s,%s,%s)',(type,title,chtxt))
+ ##db.commit()
+ self.close_db(db)
+ def drop_in_settings(self):
+ db = self.connect_db()
+ try:
+ db[1].execute('drop table in_settings')
+ except Exception, inst:
+ if not ((type(inst)==MySQLdb.ProgrammingError and inst[0]==1007)or(type(inst)==MySQLdb.OperationError and inst[0]==1050)):
+ recdblist.Commonlogex("Error", "drop_in_settings (dbMySQL.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)
+ self.close_db(db)
+ def new_in_settings(self):
+ db = self.connect_db()
+ try:
+ db[1].execute('\
+ CREATE TABLE in_settings \
+ (\
+ auto_jbk TINYINT,\
+ auto_bayes TINYINT,\
+ auto_opt VARCHAR(20),\
+ auto_del_tmp TINYINT\
+ )')
+ db[1].execute("INSERT IGNORE into in_settings VALUE (0,0,\"H\",1)")
+ except Exception, inst:
+ if not ((type(inst)==MySQLdb.ProgrammingError and inst[0]==1007)or(type(inst)==MySQLdb.OperationError and inst[0]==1050)):
+ recdblist.Commonlogex("Error", "new_in_settings (dbMySQL.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)
+
+ self.close_db(db)
+ def select_all_in_settings(self):
+ db = self.connect_db()
+ dbexe = db[1].execute("\
+ SELECT auto_jbk,auto_bayes,auto_del_tmp,auto_opt \
+ FROM in_settings \
+ ")
+ ret = []
+ dls = []
+ if dbexe > 0:
+ dls = db[1].fetchall()
self.close_db(db)
+ for dl in dls:
+ r = list(dl)
+ r[0]=str(r[0])
+ r[1]=str(r[1])
+ r[2]=str(r[2])
+ r[3]=r[3]
+ ret.append(r)
+ return ret
def add_in_timeline_log(self , chtxt="", title="", btime="", etime="", opt="", exp="", longexp="", category=""):
db = self.connect_db()
db[1].execute('\
category VARCHAR(100),\
UNIQUE uni (chtxt,title,btime,category)\
)')
- except:
- ""
+ except Exception, inst:
+ if not ((type(inst)==MySQLdb.ProgrammingError and inst[0]==1007)or(type(inst)==MySQLdb.OperationError and inst[0]==1050)):
+ recdblist.Commonlogex("Error", "new_in_timeline_log (dbMySQL.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)
+
self.close_db(db)
def select_chtxt_by_title_timeline_log(self,title):
db = self.connect_db()
ret=retdb[0][0]
self.close_db(db)
return ret
- def add_timeline(self, type="", chtxt="", title="", btime="", etime="", deltatime="", deltaday="", opt=""):
+ def add_timeline(self, type="", chtxt="", title="", btime="", etime="", deltatime="", deltaday="", opt="" ,counter=-1):
db = self.connect_db()
db[1].execute('\
INSERT IGNORE into timeline \
- (type,chtxt,title,btime,etime,deltatime,deltaday,opt) \
- values (%s,%s,%s,%s,%s,%s,%s,%s)', \
- (type, chtxt, title, btime, etime, deltatime, deltaday, opt))
+ (type,chtxt,title,btime,etime,deltatime,deltaday,opt,counter) \
+ values (%s,%s,%s,%s,%s,%s,%s,%s,%s)', \
+ (type, chtxt, title, btime, etime, deltatime, deltaday, opt ,counter))
+ ##db.commit()
+ self.close_db(db)
+ def update_epg_timeline(self,type,chtxt,title,btime,epgbtime,epgetime,epgtitle,epgexp):
+ db = self.connect_db()
+ db[1].execute('\
+ UPDATE timeline \
+ SET epgbtime=%s,epgetime=%s,epgtitle=%s,epgexp=%s \
+ WHERE type=%s AND chtxt=%s AND title=%s AND btime=%s ', \
+ (epgbtime,epgetime,epgtitle,epgexp,type, chtxt, title, btime))
+ ##db.commit()
+ self.close_db(db)
+ def update_status_change_timeline(self,type,chtxt,title,btime,epgchange):
+ db = self.connect_db()
+ db[1].execute('\
+ UPDATE timeline \
+ SET epgchange =%s \
+ WHERE type=%s AND chtxt=%s AND title=%s AND btime=%s ', \
+ (epgchange , type, chtxt, title, btime))
+ ##db.commit()
+ self.close_db(db)
+ def update_status_dup_timeline(self,type,chtxt,title,btime,epgduplicate):
+ db = self.connect_db()
+ db[1].execute('\
+ UPDATE timeline \
+ SET epgduplicate =%s \
+ WHERE type=%s AND chtxt=%s AND title=%s AND btime=%s ', \
+ (epgduplicate , type, chtxt, title, btime))
##db.commit()
self.close_db(db)
def del_timeline(self, type="", title="", chtxt="", btime=""):
db = self.connect_db()
recdata = []
dbr = db[1].execute("\
- SELECT type, chtxt, title, btime, etime, deltatime ,deltaday ,opt \
+ SELECT type, chtxt, title, btime, etime, deltatime ,deltaday ,opt ,epgbtime ,epgetime ,epgtitle ,epgduplicate ,epgchange ,counter\
FROM timeline")
dbl = db[1].fetchall()
self.close_db(db)
if dbr > 0:
- for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in dbl:
- ret = {}
- ret['type'] = typet
- ret['chtxt'] = chtxt
- ret['title'] = title
- btime = btime.strftime("%Y-%m-%d %H:%M:%S")
- etime = etime.strftime("%Y-%m-%d %H:%M:%S")
- ret['btime'] = btime
- ret['etime'] = etime
- ret['opt'] = opt
- ret['deltatime'] = ""
- ret['deltaday'] = ""
- if deltatime == None:
- deltatime = "3"
- if deltaday == None:
- deltaday = "7"
- if typet == 'key':
- ret['deltatime'] = deltatime
- elif typet == 'keyevery':
- ret['deltatime'] = deltatime
- ret['deltaday'] = deltaday
- recdata.append(ret)
- self.close_db(db)
+ recdata = self.getdic_timeline(dbl)
return recdata
def select_bytime_timeline(self, dminutes):
db = self.connect_db()
recdatum = []
#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 )")
dbr = db[1].execute("SELECT \
- type, chtxt, title, btime, etime, deltatime ,deltaday ,opt \
+ type, chtxt, title, btime, etime, deltatime ,deltaday ,opt ,epgbtime ,epgetime ,epgtitle ,epgduplicate ,epgchange ,counter\
FROM timeline \
WHERE btime BETWEEN DATE_SUB(now(),INTERVAL " + dminutes + " MINUTE ) AND \
DATE_ADD(now(),INTERVAL " + dminutes + " MINUTE )")
self.close_db(db)
#recdblist.printutf8(dbl)
if dbr > 0:
- for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in dbl:
- ret = {}
- ret['type'] = typet
- ret['chtxt'] = chtxt
- ret['title'] = title
- btime = btime.strftime("%Y-%m-%d %H:%M:%S")
- etime = etime.strftime("%Y-%m-%d %H:%M:%S")
- ret['btime'] = btime
- ret['etime'] = etime
- ret['opt'] = opt
- if deltatime == None or deltatime == "":
- deltatime = "3"
- if deltaday == None or deltaday == "":
- deltaday = "7"
- if typet == recdblist.REC_KEYWORD:
- ret['deltatime'] = deltatime
- elif typet == recdblist.REC_KEYWORD_EVERY_SOME_DAYS:
- ret['deltatime'] = deltatime
- ret['deltaday'] = deltaday
- recdatum.append(ret)
+ recdatum = self.getdic_timeline(dbl)
+ return recdatum
+ def select_by_name_time_timeline(self,title,btime,btime2):
+ db = self.connect_db()
+ recdatum = []
+ #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 )")
+ dbr = db[1].execute("SELECT \
+ type, chtxt, title, btime, etime, deltatime ,deltaday ,opt ,epgbtime ,epgetime ,epgtitle ,epgduplicate ,epgchange ,counter\
+ FROM timeline \
+ WHERE btime > %s AND \
+ btime < %s AND title = %s",(btime,btime2,title))
+ dbl = db[1].fetchall()
+ self.close_db(db)
+ #recdblist.printutf8(dbl)
+ if dbr > 0:
+ recdatum = self.getdic_timeline(dbl)
+ return recdatum
+ def select_bytime_all_timeline(self,btime,etime):
+ db = self.connect_db()
+ recdatum = []
+ #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 )")
+ dbr = db[1].execute("SELECT \
+ type, chtxt, title, btime, etime, deltatime ,deltaday ,opt ,epgbtime ,epgetime ,epgtitle ,epgduplicate ,epgchange ,counter\
+ FROM timeline \
+ WHERE btime > %s AND \
+ etime < %s",(btime,etime))
+ dbl = db[1].fetchall()
+ self.close_db(db)
+ #recdblist.printutf8(dbl)
+ if dbr > 0:
+ recdatum = self.getdic_timeline(dbl)
+ return recdatum
+ def select_byepgtime_all_timeline(self,epgbtime,epgetime):
+ db = self.connect_db()
+ recdatum = []
+ #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 )")
+ dbr = db[1].execute("SELECT \
+ type, chtxt, title, btime, etime, deltatime ,deltaday ,opt ,epgbtime ,epgetime ,epgtitle ,epgduplicate ,epgchange ,counter\
+ FROM timeline \
+ WHERE epgbtime >= %s AND \
+ epgetime <= %s",(epgbtime,epgetime))
+ dbl = db[1].fetchall()
+ self.close_db(db)
+ #recdblist.printutf8(dbl)
+ if dbr > 0:
+ recdatum=self.getdic_timeline(dbl)
+ return recdatum
+ def select_byepgtime_over_timeline(self,epgbtime,epgetime):
+ db = self.connect_db()
+ recdatum = []
+ #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 )")
+ dbr = db[1].execute("SELECT \
+ type, chtxt, title, btime, etime, deltatime ,deltaday ,opt ,epgbtime ,epgetime ,epgtitle ,epgduplicate ,epgchange ,counter\
+ FROM timeline \
+ WHERE (NOT(( timeline.epgetime <= %s )OR( timeline.epgbtime >= %s )))"\
+ ,(epgbtime,epgetime))
+ dbl = db[1].fetchall()
+ self.close_db(db)
+ #recdblist.printutf8(dbl)
+ if dbr > 0:
+ recdatum=self.getdic_timeline(dbl)
+ return recdatum
+ def count_schedule_timeline(self, btime, etime):
+ """
+ count rectasknum
+ return [te num,bs/cs num]
+ """
+ db = self.connect_db()
+ dbexe = "SELECT type,epg_ch.bctype,timeline.chtxt,title FROM timeline INNER JOIN epg_ch ON timeline.chtxt=epg_ch.chtxt"
+ dbexe = dbexe + " WHERE ((NOT(( timeline.etime <= %s )OR( timeline.btime >= %s ))) OR ((timeline.btime = %s) AND (timeline.etime = %s) ) )"
+ Srec = 0
+ Trec = 0
+ db[1].execute(dbexe, (btime, etime,btime,etime))
+ dbl=db[1].fetchall()
+ for typet, bctypet, chtxtt, titlet in dbl:
+ if (typet == recdblist.REC_RESERVE) or (typet == recdblist.REC_FINAL_RESERVE) or (typet == recdblist.REC_KEYWORD) or (typet == recdblist.REC_KEYWORD_EVERY_SOME_DAYS):
+ if bctypet.find("cs") > -1:
+ Srec = Srec + 1
+ elif bctypet.find("bs") > -1:
+ Srec = Srec + 1
+ elif bctypet.find("te") > -1:
+ Trec = Trec + 1
+ self.close_db(db)
+ return [Trec, Srec]
+ def search_schedule_timeline(self,btime,etime):
+ """
+ count rectasknum
+ return [(type,bctype,chtxt,title,btime,etime)]
+ """
+ db = self.connect_db()
+ dbexe = "SELECT type,epg_ch.bctype,timeline.chtxt,title,timeline.btime,timeline.etime FROM timeline INNER JOIN epg_ch ON timeline.chtxt=epg_ch.chtxt"
+ dbexe = dbexe + " WHERE ((NOT(( timeline.etime <= %s )OR( timeline.btime >= %s ))) OR ((timeline.btime = %s) AND (timeline.etime = %s) ) )"
+ ret=[]
+ db[1].execute(dbexe, (btime, etime,btime,etime))
+ dbl=db[1].fetchall()
+ for typet, bctypet, chtxtt, titlet , btimet, etimet in dbl:
+ if (typet == recdblist.REC_RESERVE) or (typet == recdblist.REC_FINAL_RESERVE) or (typet == recdblist.REC_KEYWORD) or (typet == recdblist.REC_KEYWORD_EVERY_SOME_DAYS):
+ ret.append([typet,bctypet,chtxtt,titlet,btimet,etimet])
+ self.close_db(db)
+ return ret
+ def count_epgschedule_timeline(self, epgbtime, epgetime):
+ """
+ count rectasknum
+ return [te num,bs/cs num]
+ """
+ db = self.connect_db()
+ dbexe = "SELECT type,epg_ch.bctype,timeline.chtxt,title FROM timeline INNER JOIN epg_ch ON timeline.chtxt=epg_ch.chtxt"
+ dbexe = dbexe + " WHERE (NOT(( timeline.epgetime <= %s )OR( timeline.epgbtime >= %s )))"
+ Srec = 0
+ Trec = 0
+ db[1].execute(dbexe, (epgbtime, epgetime))
+ dbl=db[1].fetchall()
+ for typet, bctypet, chtxtt, titlet in dbl:
+ if (typet == recdblist.REC_RESERVE) or (typet == recdblist.REC_FINAL_RESERVE) or (typet == recdblist.REC_KEYWORD) or (typet == recdblist.REC_KEYWORD_EVERY_SOME_DAYS):
+ if bctypet.find("cs") > -1:
+ Srec = Srec + 1
+ elif bctypet.find("bs") > -1:
+ Srec = Srec + 1
+ elif bctypet.find("te") > -1:
+ Trec = Trec + 1
+ self.close_db(db)
+ return [Trec, Srec]
+ def search_epgschedule_timeline(self,epgbtime,epgetime):
+ """
+ count rectasknum
+ return [(type,bctype,chtxt,title,btime,etime)]
+ """
+ db = self.connect_db()
+ dbexe = "SELECT type,epg_ch.bctype,timeline.chtxt,title,timeline.btime,timeline.etime FROM timeline INNER JOIN epg_ch ON timeline.chtxt=epg_ch.chtxt"
+ dbexe = dbexe + " WHERE ((NOT(( timeline.epgetime <= %s )OR( timeline.epgbtime >= %s ))) OR ((timeline.epgbtime = %s) AND (timeline.epgetime = %s) ) )"
+ ret=[]
+ db[1].execute(dbexe, (epgbtime, epgetime,epgbtime,epgetime))
+ dbl=db[1].fetchall()
+ for typet, bctypet, chtxtt, titlet , btimet, etimet in dbl:
+ if (typet == recdblist.REC_RESERVE) or (typet == recdblist.REC_FINAL_RESERVE) or (typet == recdblist.REC_KEYWORD) or (typet == recdblist.REC_KEYWORD_EVERY_SOME_DAYS):
+ ret.append([typet,bctypet,chtxtt,titlet,btimet,etimet])
+ self.close_db(db)
+ return ret
+ def select_bytime_bychtxt_all_timeline(self,btime,etime,chtxt):
+ db = self.connect_db()
+ recdatum = []
+ #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 )")
+ dbr = db[1].execute("SELECT \
+ type, chtxt, title, btime, etime, deltatime ,deltaday ,opt ,epgbtime ,epgetime ,epgtitle ,epgduplicate ,epgchange ,counter\
+ FROM timeline \
+ WHERE btime > %s AND \
+ etime < %s\
+ AND chtxt=%s ",(btime,etime,chtxt))
+ dbl = db[1].fetchall()
+ self.close_db(db)
+ #recdblist.printutf8(dbl)
+ if dbr > 0:
+ recdatum = self.getdic_timeline(dbl)
+ return recdatum
+ def getdic_timeline(self,timelinelists):
+ recdatum=[]
+ for typet, chtxt, title, btime, etime, deltatime, deltaday, opt ,epgbtimet , epgetimet ,epgtitlet ,epgduplicatet ,epgchanget ,countert in timelinelists:
+ ret = {}
+ ret['type'] = typet
+ ret['chtxt'] = chtxt
+ ret['title'] = title
+ btime = btime.strftime("%Y-%m-%d %H:%M:%S")
+ etime = etime.strftime("%Y-%m-%d %H:%M:%S")
+ ret['btime'] = btime
+ ret['etime'] = etime
+ ret['opt'] = opt
+ try:
+ ret['epgbtime'] = epgbtimet.strftime("%Y-%m-%d %H:%M:%S")
+ ret['epgetime'] = epgetimet.strftime("%Y-%m-%d %H:%M:%S")
+ except:
+ ret['epgbtime'] = "2010-01-01 00:00:00"
+ ret['epgetime'] = "2010-01-01 00:00:00"
+ ret['epgtitle'] = epgtitlet
+ ret['epgduplicate'] = epgduplicatet
+ ret['epgchange'] = epgchanget
+ if deltatime == None or deltatime == "":
+ deltatime = "3"
+ if deltaday == None or deltaday == "":
+ deltaday = "7"
+ if typet == recdblist.REC_KEYWORD:
+ ret['deltatime'] = deltatime
+ elif typet == recdblist.REC_KEYWORD_EVERY_SOME_DAYS:
+ ret['deltatime'] = deltatime
+ ret['deltaday'] = deltaday
+ try:
+ ret['counter'] = int(countert)
+ except:
+ ret['counter']=-1
+ recdatum.append(ret)
return recdatum
def delete_old_timeline(self, dhour):
db = self.connect_db()
(\
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,\
keyword VARCHAR(200),\
+ auto TINYINT DEFAULT 0,\
+ opt VARCHAR(20),\
UNIQUE unijbk (keyword)\
)")
- except:
- ""
+ except Exception, inst:
+ if not ((type(inst)==MySQLdb.ProgrammingError and inst[0]==1007)or(type(inst)==MySQLdb.OperationError and inst[0]==1050)):
+ recdblist.Commonlogex("Error", "new_in_auto_jbk_key (dbMySQL.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)
self.close_db(db)
def add_in_auto_jbk_key(self,key):
db = self.connect_db()
def select_all_in_auto_jbk_key(self):
db = self.connect_db()
dbexe = db[1].execute("\
- SELECT keyword \
+ SELECT keyword,auto,opt \
FROM in_auto_jbk_key \
")
ret = []
ret = db[1].fetchall()
self.close_db(db)
return ret
+ def drop_in_status(self):
+ db = self.connect_db()
+ try:
+ db[1].execute('drop table in_status')
+ except Exception, inst:
+ if not ((type(inst)==MySQLdb.ProgrammingError and inst[0]==1007)or(type(inst)==MySQLdb.OperationError and inst[0]==1050)):
+ recdblist.Commonlogex("Error", "drop_in_status (dbMySQL.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)
+ self.close_db(db)
def new_in_status(self):
db = self.connect_db()
try:
ts2avi TINYINT DEFAULT 0,\
terec TINYINT DEFAULT 0,\
bscsrec TINYINT DEFAULT 0,\
- b252ts TINYINT DEFAULT 0\
- installed TINYINT DEFAULT 0\
+ b252ts TINYINT DEFAULT 0,\
+ installed TINYINT DEFAULT 0,\
+ version TINYINT\
)")
- db[1].execute("INSERT IGNORE into in_status VALUE (0,0,0,0,0)")
- except:
- ""
+ db[1].execute("INSERT IGNORE into in_status VALUE (0,0,0,0,0,0)")
+ except Exception, inst:
+ if not ((type(inst)==MySQLdb.ProgrammingError and inst[0]==1007)or(type(inst)==MySQLdb.OperationError and inst[0]==1050)):
+ recdblist.Commonlogex("Error", "new_in_status (dbMySQL.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)
self.close_db(db)
def select_all_in_status(self):
db = self.connect_db()
r[3]=str(r[3])
ret.append(r)
return ret
-
+ def select_version_in_status(self):
+ db = self.connect_db()
+ version=0
+ try:
+ dbexe = db[1].execute("\
+ SELECT version \
+ FROM in_status \
+ ")
+ if dbexe > 0:
+ dls = db[1].fetchall()
+ self.close_db(db)
+ for dl in dls:
+ r = list(dl)
+ version=int(str(r[0]))
+ except Exception, inst:
+ if not ((type(inst)==MySQLdb.ProgrammingError and inst[0]==1007)or(type(inst)==MySQLdb.OperationError and inst[0]==1050)):
+ recdblist.Commonlogex("Error", "select_version_in_status (dbMySQL.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)
+ return version
+ def change_version_in_status(self,version):
+ db = self.connect_db()
+ db[1].execute("\
+ UPDATE in_status SET version=%s",str(version))
+ self.close_db(db)
def change_ts2avi_in_status(self,i):
"""
statuをiだけ増減する
db[1].execute("\
UPDATE in_status SET installed=1")
self.close_db(db)
+ def change_chscaned_in_status(self):
+ """
+ installedを設定する
+ """
+ db = self.connect_db()
+ db[1].execute("\
+ UPDATE in_status SET installed=2")
+ self.close_db(db)
def new_epg_timeline(self, bctype):
db = self.connect_db()
try:
DELETE FROM epg_timeline \
WHERE bctype = %s", \
(bctype,))
- except:
- ""
+ except Exception, inst:
+ if not ((type(inst)==MySQLdb.ProgrammingError and inst[0]==1007)or(type(inst)==MySQLdb.OperationError and inst[0]==1050)):
+ recdblist.Commonlogex("Error", "new_epg_timeline delete (dbMySQL.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)
try:
db[1].execute("\
CREATE TABLE epg_timeline \
category VARCHAR(100),\
UNIQUE unitv(bctype,channel,start,stop,title)\
)")
- except:
- ""
+ except Exception, inst:
+ if not ((type(inst)==MySQLdb.ProgrammingError and inst[0]==1007)or(type(inst)==MySQLdb.OperationError and inst[0]==1050)):
+ recdblist.Commonlogex("Error", "new_epg_timeline (dbMySQL.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)
#db.commit()
self.close_db(db)
def add_epg_timeline(self, bctype, channel, start, stop, title, desc,longdesc, category):
epg_ch.chtxt,title,start,stop,exp,longexp,category \
FROM epg_timeline \
INNER JOIN epg_ch \
- WHERE epg_ch.ontv=epg_timeline.channel \
+ WHERE epg_ch.chtxt=epg_timeline.channel \
AND \
start >= %s \
AND \
retall = db[1].fetchall()
self.close_db(db)
return retall
- def select_by_time_auto_suggest_epg_timeline(self,keyword,btime,etime):
+ def select_by_time_keyword_auto_suggest_epg_timeline(self,keyword,btime,etime):
db = self.connect_db()
dbexe = "\
SELECT \
epg_ch.chtxt,title,start,stop,exp,longexp,category \
FROM epg_timeline \
INNER JOIN epg_ch \
- WHERE epg_ch.ontv=epg_timeline.channel \
+ WHERE epg_ch.chtxt=epg_timeline.channel \
AND \
start >= %s \
AND \
- start <= %s \
+ stop <= %s \
AND \
( \
( title LIKE \'%%"+keyword+"%%\' ) \
UNIQUE unibayeskey(keychar,chtxt)\
)')
db[1].execute('CREATE INDEX keycharindex ON in_auto_bayes_key(keychar)')
- except:
- ""
+ except Exception, inst:
+ if not ((type(inst)==MySQLdb.ProgrammingError and inst[0]==1007)or(type(inst)==MySQLdb.OperationError and inst[0]==1050)):
+ recdblist.Commonlogex("Error", "new_in_auto_bayes_key (dbMySQL.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)
self.close_db(db)
def add_in_auto_bayes_key(self,key,chtxt,ratio_rec,ratio_all):
db = self.connect_db()
for i,j in list.items():
retl=(i,chtxt,"0",str(Decimal(j)/beforenumf),beforenum,str(j),beforenum)
- db[1].execute("INSERT INTO in_auto_bayes_key (keychar,chtxt,ratio_rec,ratio_all) \
- VALUES (%s,%s,%s,%s)\
- ON DUPLICATE KEY UPDATE \
- ratio_all=CONVERT((ratio_all*%s+%s)/%s,DECIMAL(32,14))",retl)
+ try:
+ db[1].execute("INSERT INTO in_auto_bayes_key (keychar,chtxt,ratio_rec,ratio_all) \
+ VALUES (%s,%s,%s,%s)\
+ ON DUPLICATE KEY UPDATE \
+ ratio_all=CONVERT((ratio_all*%s+%s)/%s,DECIMAL(32,14))",retl)
+ except Exception, inst:
+ if not ((type(inst)==MySQLdb.ProgrammingError and inst[0]==1007)or(type(inst)==MySQLdb.OperationError and inst[0]==1050)):
+ recdblist.Commonlogex("Error", "change_multi_ratio_all_in_auto_bayes_key (dbMySQL.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)
self.close_db(db)
def change_ratio_rec_reduce_in_auto_bayes_key(self,chtxt,beforenum,newnum):
beforenum=str(beforenum)
db = self.connect_db()
for i,j in list.items():
retl=(i,chtxt,str(Decimal(j)/beforenumf),"0",beforenum,str(j),beforenum)
- db[1].execute("INSERT INTO in_auto_bayes_key (keychar,chtxt,ratio_rec,ratio_all) \
- VALUES (%s,%s,%s,%s)\
- ON DUPLICATE KEY UPDATE \
- ratio_rec=CONVERT((ratio_rec*%s+%s)/%s,DECIMAL(32,14))",retl)
+ try:
+ db[1].execute("INSERT INTO in_auto_bayes_key (keychar,chtxt,ratio_rec,ratio_all) \
+ VALUES (%s,%s,%s,%s)\
+ ON DUPLICATE KEY UPDATE \
+ ratio_rec=CONVERT((ratio_rec*%s+%s)/%s,DECIMAL(32,14))",retl)
+ except Exception, inst:
+ if not ((type(inst)==MySQLdb.ProgrammingError and inst[0]==1007)or(type(inst)==MySQLdb.OperationError and inst[0]==1050)):
+ recdblist.Commonlogex("Error", "change_multi_ratio_rec_in_auto_bayes_key (dbMySQL.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)
self.close_db(db)
def select_by_key_in_auto_bayes_key(self,key,chtxt):
db = self.connect_db()
return dls[0]
else:
return dls
-
def new_auto_timeline_keyword(self):
db = self.connect_db()
try:
etime DATETIME,\
UNIQUE uni (chtxt,title,btime,etime)\
)')
- except:
- ""
+ except Exception, inst:
+ if not ((type(inst)==MySQLdb.ProgrammingError and inst[0]==1007)or(type(inst)==MySQLdb.OperationError and inst[0]==1050)):
+ recdblist.Commonlogex("Error", "new_auto_timeline_keyword (dbMySQL.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)
def add_auto_timeline_keyword(self,chtxt="", title="", btime="", etime=""):
db = self.connect_db()
db[1].execute('\
point INT,\
UNIQUE uni (chtxt,title,btime,etime)\
)')
- except:
- ""
+ except Exception, inst:
+ if not ((type(inst)==MySQLdb.ProgrammingError and inst[0]==1007)or(type(inst)==MySQLdb.OperationError and inst[0]==1050)):
+ recdblist.Commonlogex("Error", "new_auto_timeline_bayes (dbMySQL.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)
def add_auto_timeline_bayes(self,chtxt="", title="", btime="", etime="",point=""):
db = self.connect_db()
db[1].execute('\
WHERE \
btime < DATE_SUB(now(),INTERVAL " + dhour + " HOUR )")
self.close_db(db)
+ def update_db_to93(self):
+ db = self.connect_db()
+ self.drop_in_settings()
+ self.new_in_settings()
+ db[1].execute("\
+ ALTER TABLE timeline ADD epgtitle VARCHAR(100),\
+ ADD epgbtime DATETIME,\
+ ADD epgetime DATETIME,\
+ ADD epgduplicate TINYINT DEFAULT 0,\
+ ADD epgchange TINYINT DEFAULT 0")
+ db[1].execute("\
+ ALTER TABLE in_status ADD version TINYINT")
+ self.close_db(db)
+ self.change_version_in_status("93")
+ def update_db_93to94(self):
+ db = self.connect_db()
+ self.drop_in_settings()
+ self.new_in_settings()
+ db[1].execute("\
+ ALTER TABLE timeline ADD counter TINYINT DEFAULT -1")
+ self.close_db(db)
+ self.change_version_in_status("94")
+ def update_db_94to95(self):
+ db = self.connect_db()
+ self.drop_in_settings()
+ self.new_in_settings()
+ db[1].execute("\
+ ALTER TABLE timeline ADD epgexp VARCHAR(200)")
+ self.close_db(db)
+ self.change_version_in_status("95")
+ def update_db_95to96(self):
+ db = self.connect_db()
+ self.drop_in_settings()
+ self.new_in_settings()
+ self.close_db(db)
+ self.change_version_in_status("96")
+ def update_db_96to98(self):
+ db = self.connect_db()
+ self.drop_in_settings()
+ self.new_in_settings()
+ self.close_db(db)
+ self.change_version_in_status("98")
+ def update_db_98to99(self):
+ db = self.connect_db()
+ self.drop_in_settings()
+ self.new_in_settings()
+ db[1].execute("\
+ ALTER TABLE epg_ch DEL ontv")
+ db[1].execute("\
+ ALTER TABLE in_auto_jbk_key ADD auto TINYINT DEFAULT 0")
+ db[1].execute("\
+ ALTER TABLE in_auto_jbk_key ADD opt VARCHAR(20)")
+ self.close_db(db)
+ self.change_installed_in_status()#チャンネルスキャンをさせる
+ self.change_version_in_status("99")
\ No newline at end of file