OSDN Git Service

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