OSDN Git Service

change db mode.
[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     aftertime = time + datetime.timedelta(hours=deltatime)
60     aftertime = aftertime.strftime("%Y%m%d%H%M%S")
61     one = ["", "", "", "","","",""]
62     tempt = 0
63     d = rec10d.rec10db.select_by_time_ngram_epg_timeline(beforetime, aftertime, chtxt)
64     for chtxtt, title, start, stop ,exp,longexp,category in d:
65         #recdblist.printutf8(chtxtt+":"+title+":"+start+":"+stop)
66         p = n_gram.bigram(titletxt, title)
67         btime = start
68         btime = btime[0:4] + "-" + btime[4:6] + "-" + btime[6:8] + " " + btime[8:10] + ":" + btime[10:12] + ":00"
69         etime = stop
70         etime = etime[0:4] + "-" + etime[4:6] + "-" + etime[6:8] + " " + etime[8:10] + ":" + etime[10:12] + ":00"
71         bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
72         dt = bt-time
73         dt = 24 * 60 * 60 * dt.days + dt.seconds + 1
74         p = p * 90
75         dt = 1000-1000 * dt / (7 * 24 * 60 * 60)
76         if p > 0:
77             p = p + dt
78         if p > tempt:
79             one = [chtxtt, title, btime, etime,exp,longexp,category]
80             tempt = p
81         if p > 0:
82             recdblist.printutf8(title + ":" + str(p) + u"点")
83     ret = one
84     print ret
85     return ret
86 def searchtime_auto(keytxt, timet, deltatime):
87     time = datetime.datetime.strptime(timet, "%Y-%m-%d %H:%M:%S")
88     ret = []
89     deltatime = int(deltatime)
90     beforetime = time.strftime("%Y%m%d%H%M%S")
91     aftertime = time + datetime.timedelta(hours=deltatime)
92     aftertime = aftertime.strftime("%Y%m%d%H%M%S")
93     d = rec10d.rec10db.select_by_time_keyword_auto_suggest_epg_timeline(keytxt,beforetime, aftertime)
94     for chtxtt, title, start, stop ,exp,longexp,category in d:
95         btime = start
96         btime = btime[0:4] + "-" + btime[4:6] + "-" + btime[6:8] + " " + btime[8:10] + ":" + btime[10:12] + ":00"
97         etime = stop
98         etime = etime[0:4] + "-" + etime[4:6] + "-" + etime[6:8] + " " + etime[8:10] + ":" + etime[10:12] + ":00"
99         ret.append([chtxtt, title, btime, etime,exp,longexp,category])
100     return ret
101 def count_schedule(btime,etime):
102     """
103     return rec num (int return[0]:TE /int return[1]:BS/CS)
104     """
105     def cmpare(x, y):
106         xt = x
107         yt = y
108         if xt > yt:
109             return -1
110         elif xt == yt:
111             return 0
112         else:
113             return 1
114     dls = rec10d.rec10db.select_bytime_all_timeline(btime, etime)
115     times = []
116     btd = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
117     etd = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
118     for dl in dls:
119         dd1 = datetime.datetime.strptime(dl['btime'], "%Y-%m-%d %H:%M:%S")
120         dd2 = datetime.datetime.strptime(dl['etime'], "%Y-%m-%d %H:%M:%S")
121         if dd1 < btd:
122             dd1 = btd
123         if dd2 > etd:
124             dd2 = etd
125         times.append(dd1)
126         times.append(dd2)
127     times = list(set(times))
128     times.sort(cmpare)
129     times.reverse()
130     retcount = [0, 0]
131     for i in xrange(0, len(times)-2, 1):
132         bt1 = times[i]
133         et1 = times[i + 1]
134         btime1 = bt1.strftime("%Y-%m-%d %H:%M:%S")
135         etime1 = et1.strftime("%Y-%m-%d %H:%M:%S")
136         ret1 = rec10d.rec10db.count_schedule_timeline(btime1, etime1)
137         if retcount[0] < ret1[0]:
138             retcount[0] = ret1[0]
139         if retcount[1] < ret1[1]:
140             retcount[1] = ret1[1]
141     return retcount
142
143 def search_schedule(btime,etime):
144     """
145     return rec num (int return[0]:TE /int return[1]:BS/CS)
146     """
147     def cmpare(x, y):
148         xt = x
149         yt = y
150         if xt > yt:
151             return -1
152         elif xt == yt:
153             return 0
154         else:
155             return 1
156     dls = rec10d.rec10db.select_bytime_all_timeline(btime, etime)
157     times = []
158     btd = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
159     etd = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
160     for dl in dls:
161         dd1 = datetime.datetime.strptime(dl['btime'], "%Y-%m-%d %H:%M:%S")
162         dd2 = datetime.datetime.strptime(dl['etime'], "%Y-%m-%d %H:%M:%S")
163         if dd1 < btd:
164             dd1 = btd
165         if dd2 > etd:
166             dd2 = etd
167         times.append(dd1)
168         times.append(dd2)
169     times = list(set(times))
170     times.sort(cmpare)
171     times.reverse()
172     ret=[]
173     for i in xrange(0, len(times)-2, 1):
174         bt1 = times[i]
175         et1 = times[i + 1]
176         btime1 = bt1.strftime("%Y-%m-%d %H:%M:%S")
177         etime1 = et1.strftime("%Y-%m-%d %H:%M:%S")
178         ret1 = rec10d.rec10db.search_schedule_timeline(btime1, etime1)
179         ret.append(ret1)
180     ret = list(set(ret))
181     return ret
182
183 def count_epgschedule(epgbtime,epgetime):
184     """
185     return rec num (int return[0]:TE /int return[1]:BS/CS)
186     """
187     def cmpare(x, y):
188         xt = x
189         yt = y
190         if xt > yt:
191             return -1
192         elif xt == yt:
193             return 0
194         else:
195             return 1
196     dls = rec10d.rec10db.select_byepgtime_all_timeline(epgbtime, epgetime)
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)-2, 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 search_epgschedule(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