OSDN Git Service

implement to work "a bit after start resolution changing movie".
[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     chtxtt=chtxt.replace("_0","_%")
65     d = rec10d.rec10db.select_by_time_ngram_epg_timeline(beforetime, aftertime, chtxtt)
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