OSDN Git Service

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