# coding: UTF-8
# Rec10 TS Recording Tools
# Copyright (C) 2009 Yukikaze
+import datetime
import os
-import time
-import sqlite3
+import shutil
+
import chdb
-import datetime
+import n_gram
+import rec10d
import ts2epg
import xml2db
-import n_gram
-path=str(os.path.dirname(os.path.abspath(__file__)))+"/"
-tmppath=path
+import configreader
+path = str(os.path.dirname(os.path.abspath(__file__))) + "/"
+tmppath = configreader.getpath("tmp")+"/"
def update(chtxt):
print chtxt
- tnow=datetime.datetime.now()
+ tnow = datetime.datetime.now()
try:
- lastup=datetime.datetime.strptime(chdb.chtxtsearch(chtxt)[0]['update'],"%Y-%m-%d %H:%M:%S")
+ lastup = datetime.datetime.strptime(chdb.chtxtsearch(chtxt)[0]['update'], "%Y-%m-%d %H:%M:%S")
except:
- lastup=datetime.datetime.strptime("2009-04-01 00:00:00","%Y-%m-%d %H:%M:%S")
- dt=tnow-lastup
- dt=dt.days*24*60+dt.seconds
- if dt>2*60*60:
- ts2epg.write(tmppath+"epgdate.xml",chdb.chtxtsearch(chtxt)['ch'])
- xml2db.xml2db(tmppath+"epgdate.xml",path+"ch.db",chdb.chtxtsearch(chtxt)['bctype'])
+ lastup = datetime.datetime.strptime("2009-04-01 00:00:00", "%Y-%m-%d %H:%M:%S")
+ dt = tnow-lastup
+ dt = dt.days * 24 * 60 + dt.seconds
+ if dt > 2 * 60 * 60:
+ ts2epg.write(tmppath + chtxt + "epgdate.xml", chdb.chtxtsearch(chtxt)['ch'])
+ xml2db.xml2db(tmppath + chtxt + "epgdate.xml", chdb.chtxtsearch(chtxt)['bctype'])
def updatebc(bctype):
- bctypel=chdb.bctypesearch(bctype)
+ bctypel = chdb.bctypesearch(bctype)
print bctypel
- i=1
- while i<5:
- try:
- ts2epg.write(tmppath+"epgdate.xml",chdb.bctypesearch(bctype)['ch'])
- xml2db.xml2db(tmppath+"epgdate.xml",path+"ch.db",bctype)
- break
- except:
- i=i+1
-def updateall():
- update("hisch")
- update("nhk-k")
- update("nhk-s")
- update("me-tere")
- update("cbc")
- update("aichi")
- update("toukai")
- update("chukyo")
- update("bs-nhk-1")
-
-def search(titletxt):
- dbpath=path+"ch.db"
- db=sqlite3.connect(dbpath)
- #print dbpath
- ret=[]
- for ch, title, start, stop in db.execute("SELECT channel,title,start,stop FROM tv WHERE title LIKE \"%"+titletxt+"%\""):
- btime=start.replace(" +0900","")
- btime=btime[0:4]+"-"+btime[4:6]+"-"+btime[6:8]+" "+btime[8:10]+":"+btime[10:12]+":00"
- etime=stop.replace(" +0900","")
- etime=etime[0:4]+"-"+etime[4:6]+"-"+etime[6:8]+" "+etime[8:10]+":"+etime[10:12]+":00"
- try:
- chtxt=chdb.ontvsearch(ch)['chtxt']
- except:
- chtxt="Unknown"
- #print ch
- ret.append(chtxt+","+title.encode('utf-8')+","+btime+","+etime)
- db.close()
- return ret
-def searchtime(titletxt,time,deltatime):#時間以内のものだけを表示 deltatimeはhours
- dbpath=path+"ch.db"
- db=sqlite3.connect(dbpath)
- #print dbpath
- ret=[]
- deltatime=int(deltatime)
- for ch, title, start, stop in db.execute("SELECT channel,title,start,stop FROM tv WHERE title LIKE \"%"+titletxt+"%\""):
- btime=start.replace(" +0900","")
- btime=btime[0:4]+"-"+btime[4:6]+"-"+btime[6:8]+" "+btime[8:10]+":"+btime[10:12]+":00"
- etime=stop.replace(" +0900","")
- etime=etime[0:4]+"-"+etime[4:6]+"-"+etime[6:8]+" "+etime[8:10]+":"+etime[10:12]+":00"
- bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
- t=datetime.datetime.strptime(time,"%Y-%m-%d %H:%M:%S")
- try:
- chtxt=chdb.ontvsearch(ch)['chtxt']
- except:
- chtxt="Unknown"
- #print ch
- dt=bt-t
- dt=dt.days*24*60*60+dt.seconds
- dt=abs(dt)
- if dt<deltatime*60*60:
- ret.append(chtxt+","+title.encode('utf-8')+","+btime+","+etime)
- print title
- db.close()
- return ret
-def searchtime2(titletxt,timet,deltatime,chtxt):
- time=datetime.datetime.strptime(timet,"%Y-%m-%d %H:%M:%S")
- dbpath=path+"ch.db"
- db=sqlite3.connect(dbpath)
- #print dbpath
- ret=[]
- deltatime=int(deltatime)
- beforetime=time.strftime("%Y%m%d%H%M%S")
- aftertime=time+datetime.timedelta(hours=deltatime)
- aftertime=aftertime.strftime("%Y%m%d%H%M%S")
- dbexe="SELECT chdata.chtxt,title,start,stop FROM tv INNER JOIN chdata WHERE chdata.ontv=tv.channel AND start >= \""+beforetime+"\" AND start <= \""+aftertime+"\" AND chdata.chtxt=\""+chtxt+"\""
- #print dbexe
- one={}
- tempt=0
- for chtxtt, title, start, stop in db.execute(dbexe):
- ret=[]
- p=n_gram.bigram(titletxt,title)
- btime=start
- btime=btime[0:4]+"-"+btime[4:6]+"-"+btime[6:8]+" "+btime[8:10]+":"+btime[10:12]+":00"
- etime=stop
- etime=etime[0:4]+"-"+etime[4:6]+"-"+etime[6:8]+" "+etime[8:10]+":"+etime[10:12]+":00"
- bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
- et=datetime.datetime.strptime(etime,"%Y-%m-%d %H:%M:%S")
- dt=bt-time
- dt=24*60*60*dt.days+dt.seconds+1
- p=p*90
- dt=1000-1000*dt/(7*24*60*60)
- if p>0:
- p=p+dt
+ try:
+ ts2epg.write(tmppath + bctype + "epgdate.xml", chdb.bctypesearch(bctype)['ch'])
+ xml2db.xml2db(tmppath + bctype + "epgdate.xml", bctype)
+ shutil.copyfile(tmppath + bctype + "epgdate.xml", tmppath + bctype + "epgdate.bak.xml")
+ rec10d.rec10db.update_by_bctype_chdata(bctype)
+ except Exception, inst:
+ print type(inst)
+ print inst
+ xml2db.xml2db(tmppath + bctype + "epgdate.bak.xml", bctype)
+ rec10d.rec10db.update_status_by_bctype_chdata(bctype, "2")
+def updatebc_bak(bctype):
+ """
+ update epg data by .bak file
+ """
+ xml2db.xml2db(tmppath + bctype + "epgdate.bak.xml", bctype)
+def searchtime2(titletxt, timet, deltatime, chtxt):
+ time = datetime.datetime.strptime(timet, "%Y-%m-%d %H:%M:%S")
+ ret = []
+ deltatime = int(deltatime)
+ beforetime = time.strftime("%Y%m%d%H%M%S")
+ aftertime = time + datetime.timedelta(hours=deltatime)
+ aftertime = aftertime.strftime("%Y%m%d%H%M%S")
+ one = ["", "", "", ""]
+ tempt = 0
+ d = rec10d.rec10db.select_by_time_ngram_tv(beforetime, aftertime, chtxt)
+ for chtxtt, title, start, stop ,exp,longexp,category in d:
+ #print chtxtt+":"+title+":"+start+":"+stop
+ p = n_gram.bigram(titletxt, title)
+ btime = start
+ btime = btime[0:4] + "-" + btime[4:6] + "-" + btime[6:8] + " " + btime[8:10] + ":" + btime[10:12] + ":00"
+ etime = stop
+ etime = etime[0:4] + "-" + etime[4:6] + "-" + etime[6:8] + " " + etime[8:10] + ":" + etime[10:12] + ":00"
+ bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
+ dt = bt-time
+ dt = 24 * 60 * 60 * dt.days + dt.seconds + 1
+ p = p * 90
+ dt = 1000-1000 * dt / (7 * 24 * 60 * 60)
+ if p > 0:
+ p = p + dt
print dt
- if p>tempt:
- one=chtxtt+","+title.encode('utf-8')+","+btime+","+etime
- tempt=p
- if p>0:
- print title+":"+str(p)+"点"
- db.close()
- ret.append(one)
+ if p > tempt:
+ one = [chtxtt, title.encode('utf-8'), btime, etime,exp.encode('UTF-8'),longexp.encode('UTF-8'),category.encode('UTF-8')]
+ tempt = p
+ if p > 0:
+ print title + ":" + str(p) + "点"
+ ret = one
print ret
return ret
+def searchtime_auto(keytxt, timet, deltatime):
+ time = datetime.datetime.strptime(timet, "%Y-%m-%d %H:%M:%S")
+ ret = []
+ deltatime = int(deltatime)
+ beforetime = time.strftime("%Y%m%d%H%M%S")
+ aftertime = time + datetime.timedelta(hours=deltatime)
+ aftertime = aftertime.strftime("%Y%m%d%H%M%S")
+ d = rec10d.rec10db.select_by_time_auto_suggest_tv(keytxt,beforetime, aftertime)
+ for chtxtt, title, start, stop ,exp,longexp,category in d:
+ btime = start
+ btime = btime[0:4] + "-" + btime[4:6] + "-" + btime[6:8] + " " + btime[8:10] + ":" + btime[10:12] + ":00"
+ etime = stop
+ etime = etime[0:4] + "-" + etime[4:6] + "-" + etime[6:8] + " " + etime[8:10] + ":" + etime[10:12] + ":00"
+ ret.append([chtxtt, title.encode('utf-8'), btime, etime,exp.encode('UTF-8'),longexp.encode('UTF-8'),category.encode('UTF-8')])
+ return ret
\ No newline at end of file