OSDN Git Service

change function name.
[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.getPathSetting("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.searchFromCHtxt(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.getChCSchFromCHtxt(chtxt)['ch'])
34         xml2db_dom.xml2db_dom(os.path.join(tmppath, chtxt + "epgdata.xml"), chdb.searchFromCHtxt(chtxt)['bctype'])
35 def updateForBctype(bctype):
36     bctypel = chdb.searchFromBctype(bctype)
37     #print bctype
38     try:
39         ts2epg.write(tmppath + bctype + "epgdata.xml", chdb.searchFromBctype(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.addCommonlogEX("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 searchTime(titletxt, timet, deltatime, chtxt):
49     time = datetime.datetime.strptime(timet, "%Y-%m-%d %H:%M:%S")
50     ret = []
51     deltatime = int(deltatime)
52     beforetime = time.strftime("%Y%m%d%H%M%S")
53     beforetime = time - datetime.timedelta(hours=deltatime)
54     aftertime = time + datetime.timedelta(hours=deltatime)
55     beforetime = beforetime.strftime("%Y%m%d%H%M%S")
56     aftertime = aftertime.strftime("%Y%m%d%H%M%S")
57     one = ["", "", "", "","","",""]
58     tempt = 0
59     chtxtt=chtxt.replace("_0","_%")
60     d = rec10d.rec10db.select_by_time_ngram_epg_timeline(beforetime, aftertime, chtxtt)
61     for chtxtt, title, start, stop ,exp,longexp,category in d:
62         #recdblist.printutf8(chtxtt+":"+title+":"+start+":"+stop)
63         p = n_gram.bigram(titletxt, title)
64         btime = start
65         btime = btime[0:4] + "-" + btime[4:6] + "-" + btime[6:8] + " " + btime[8:10] + ":" + btime[10:12] + ":00"
66         etime = stop
67         etime = etime[0:4] + "-" + etime[4:6] + "-" + etime[6:8] + " " + etime[8:10] + ":" + etime[10:12] + ":00"
68         bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
69         dt = bt-time
70         dt = abs(dt)
71         dt = 24 * 60 * 60 * dt.days + dt.seconds + 1
72         p = p * 90
73         dt = 1000-1000 * dt / (7 * 24 * 60 * 60)
74         if p > 0:
75             p = p + dt
76         if p > tempt:
77             one = [chtxtt, title, btime, etime,exp,longexp,category]
78             tempt = p
79         if p > 0:
80             #recdblist.printutf8(title + ":" + str(p) + u"点")
81             ""
82     ret = one
83     #print ret
84     return ret
85 def searchTimeAuto(keytxt, timet, deltatime):
86     time = datetime.datetime.strptime(timet, "%Y-%m-%d %H:%M:%S")
87     ret = []
88     deltatime = int(deltatime)
89     beforetime = time.strftime("%Y%m%d%H%M%S")
90     aftertime = time + datetime.timedelta(hours=deltatime)
91     aftertime = aftertime.strftime("%Y%m%d%H%M%S")
92     d = rec10d.rec10db.select_by_time_keyword_auto_suggest_epg_timeline(keytxt,beforetime, aftertime)
93     for chtxtt, title, start, stop ,exp,longexp,category in d:
94         btime = start
95         btime = btime[0:4] + "-" + btime[4:6] + "-" + btime[6:8] + " " + btime[8:10] + ":" + btime[10:12] + ":00"
96         etime = stop
97         etime = etime[0:4] + "-" + etime[4:6] + "-" + etime[6:8] + " " + etime[8:10] + ":" + etime[10:12] + ":00"
98         ret.append([chtxtt, title, btime, etime,exp,longexp,category])
99     return ret
100 def countSchedule(btime,etime):
101     """
102     return rec num (int return[0]:TE /int return[1]:BS/CS)
103     """
104     def cmpare(x, y):
105         xt = x
106         yt = y
107         if xt > yt:
108             return -1
109         elif xt == yt:
110             return 0
111         else:
112             return 1
113     dls = rec10d.rec10db.select_bytime_all_timeline(btime, etime)
114     times = []
115     btd = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
116     etd = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
117     for dl in dls:
118         dd1 = datetime.datetime.strptime(dl['btime'], "%Y-%m-%d %H:%M:%S")
119         dd2 = datetime.datetime.strptime(dl['etime'], "%Y-%m-%d %H:%M:%S")
120         if dd1 < btd:
121             dd1 = btd
122         if dd2 > etd:
123             dd2 = etd
124         times.append(dd1)
125         times.append(dd2)
126     times = list(set(times))
127     times.sort(cmpare)
128     times.reverse()
129     retcount = [0, 0]
130     for i in xrange(0, len(times)-2, 1):
131         bt1 = times[i]
132         et1 = times[i + 1]
133         btime1 = bt1.strftime("%Y-%m-%d %H:%M:%S")
134         etime1 = et1.strftime("%Y-%m-%d %H:%M:%S")
135         ret1 = rec10d.rec10db.count_schedule_timeline(btime1, etime1)
136         if retcount[0] < ret1[0]:
137             retcount[0] = ret1[0]
138         if retcount[1] < ret1[1]:
139             retcount[1] = ret1[1]
140     return retcount
141
142 def searchSchedule(btime,etime):
143     """
144     return rec num (int return[0]:TE /int return[1]:BS/CS)
145     """
146     def cmpare(x, y):
147         xt = x
148         yt = y
149         if xt > yt:
150             return -1
151         elif xt == yt:
152             return 0
153         else:
154             return 1
155     dls = rec10d.rec10db.select_bytime_all_timeline(btime, etime)
156     times = []
157     btd = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
158     etd = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
159     for dl in dls:
160         dd1 = datetime.datetime.strptime(dl['btime'], "%Y-%m-%d %H:%M:%S")
161         dd2 = datetime.datetime.strptime(dl['etime'], "%Y-%m-%d %H:%M:%S")
162         if dd1 < btd:
163             dd1 = btd
164         if dd2 > etd:
165             dd2 = etd
166         times.append(dd1)
167         times.append(dd2)
168     times = list(set(times))
169     times.sort(cmpare)
170     times.reverse()
171     ret=[]
172     for i in xrange(0, len(times)-2, 1):
173         bt1 = times[i]
174         et1 = times[i + 1]
175         btime1 = bt1.strftime("%Y-%m-%d %H:%M:%S")
176         etime1 = et1.strftime("%Y-%m-%d %H:%M:%S")
177         ret1 = rec10d.rec10db.search_schedule_timeline(btime1, etime1)
178         ret.append(ret1)
179     ret = list(set(ret))
180     return ret
181
182 def countEpgSchedule(epgbtime,epgetime):
183     """
184     return rec num (int return[0]:TE /int return[1]:BS/CS)
185     """
186     def cmpare(x, y):
187         xt = x
188         yt = y
189         if xt > yt:
190             return -1
191         elif xt == yt:
192             return 0
193         else:
194             return 1
195     dls = rec10d.rec10db.select_byepgtime_over_timeline(epgbtime, epgetime)
196     #print dls
197     times = []
198     btd = datetime.datetime.strptime(epgbtime, "%Y-%m-%d %H:%M:%S")
199     etd = datetime.datetime.strptime(epgetime, "%Y-%m-%d %H:%M:%S")
200     for dl in dls:
201         dd1 = datetime.datetime.strptime(dl['epgbtime'], "%Y-%m-%d %H:%M:%S")
202         dd2 = datetime.datetime.strptime(dl['epgetime'], "%Y-%m-%d %H:%M:%S")
203         if dd1 < btd:
204             dd1 = btd
205         if dd2 > etd:
206             dd2 = etd
207         times.append(dd1)
208         times.append(dd2)
209     times = list(set(times))
210     times.sort(cmpare)
211     times.reverse()
212     retcount = [0, 0]
213     for i in xrange(0, len(times)-1, 1):
214         bt1 = times[i]
215         et1 = times[i + 1]
216         epgbtime1 = bt1.strftime("%Y-%m-%d %H:%M:%S")
217         epgetime1 = et1.strftime("%Y-%m-%d %H:%M:%S")
218         ret1 = rec10d.rec10db.count_epgschedule_timeline(epgbtime1, epgetime1)
219         if retcount[0] < ret1[0]:
220             retcount[0] = ret1[0]
221         if retcount[1] < ret1[1]:
222             retcount[1] = ret1[1]
223     return retcount
224 def searchEpgSchedule(epgbtime,epgetime):
225     """
226     return rec num (int return[0]:TE /int return[1]:BS/CS)
227     """
228     def cmpare(x, y):
229         xt = x
230         yt = y
231         if xt > yt:
232             return -1
233         elif xt == yt:
234             return 0
235         else:
236             return 1
237     dls = rec10d.rec10db.select_byepgtime_all_timeline(epgbtime, epgetime)
238     times = []
239     btd = datetime.datetime.strptime(epgbtime, "%Y-%m-%d %H:%M:%S")
240     etd = datetime.datetime.strptime(epgetime, "%Y-%m-%d %H:%M:%S")
241     for dl in dls:
242         dd1 = datetime.datetime.strptime(dl['epgbtime'], "%Y-%m-%d %H:%M:%S")
243         dd2 = datetime.datetime.strptime(dl['epgetime'], "%Y-%m-%d %H:%M:%S")
244         if dd1 < btd:
245             dd1 = btd
246         if dd2 > etd:
247             dd2 = etd
248         times.append(dd1)
249         times.append(dd2)
250     times = list(set(times))
251     times.sort(cmpare)
252     times.reverse()
253     ret=[]
254     for i in xrange(0, len(times)-2, 1):
255         bt1 = times[i]
256         et1 = times[i + 1]
257         epgbtime1 = bt1.strftime("%Y-%m-%d %H:%M:%S")
258         epgetime1 = et1.strftime("%Y-%m-%d %H:%M:%S")
259         ret1 = rec10d.rec10db.search_epgschedule_timeline(epgbtime1, epgetime1)
260         ret.append(ret1)
261     ret = list(set(ret))
262     return ret