OSDN Git Service

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