OSDN Git Service

fix remove error.
[rec10/rec10-git.git] / rec10 / trunk / src / epgdb.py
1 #!/usr/bin/python
2 # coding: UTF-8
3 # Rec10 TS Recording Tools
4 # Copyright (C) 2009-2010 Yukikaze
5 import datetime
6 import os
7 import shutil
8 import time
9 import os.path
10
11 import chdb
12 import n_gram
13 import rec10d
14 import ts2epg
15 import xml2db_dom
16 import configreader
17 import recdblist
18 path = str(os.path.dirname(os.path.abspath(__file__))) + "/"
19 tmppath = configreader.getpath("tmp")+"/"
20 if tmppath=="/":
21     tmppath=path
22 def update(chtxt):
23     recdblist.printutf8(chtxt)
24     tnow = datetime.datetime.now()
25     try:
26         lastup = datetime.datetime.strptime(chdb.chtxtsearch(chtxt)[0]['update'], "%Y-%m-%d %H:%M:%S")
27     except:
28         lastup = datetime.datetime.strptime("2009-04-01 00:00:00", "%Y-%m-%d %H:%M:%S")
29     dt = tnow-lastup
30     dt = dt.days * 24 * 60 + dt.seconds
31     if dt > 2 * 60 * 60:
32         ts2epg.write(os.path.join(tmppath, chtxt + "epgdata.xml"), chdb.chtxtsearch(chtxt)['ch'])
33         xml2db_dom.xml2db_dom(os.path.join(tmppath, chtxt + "epgdata.xml"), chdb.chtxtsearch(chtxt)['bctype'])
34 def updatebc(bctype):
35     bctypel = chdb.bctypesearch(bctype)
36     print bctype
37     try:
38         ts2epg.write(tmppath + bctype + "epgdata.xml", chdb.bctypesearch(bctype)['ch'])
39         xml2db_dom.xml2db_dom(tmppath + bctype + "epgdata.xml", bctype)
40         shutil.copyfile(tmppath + bctype + "epgdata.xml", tmppath + bctype + "epgdata.bak.xml")
41         time.sleep(5)
42         rec10d.rec10db.update_by_bctype_epg_ch(bctype)
43     except Exception, inst:
44         print "error occurs in updatebc(epgdb)"
45         print type(inst)
46         print inst
47         xml2db_dom.xml2db_dom(tmppath + bctype + "epgdata.bak.xml", bctype)
48         rec10d.rec10db.update_status_by_bctype_epg_ch(bctype, "2")
49 def updatebc_bak(bctype):
50     """
51     update epg data by .bak file
52     """
53     xml2db_dom.xml2db_dom(tmppath + bctype + "epgdata.bak.xml", bctype)
54 def searchtime2(titletxt, timet, deltatime, chtxt):
55     time = datetime.datetime.strptime(timet, "%Y-%m-%d %H:%M:%S")
56     ret = []
57     deltatime = int(deltatime)
58     beforetime = time.strftime("%Y%m%d%H%M%S")
59     beforetime = time - datetime.timedelta(hours=deltatime)
60     aftertime = time + datetime.timedelta(hours=deltatime)
61     beforetime = beforetime.strftime("%Y%m%d%H%M%S")
62     aftertime = aftertime.strftime("%Y%m%d%H%M%S")
63     one = ["", "", "", "","","",""]
64     tempt = 0
65     d = rec10d.rec10db.select_by_time_ngram_epg_timeline(beforetime, aftertime, chtxt)
66     for chtxtt, title, start, stop ,exp,longexp,category in d:
67         #recdblist.printutf8(chtxtt+":"+title+":"+start+":"+stop)
68         p = n_gram.bigram(titletxt, title)
69         btime = start
70         btime = btime[0:4] + "-" + btime[4:6] + "-" + btime[6:8] + " " + btime[8:10] + ":" + btime[10:12] + ":00"
71         etime = stop
72         etime = etime[0:4] + "-" + etime[4:6] + "-" + etime[6:8] + " " + etime[8:10] + ":" + etime[10:12] + ":00"
73         bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
74         dt = bt-time
75         dt = abs(dt)
76         dt = 24 * 60 * 60 * dt.days + dt.seconds + 1
77         p = p * 90
78         dt = 1000-1000 * dt / (7 * 24 * 60 * 60)
79         if p > 0:
80             p = p + dt
81         if p > tempt:
82             one = [chtxtt, title, btime, etime,exp,longexp,category]
83             tempt = p
84         if p > 0:
85             #recdblist.printutf8(title + ":" + str(p) + u"点")
86             ""
87     ret = one
88     #print ret
89     return ret
90 def searchtime_auto(keytxt, timet, deltatime):
91     time = datetime.datetime.strptime(timet, "%Y-%m-%d %H:%M:%S")
92     ret = []
93     deltatime = int(deltatime)
94     beforetime = time.strftime("%Y%m%d%H%M%S")
95     aftertime = time + datetime.timedelta(hours=deltatime)
96     aftertime = aftertime.strftime("%Y%m%d%H%M%S")
97     d = rec10d.rec10db.select_by_time_keyword_auto_suggest_epg_timeline(keytxt,beforetime, aftertime)
98     for chtxtt, title, start, stop ,exp,longexp,category in d:
99         btime = start
100         btime = btime[0:4] + "-" + btime[4:6] + "-" + btime[6:8] + " " + btime[8:10] + ":" + btime[10:12] + ":00"
101         etime = stop
102         etime = etime[0:4] + "-" + etime[4:6] + "-" + etime[6:8] + " " + etime[8:10] + ":" + etime[10:12] + ":00"
103         ret.append([chtxtt, title, btime, etime,exp,longexp,category])
104     return ret
105 def count_schedule(btime,etime):
106     """
107     return rec num (int return[0]:TE /int return[1]:BS/CS)
108     """
109     def cmpare(x, y):
110         xt = x
111         yt = y
112         if xt > yt:
113             return -1
114         elif xt == yt:
115             return 0
116         else:
117             return 1
118     dls = rec10d.rec10db.select_bytime_all_timeline(btime, etime)
119     times = []
120     btd = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
121     etd = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
122     for dl in dls:
123         dd1 = datetime.datetime.strptime(dl['btime'], "%Y-%m-%d %H:%M:%S")
124         dd2 = datetime.datetime.strptime(dl['etime'], "%Y-%m-%d %H:%M:%S")
125         if dd1 < btd:
126             dd1 = btd
127         if dd2 > etd:
128             dd2 = etd
129         times.append(dd1)
130         times.append(dd2)
131     times = list(set(times))
132     times.sort(cmpare)
133     times.reverse()
134     retcount = [0, 0]
135     for i in xrange(0, len(times)-2, 1):
136         bt1 = times[i]
137         et1 = times[i + 1]
138         btime1 = bt1.strftime("%Y-%m-%d %H:%M:%S")
139         etime1 = et1.strftime("%Y-%m-%d %H:%M:%S")
140         ret1 = rec10d.rec10db.count_schedule_timeline(btime1, etime1)
141         if retcount[0] < ret1[0]:
142             retcount[0] = ret1[0]
143         if retcount[1] < ret1[1]:
144             retcount[1] = ret1[1]
145     return retcount
146
147 def search_schedule(btime,etime):
148     """
149     return rec num (int return[0]:TE /int return[1]:BS/CS)
150     """
151     def cmpare(x, y):
152         xt = x
153         yt = y
154         if xt > yt:
155             return -1
156         elif xt == yt:
157             return 0
158         else:
159             return 1
160     dls = rec10d.rec10db.select_bytime_all_timeline(btime, etime)
161     times = []
162     btd = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
163     etd = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
164     for dl in dls:
165         dd1 = datetime.datetime.strptime(dl['btime'], "%Y-%m-%d %H:%M:%S")
166         dd2 = datetime.datetime.strptime(dl['etime'], "%Y-%m-%d %H:%M:%S")
167         if dd1 < btd:
168             dd1 = btd
169         if dd2 > etd:
170             dd2 = etd
171         times.append(dd1)
172         times.append(dd2)
173     times = list(set(times))
174     times.sort(cmpare)
175     times.reverse()
176     ret=[]
177     for i in xrange(0, len(times)-2, 1):
178         bt1 = times[i]
179         et1 = times[i + 1]
180         btime1 = bt1.strftime("%Y-%m-%d %H:%M:%S")
181         etime1 = et1.strftime("%Y-%m-%d %H:%M:%S")
182         ret1 = rec10d.rec10db.search_schedule_timeline(btime1, etime1)
183         ret.append(ret1)
184     ret = list(set(ret))
185     return ret
186
187 def count_epgschedule(epgbtime,epgetime):
188     """
189     return rec num (int return[0]:TE /int return[1]:BS/CS)
190     """
191     def cmpare(x, y):
192         xt = x
193         yt = y
194         if xt > yt:
195             return -1
196         elif xt == yt:
197             return 0
198         else:
199             return 1
200     dls = rec10d.rec10db.select_byepgtime_over_timeline(epgbtime, epgetime)
201     #print dls
202     times = []
203     btd = datetime.datetime.strptime(epgbtime, "%Y-%m-%d %H:%M:%S")
204     etd = datetime.datetime.strptime(epgetime, "%Y-%m-%d %H:%M:%S")
205     for dl in dls:
206         dd1 = datetime.datetime.strptime(dl['epgbtime'], "%Y-%m-%d %H:%M:%S")
207         dd2 = datetime.datetime.strptime(dl['epgetime'], "%Y-%m-%d %H:%M:%S")
208         if dd1 < btd:
209             dd1 = btd
210         if dd2 > etd:
211             dd2 = etd
212         times.append(dd1)
213         times.append(dd2)
214     times = list(set(times))
215     times.sort(cmpare)
216     times.reverse()
217     retcount = [0, 0]
218     for i in xrange(0, len(times)-1, 1):
219         bt1 = times[i]
220         et1 = times[i + 1]
221         epgbtime1 = bt1.strftime("%Y-%m-%d %H:%M:%S")
222         epgetime1 = et1.strftime("%Y-%m-%d %H:%M:%S")
223         ret1 = rec10d.rec10db.count_epgschedule_timeline(epgbtime1, epgetime1)
224         if retcount[0] < ret1[0]:
225             retcount[0] = ret1[0]
226         if retcount[1] < ret1[1]:
227             retcount[1] = ret1[1]
228     return retcount
229 def search_epgschedule(epgbtime,epgetime):
230     """
231     return rec num (int return[0]:TE /int return[1]:BS/CS)
232     """
233     def cmpare(x, y):
234         xt = x
235         yt = y
236         if xt > yt:
237             return -1
238         elif xt == yt:
239             return 0
240         else:
241             return 1
242     dls = rec10d.rec10db.select_byepgtime_all_timeline(epgbtime, epgetime)
243     times = []
244     btd = datetime.datetime.strptime(epgbtime, "%Y-%m-%d %H:%M:%S")
245     etd = datetime.datetime.strptime(epgetime, "%Y-%m-%d %H:%M:%S")
246     for dl in dls:
247         dd1 = datetime.datetime.strptime(dl['epgbtime'], "%Y-%m-%d %H:%M:%S")
248         dd2 = datetime.datetime.strptime(dl['epgetime'], "%Y-%m-%d %H:%M:%S")
249         if dd1 < btd:
250             dd1 = btd
251         if dd2 > etd:
252             dd2 = etd
253         times.append(dd1)
254         times.append(dd2)
255     times = list(set(times))
256     times.sort(cmpare)
257     times.reverse()
258     ret=[]
259     for i in xrange(0, len(times)-2, 1):
260         bt1 = times[i]
261         et1 = times[i + 1]
262         epgbtime1 = bt1.strftime("%Y-%m-%d %H:%M:%S")
263         epgetime1 = et1.strftime("%Y-%m-%d %H:%M:%S")
264         ret1 = rec10d.rec10db.search_epgschedule_timeline(epgbtime1, epgetime1)
265         ret.append(ret1)
266     ret = list(set(ret))
267     return ret