OSDN Git Service

954c52f7a872ca2062229cfe2f17ab076f70d03e
[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 import time
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     bt=datetime.datetime(*time.strptime(btime,"%Y-%m-%d %H:%M:%S")[:-3])
106     et=datetime.datetime(*time.strptime(etime,"%Y-%m-%d %H:%M:%S")[:-3])
107     dt=int(day)-bt.isoweekday()
108     if dt<0:
109         dt=dt+7
110     dbt=bt+datetime.timedelta(days=dt)
111     det=et+datetime.timedelta(days=dt)
112     btime=dbt.strftime("%Y-%m-%d %H:%M:%S")
113     etime=det.strftime("%Y-%m-%d %H:%M:%S")
114     return reserv("keyevery",keyword,chtxt,btime,etime,deltatime,opt,"7")
115 def reserv(type,keyword,chtxt,btime,etime,deltatime,opt,deltaday):
116     MaxT=2
117     MaxS=2
118     tsnum=database.count_schedule_rectime(btime,etime)
119     MaxT=MaxT-tsnum[0]
120     MaxS=MaxS-tsnum[1]
121     bctype=""
122     rett=""
123     bctypegetdb=database.select_by_chtxt_chdata(chtxt)
124     for bctypet,ontvt,chtxtt,cht,cscht,updatetimet in bctypegetdb:
125         bctype=bctypet
126     if (type=="rec") or (type=="res") or (type=="key") or (type=="keyevery"):
127         if bctype.find("cs")>-1:
128             MaxS=MaxS-1
129         elif bctype.find("bs")>-1:
130             MaxS=MaxS-1
131         elif bctype.find("te")>-1:
132             MaxT=MaxT-1
133     if MaxS>-1 and MaxT>-1:
134         database.add_rectime(type=type,chtxt=chtxt,title=keyword,btime=btime,etime=etime,deltatime=deltatime,deltaday=deltaday,opt=opt)
135     else:
136         rett="over"
137     return rett
138 def change_reserv(id,type,keyword,chtxt,btime,etime,deltatime,opt,deltaday):
139     """
140     idはテキスト
141     """
142     MaxT=2
143     MaxS=2
144     tsnum=database.count_schedule_rectime(btime,etime)
145     MaxT=MaxT-tsnum[0]
146     MaxS=MaxS-tsnum[1]
147     bctype=""
148     rett=""
149     for dl in database.select_by_chtxt_chdata(chtxt):
150         bctype=dl[0]
151     if (type=="rec") or (type=="res") or (type=="key") or (type=="keyevery"):
152         if bctype.find("cs")>-1:
153             MaxS=MaxS-1
154         elif bctype.find("bs")>-1:
155             MaxS=MaxS-1
156         elif bctype.find("te")>-1:
157             MaxT=MaxT-1
158     if MaxS>-1 and MaxT>-1:
159         database.del_by_id_rectime(id)
160         database.add_rectime(type=type, chtxt=chtxt, title=keyword, btime=btime, etime=etime, deltatime=deltatime, deltaday=deltaday, opt=opt)
161     else:
162         rett="over"
163     return rett
164 def station2chtxt(station):
165     ret=""
166     for bctype, ontv, chtxt, ch, csch ,updatetime in database.select_by_station_chdata(station):
167         ret=chtxt
168     return ret
169 def station_name2chtxt(station):
170     ret=""
171     for bctype, ontv, chtxt, ch, csch ,updatetime in database.select_by_station_name_chdata(station):
172         ret=chtxt
173     return ret
174 def readHtmlSrcSimple():
175     f = open(path+'rswi.htm')
176     ret=f.read()
177     f.close()
178     return ret
179 def readHtmlEdit():
180     f = open(path+'rswi_edit.htm')
181     ret=f.read()
182     f.close()
183     return ret
184
185 def readRecFinisSimple():
186     f = open(path+'fin.htm')
187     ret=f.read()
188     f.close()
189     return ret
190 def readRecFinisOver():
191     f = open(path+'finover.htm')
192     ret=f.read()
193     f.close()
194     return ret
195 def readRecSchedule():
196     f = open(path+'schedule.htm')
197     ret=f.read()
198     f.close()
199     return ret
200 dbpath=path+"ch.db"
201 database=getdb()
202 f=cgi.FieldStorage()
203
204 btime=""
205 etime=""
206 title=""
207 chtxt=""
208 type="res"
209 bt=""
210 getRecDate()
211 if f.getfirst('mode')=="schedule":
212     getRecDate()
213
214 ###ここからiEPG用の読み出し
215 if f.getfirst('station_name'):
216     station=f.getfirst('station_name')
217     chtxt=station_name2chtxt(station)
218 if f.getfirst('station'):
219     station=f.getfirst('station')
220     chtxt=station2chtxt(station)
221 ###ここから外部からの読み出しの場合
222 if f.getfirst('type'):
223     type=f.getfirst('type')
224 if f.getfirst('title'):
225     title=f.getfirst('title')
226 if f.getfirst('chtxt'):
227     chtxt=f.getfirst('chtxt')
228 if f.getfirst('btime'):
229     btime=f.getfirst('btime')
230     #bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
231     bt=datetime.datetime(*time.strptime(btime,"%Y-%m-%d %H:%M:%S")[:-3])
232 if f.getfirst('etime'):
233     etime=f.getfirst('etime')
234     #et=datetime.datetime.strptime(etime,"%Y-%m-%d %H:%M:%S")
235     et=datetime.datetime(*time.strptime(etime,"%Y-%m-%d %H:%M:%S")[:-3])
236     if bt !="":
237         delt=et-bt
238         dt=delt.days*24*60*60+delt.seconds
239         if dt<0:
240             dd=datetime.timedelta(days=1)
241             et=et+dd
242             etime=et.strftime("%Y-%m-%d %H:%M:%S")
243         if dt<-1*24*60*60:
244             d1=datetime.datetime(bt.year,0,0)
245             d2=datetime.datetime(bt.year+1,0,0)
246             dd=d2-d1
247             et=et+dd
248             etime=et.strftime("%Y-%m-%d %H:%M:%S")
249         
250 size="S"
251 if f.getfirst('size'):
252     size=f.getfirst('size')
253 opts=""
254 if f.getfirst('opts'):
255     opts=f.getfirst('opts')
256 deltahour=""
257 if f.getfirst('deltahour',""):
258     deltahour=f.getfirst('deltahour',"")
259 deltaday=""
260 if f.getfirst('deltaday',""):
261     deltaday=f.getfirst('deltaday',"")
262 exect=""
263 if f.getfirst('exec',""):
264     exect=f.getfirst('exec',"")
265
266
267 htmdate= readHtmlSrcSimple()
268 htmdate=htmdate.replace("<!--text_for_replace_chtxt_input//-->",getchtxt())
269 htmdate=htmdate.replace("<!--btime-value//-->",btime)
270 htmdate=htmdate.replace("<!--etime-value//-->",etime)
271 htmdate=htmdate.replace("<!--type-value//-->",type)
272 htmdate=htmdate.replace("<!--ch-value//-->",chtxt)
273 htmdate=htmdate.replace("<!--title-value//-->",title)
274 htmdate=htmdate.replace("<!--size-value//-->",size)
275 htmdate=htmdate.replace("<!--opts-value//-->",opts)
276
277
278 #ここから曜日検索の設定
279 if f.getfirst('type')=="keyday":
280     rett=""
281     dayt=f.getfirst('day_Mon')
282     if dayt:
283         rett=rett+reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
284     dayt=f.getfirst('day_Tue')
285     if dayt:
286         rett=rett+reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
287     dayt=f.getfirst('day_Wed')
288     if dayt:
289         rett=rett+reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
290     dayt=f.getfirst('day_Thu')
291     if dayt:
292         rett=rett+reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
293     dayt=f.getfirst('day_Fri')
294     if dayt:
295         rett=rett+reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
296     dayt=f.getfirst('day_Sat')
297     if dayt:
298         rett=rett+reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
299     dayt=f.getfirst('day_Sun')
300     if dayt:
301         rett=rett+reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
302
303     if rett=="":
304         htmdate=readRecFinisSimple()
305     else:
306         htmdate=readRecFinisOver()
307     chtxt=""
308     exect=""
309
310     
311
312 if (chtxt != "")and(title != "")and(btime!="")and(etime!="")and(opts!="")and(exect=="yes"):
313     restxt=reserv(type, title, chtxt, btime, etime, deltahour, opts, deltaday)
314     if restxt=="":
315         htmdate=readRecFinisSimple()
316     elif restxt=="over":
317         htmdate=readRecFinisOver()
318     exect=""
319 #
320 if (chtxt != "")and(title != "")and(btime!="")and(etime!="")and(opts!="")and(re.search('edit-exec:',exect)):
321     editnum=exect.replace("edit-exec:","")
322     #restxt=change_reserv(id, type, keyword, chtxt, btime, etime, deltatime, opt, deltaday)
323     restxt=change_reserv(editnum,type, title, chtxt, btime, etime, deltahour, opts, deltaday)
324     if restxt=="":
325         htmdate=readRecFinisSimple()
326     elif restxt=="over":
327         htmdate=readRecFinisOver()
328     exect=""
329 if exect=="schedule":
330     htmdate=readRecSchedule()
331 if re.search('edit:',exect):
332     editnum=exect.replace("edit:","")
333     htmdate= readHtmlEdit()
334     iddata=edit_date(editnum)
335     htmdate=htmdate.replace("<!--text_for_replace_chtxt_input//-->",getchtxt())
336     htmdate=htmdate.replace("<!--ch-value//-->",iddata['chtxt'])
337     htmdate=htmdate.replace("<!--btime-value//-->",iddata['btime'])
338     htmdate=htmdate.replace("<!--etime-value//-->",iddata['etime'])
339     htmdate=htmdate.replace("<!--type-value//-->",iddata['type'])
340     htmdate=htmdate.replace("<!--ch-value//-->",iddata['chtxt'])
341     htmdate=htmdate.replace("<!--title-value//-->",iddata['title'])
342     htmdate=htmdate.replace("<!--size-value//-->",size)
343     htmdate=htmdate.replace("<!--opts-value//-->",iddata["opt"])
344     htmdate=htmdate.replace("<!--exec-value//-->","edit-exec:"+editnum)
345 print "Content-Type: text/html\n"
346 print htmdate
347