OSDN Git Service

9594d13fe38405ac8dc699b51e509e927104f775
[rec10/rec10-git.git] / Rec10WEB / trunk / src / rec10web.py
1 #!/usr/bin/python
2 # coding: UTF-8
3 # Rec10 TS Recording Tools
4 # Copyright (C) 2009 Yukikaze
5 import cgi
6 import cgitb
7 import sqlite3
8 import os
9 import re
10 import datetime
11 cgitb.enable()
12 path=str(os.path.dirname(os.path.abspath(__file__)))+"/"
13 dbpath=path+"ch.db"
14
15 def getRecDate():
16     db=sqlite3.connect(dbpath)
17     recdata="\"id\",\"type\",\"chtxt\",\"title\",\"btime\",\"etime\",\"deltaday\",\"opt\"\n"
18     recdata="id,type,chtxt,title,btime,etime,deltaday,opt\n"
19     for id, typet, chtxt, title, btime, etime, deltatime ,deltaday ,opt in db.execute("SELECT id, type, chtxt, title, btime, etime, deltatime ,deltaday ,opt FROM rectime"):
20         if deltaday==None:
21             deltaday="なし"
22         elif deltaday=="":
23             deltaday="なし"
24         if opt==None:
25             opt="なし"
26         if typet=="res":
27             typet="一回予約"
28         elif typet=="key":
29             typet="検索予約"
30         elif typet=="keyevery":
31             typet="隔週予約"
32         elif typet=="res":
33             typet="録画最終"
34         elif typet=="grid":
35             typet="外部委託"
36         elif typet=="ts2avi":
37             typet="EncQue"
38         btime=btime[5:16]
39         etime=etime[5:16]
40         btime=btime.replace("-","/")
41         etime=etime.replace("-","/")
42         if btime[0:5]==etime[0:5]:
43             etime=etime[6:]
44         s="\""+str(id)+"\",\""+typet+"\",\""+chtxt+"\",\""+title+"\",\""+btime+"\",\""+etime+"\",\""+deltaday+"\",\""+opt+"\"\n"
45         s=str(id)+","+typet+","+chtxt+","+title+","+btime+","+etime+","+deltaday+","+opt+"\n"
46         recdata=recdata+s
47     f=open(path+"/recdatum.csv","w")
48     f.write(recdata)
49     f.close()
50 def getchtxt():
51     db=sqlite3.connect(dbpath)
52     chopt=""
53     for bctype, ontv, chtxt, ch, csch ,updatetime in db.execute("SELECT bctype,ontv,chtxt,ch,csch,updatetime FROM chdata"):
54         chdisplay=""
55         for bctype,channel,display in db.execute("SELECT bctype,channel,display FROM ch WHERE channel=\""+ontv+"\""):
56             chdisplay=display
57         chopt=chopt+"<option  value="+chtxt+">"+display+"</option>\n                "
58     db.close()
59     return chopt
60 def edit_date(id):
61     db=sqlite3.connect(dbpath)
62     ret={}
63     for idt,typet,chtxt,title,btime,etime,deltatime,opt,deltaday in db.execute("SELECT id,type,chtxt,title,btime,etime,deltatime,opt,deltaday From rectime WHERE id ="+id):
64         ret['id']=idt
65         ret['type']=typet
66         ret['chtxt']=chtxt
67         ret['title']=title
68         ret['btime']=btime
69         ret['etime']=etime
70         try:
71             ret['deltatime']=deltatime
72         except:
73             ret['deltatime']=""
74         ret['opt']=opt
75         try:
76             ret['deltaday']=daltaday
77         except:
78             ret['deltaday']=""
79     db.close()
80     return ret
81
82 def reserv_recday(keyword,chtxt,btime,etime,deltatime,opt,deltaday,day):
83     """
84     dayは月曜日を1日曜日を7とした数字
85     """
86     bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
87     et=datetime.datetime.strptime(etime,"%Y-%m-%d %H:%M:%S")
88     dt=int(day)-bt.isoweekday()
89     if dt<0:
90         dt=dt+7
91     dbt=bt+datetime.timedelta(days=dt)
92     det=et+datetime.timedelta(days=dt)
93     btime=dbt.strftime("%Y-%m-%d %H:%M:%S")
94     etime=det.strftime("%Y-%m-%d %H:%M:%S")
95     return reserv("keyevery",keyword,chtxt,btime,etime,deltatime,opt,"7")
96 def reserv(type,keyword,chtxt,btime,etime,deltatime,opt,deltaday):
97     MaxT=2
98     MaxS=2
99     db=sqlite3.connect(dbpath)
100     bt="\'"+btime+"\'"
101     et="\'"+etime+"\'"
102     dbexe="SELECT type,chdata.bctype,rectime.chtxt,rectime.title FROM rectime INNER JOIN chdata ON rectime.chtxt=chdata.chtxt"
103     #dbexe="SELECT bctype,chtxt,title FROM rectime INNER JOIN chdata ON rectime.chtxt=chdata.chtxt"
104
105     dbexe=dbexe+" WHERE NOT( ( rectime.etime <= "+bt+" ) OR ( rectime.btime >= "+et+" ) )"
106     for typet,bctypet, chtxtt, titlet in db.execute(dbexe):
107         if (typet=="rec") or (typet=="res") or (typet=="key") or (typet=="keyevery"):
108             if bctypet.find("cs")>-1:
109                 MaxS=MaxS-1
110             elif bctypet.find("bs")>-1:
111                 MaxS=MaxS-1
112             elif bctypet.find("te")>-1:
113                 MaxT=MaxT-1
114     bctype=""
115     rett=""
116     for bctypet, chtxtt in db.execute("SELECT bctype,chtxt FROM chdata WHERE chtxt=\'"+chtxt+"\'"):
117         bctype=bctypet
118     if (type=="rec") or (type=="res") or (type=="key") or (type=="keyevery"):
119         if bctype.find("cs")>-1:
120             MaxS=MaxS-1
121         elif bctype.find("bs")>-1:
122             MaxS=MaxS-1
123         elif bctype.find("te")>-1:
124             MaxT=MaxT-1
125     if MaxS>-1 and MaxT>-1:
126         recline="\""+type+"\",\""+chtxt+"\",\""+keyword+"\",datetime(\""+btime+"\"),datetime(\""+etime+"\"),\""+deltatime+"\",\""+opt+"\",\""+deltaday+"\""
127         #print recline
128         db.execute('insert into rectime ("type","chtxt","title","btime","etime","deltatime","opt","deltaday") values ('+recline+')')
129         db.commit()
130     else:
131         rett="over"
132     db.close()
133     return rett
134 def change_reserv(id,type,keyword,chtxt,btime,etime,deltatime,opt,deltaday):
135     """
136     idはテキスト
137     """
138     MaxT=2
139     MaxS=2
140     db=sqlite3.connect(dbpath)
141     bt="\'"+btime+"\'"
142     et="\'"+etime+"\'"
143     idn=int(id)
144     dbexe="SELECT id,type,chdata.bctype,rectime.chtxt,rectime.title FROM rectime INNER JOIN chdata ON rectime.chtxt=chdata.chtxt"
145     #dbexe="SELECT bctype,chtxt,title FROM rectime INNER JOIN chdata ON rectime.chtxt=chdata.chtxt"
146
147     dbexe=dbexe+" WHERE NOT( ( rectime.etime <= "+bt+" ) OR ( rectime.btime >= "+et+" ) )"
148     for idt,typet,bctypet, chtxtt, titlet in db.execute(dbexe):
149         if idt != idn:
150             if (typet=="rec") or (typet=="res") or (typet=="key") or (typet=="keyevery"):
151                 if bctypet.find("cs")>-1:
152                     MaxS=MaxS-1
153                 elif bctypet.find("bs")>-1:
154                     MaxS=MaxS-1
155                 elif bctypet.find("te")>-1:
156                     MaxT=MaxT-1
157     bctype=""
158     rett=""
159     for bctypet, chtxtt in db.execute("SELECT bctype,chtxt FROM chdata WHERE chtxt=\'"+chtxt+"\'"):
160         bctype=bctypet
161     if (type=="rec") or (type=="res") or (type=="key") or (type=="keyevery"):
162         if bctype.find("cs")>-1:
163             MaxS=MaxS-1
164         elif bctype.find("bs")>-1:
165             MaxS=MaxS-1
166         elif bctype.find("te")>-1:
167             MaxT=MaxT-1
168     if MaxS>-1 and MaxT>-1:
169         db.execute('delete from rectime where id='+id)
170         recline="\""+type+"\",\""+chtxt+"\",\""+keyword+"\",datetime(\""+btime+"\"),datetime(\""+etime+"\"),\""+deltatime+"\",\""+opt+"\",\""+deltaday+"\""
171         #print recline
172         db.execute('insert into rectime ("type","chtxt","title","btime","etime","deltatime","opt","deltaday") values ('+recline+')')
173         db.commit()
174     else:
175         rett="over"
176     db.close()
177     return rett
178 def station2chtxt(station):
179     db=sqlite3.connect(dbpath)
180     ret=""
181     for bctype, ontv, chtxt, ch, csch ,updatetime in db.execute("SELECT bctype,ontv,chtxt,ch,csch,updatetime FROM chdata WHERE station=\""+station+"\""):
182         ret=chtxt
183     db.close()
184     return ret
185 def station_name2chtxt(station):
186     db=sqlite3.connect(dbpath)
187     ret=""
188     for bctype, ontv, chtxt, ch, csch ,updatetime in db.execute("SELECT bctype,ontv,chtxt,ch,csch,updatetime FROM chdata WHERE station_name=\""+station+"\""):
189         ret=chtxt
190     db.close()
191     return ret
192 def readHtmlSrcSimple():
193     f = open(path+'rswi.htm')
194     ret=f.read()
195     f.close()
196     return ret
197 def readHtmlEdit():
198     f = open(path+'rswi_edit.htm')
199     ret=f.read()
200     f.close()
201     return ret
202
203 def readRecFinisSimple():
204     f = open(path+'fin.htm')
205     ret=f.read()
206     f.close()
207     return ret
208 def readRecFinisOver():
209     f = open(path+'finover.htm')
210     ret=f.read()
211     f.close()
212     return ret
213 def readRecSchedule():
214     f = open(path+'schedule.htm')
215     ret=f.read()
216     f.close()
217     return ret
218 f=cgi.FieldStorage()
219
220 btime=""
221 etime=""
222 title=""
223 chtxt=""
224 type="res"
225 bt=""
226 getRecDate()
227 if f.getfirst('mode')=="schedule":
228     getRecDate()
229
230 ###ここからiEPG用の読み出し
231 if f.getfirst('station_name'):
232     station=f.getfirst('station_name')
233     chtxt=station_name2chtxt(station)
234 if f.getfirst('station'):
235     station=f.getfirst('station')
236     chtxt=station2chtxt(station)
237 ###ここから外部からの読み出しの場合
238 if f.getfirst('type'):
239     type=f.getfirst('type')
240 if f.getfirst('title'):
241     title=f.getfirst('title')
242 if f.getfirst('chtxt'):
243     chtxt=f.getfirst('chtxt')
244 if f.getfirst('btime'):
245     btime=f.getfirst('btime')
246     bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
247 if f.getfirst('etime'):
248     etime=f.getfirst('etime')
249     et=datetime.datetime.strptime(etime,"%Y-%m-%d %H:%M:%S")
250     if bt !="":
251         delt=et-bt
252         dt=delt.days*24*60*60+delt.seconds
253         if dt<0:
254             dd=datetime.timedelta(days=1)
255             et=et+dd
256             etime=et.strftime("%Y-%m-%d %H:%M:%S")
257         if dt<-1*24*60*60:
258             d1=datetime.datetime(bt.year,0,0)
259             d2=datetime.datetime(bt.year+1,0,0)
260             dd=d2-d1
261             et=et+dd
262             etime=et.strftime("%Y-%m-%d %H:%M:%S")
263         
264 size="S"
265 if f.getfirst('size'):
266     size=f.getfirst('size')
267 opts=""
268 if f.getfirst('opts'):
269     opts=f.getfirst('opts')
270 deltahour=""
271 if f.getfirst('deltahour',""):
272     deltahour=f.getfirst('deltahour',"")
273 deltaday=""
274 if f.getfirst('deltaday',""):
275     deltaday=f.getfirst('deltaday',"")
276 exect=""
277 if f.getfirst('exec',""):
278     exect=f.getfirst('exec',"")
279
280
281 htmdate= readHtmlSrcSimple()
282 htmdate=htmdate.replace("<!--text_for_replace_chtxt_input//-->",getchtxt())
283 htmdate=htmdate.replace("<!--btime-value//-->",btime)
284 htmdate=htmdate.replace("<!--etime-value//-->",etime)
285 htmdate=htmdate.replace("<!--type-value//-->",type)
286 htmdate=htmdate.replace("<!--ch-value//-->",chtxt)
287 htmdate=htmdate.replace("<!--title-value//-->",title)
288 htmdate=htmdate.replace("<!--size-value//-->",size)
289 htmdate=htmdate.replace("<!--opts-value//-->",opts)
290
291
292 #ここから曜日検索の設定
293 if f.getfirst('type')=="keyday":
294     rett=""
295     dayt=f.getfirst('day_Mon')
296     if dayt:
297         rett=rett+reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
298     dayt=f.getfirst('day_Tue')
299     if dayt:
300         rett=rett+reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
301     dayt=f.getfirst('day_Wed')
302     if dayt:
303         rett=rett+reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
304     dayt=f.getfirst('day_Thu')
305     if dayt:
306         rett=rett+reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
307     dayt=f.getfirst('day_Fri')
308     if dayt:
309         rett=rett+reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
310     dayt=f.getfirst('day_Sat')
311     if dayt:
312         rett=rett+reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
313     dayt=f.getfirst('day_Sun')
314     if dayt:
315         rett=rett+reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
316
317     if rett=="":
318         htmdate=readRecFinisSimple()
319     else:
320         htmdate=readRecFinisOver()
321     chtxt=""
322     exect=""
323
324     
325
326 if (chtxt != "")and(title != "")and(btime!="")and(etime!="")and(opts!="")and(exect=="yes"):
327     restxt=reserv(type, title, chtxt, btime, etime, deltahour, opts, deltaday)
328     if restxt=="":
329         htmdate=readRecFinisSimple()
330     elif restxt=="over":
331         htmdate=readRecFinisOver()
332     exect=""
333 #
334 if (chtxt != "")and(title != "")and(btime!="")and(etime!="")and(opts!="")and(re.search('edit-exec:',exect)):
335     editnum=exect.replace("edit-exec:","")
336     restxt=change_reserv(editnum,type, title, chtxt, btime, etime, deltahour, opts, deltaday)
337     if restxt=="":
338         htmdate=readRecFinisSimple()
339     elif restxt=="over":
340         htmdate=readRecFinisOver()
341     exect=""
342 if exect=="schedule":
343     htmdate=readRecSchedule()
344 if re.search('edit:',exect):
345     editnum=exect.replace("edit:","")
346     htmdate= readHtmlEdit()
347     iddata=edit_date(editnum)
348     htmdate=htmdate.replace("<!--text_for_replace_chtxt_input//-->",getchtxt())
349     htmdate=htmdate.replace("<!--ch-value//-->",iddata["chtxt"])
350     htmdate=htmdate.replace("<!--btime-value//-->",iddata["btime"])
351     htmdate=htmdate.replace("<!--etime-value//-->",iddata["etime"])
352     htmdate=htmdate.replace("<!--type-value//-->",iddata["type"])
353     htmdate=htmdate.replace("<!--ch-value//-->",iddata["chtxt"])
354     htmdate=htmdate.replace("<!--title-value//-->",iddata["title"])
355     htmdate=htmdate.replace("<!--size-value//-->",size)
356     htmdate=htmdate.replace("<!--opts-value//-->",iddata["opt"])
357     htmdate=htmdate.replace("<!--exec-value//-->","edit-exec:"+editnum)
358 print "Content-Type: text/html\n"
359 print htmdate
360