OSDN Git Service

38a7325e2b530a21c7d62058890bbf2873dd258d
[rec10/rec10-git.git] / Rec10WEB / trunk / src / rec10web_dbMySQL.py
1 #!/usr/bin/python
2 # coding: UTF-8
3 # Rec10 TS Recording Tools
4 # Copyright (C) 2009 Yukikaze
5 import os
6 import MySQLdb
7 path = str(os.path.dirname(os.path.abspath(__file__))) + "/"
8 dbpath = path + "ch.db"
9 class DB_MySQL:
10     dbname = ""
11     dbhost = ""
12     dbusr = ""
13     dbpasswd = ""
14     dbport = 0
15     def __init__(self, dbname, user, passwd, host="localhost", port=3306):
16         self.dbname = dbname
17         self.dbhost = host
18         self.dbusr = user
19         self.dbpasswd = passwd
20         self.dbport = port
21     def connect_db(self):
22         """
23         dbへの接続
24         """
25         con = MySQLdb.connect(db=self.dbname, host=self.dbhost, port=self.dbport, user=self.dbusr, passwd=self.dbpasswd, charset="utf8")
26         cur = con.cursor()
27         cur.execute('set names utf8;')
28         return [con, cur]
29     def close_db(self, db):
30         db[1].close()
31         db[0].close()
32     def select_all_timeline(self):
33         db = self.connect_db()
34         recdata = []
35         dl = db[1].execute("SELECT id,type,chtxt,title,btime,etime,deltatime,deltaday,opt FROM timeline")
36         dls = db[1].fetchall()
37         for id, typet, chtxt, title, btime, etime, deltatime, deltaday, opt in dls:
38             ret = {}
39             ret['id'] = id
40             ret['type'] = typet
41             ret['chtxt'] = chtxt
42             ret['title'] = title
43             btime = btime.strftime("%Y-%m-%d %H:%M:%S")
44             etime = etime.strftime("%Y-%m-%d %H:%M:%S")
45             ret['btime'] = btime
46             ret['etime'] = etime
47             ret['opt'] = opt
48             ret['deltatime'] = ""
49             ret['deltaday'] = ""
50             if deltatime == None:
51                 deltatime = "3"
52             if deltaday == None:
53                 deltaday = "7"
54             if typet == 'key':
55                 ret['deltatime'] = deltatime
56             elif typet == 'keyevery':
57                 ret['deltatime'] = deltatime
58                 ret['deltaday'] = deltaday
59             recdata.append(ret)
60         self.close_db(db)
61         return recdata
62     def select_by_chtxt_timeline(self, chtxt):
63         db = self.connect_db()
64         recdata = []
65         dl = db[1].execute("SELECT type, chtxt, title, btime, etime, deltatime ,deltaday ,opt FROM timeline WHERE chtxt = %s ", (chtxt, ))
66         d = db[1].fetchall()
67         for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in d:
68             ret = {}
69             ret['type'] = typet
70             ret['chtxt'] = chtxt
71             ret['title'] = title
72             btime = btime.strftime("%Y-%m-%d %H:%M:%S")
73             etime = etime.strftime("%Y-%m-%d %H:%M:%S")
74             ret['btime'] = btime
75             ret['etime'] = etime
76             ret['opt'] = opt
77             if deltatime == None:
78                 deltatime = "3"
79             if deltaday == None:
80                 deltaday = "7"
81             if typet == 'key':
82                 ret['deltatime'] = deltatime
83             elif typet == 'keyevery':
84                 ret['deltatime'] = deltatime
85                 ret['deltaday'] = deltaday
86             recdata.append(ret)
87         self.close_db(db)
88         return recdata
89     def select_by_id_timeline(self, id):
90         db = self.connect_db()
91         recdata = []
92         dl = db[1].execute("SELECT type, chtxt, title, btime, etime, deltatime ,deltaday ,opt FROM timeline WHERE id = %s ", (id, ))
93         d = db[1].fetchall()
94         for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in d:
95             ret = {}
96             ret['type'] = typet
97             ret['chtxt'] = chtxt
98             ret['title'] = title
99             btime = btime.strftime("%Y-%m-%d %H:%M:%S")
100             etime = etime.strftime("%Y-%m-%d %H:%M:%S")
101             ret['btime'] = btime
102             ret['etime'] = etime
103             ret['opt'] = opt
104             if deltatime == None:
105                 deltatime = "3"
106             if deltaday == None:
107                 deltaday = "7"
108             if typet == 'key':
109                 ret['deltatime'] = deltatime
110             elif typet == 'keyevery':
111                 ret['deltatime'] = deltatime
112                 ret['deltaday'] = deltaday
113             recdata.append(ret)
114         self.close_db(db)
115         return recdata
116     def select_all_epg_ch(self):
117         db = self.connect_db()
118         ret = db[1].execute("SELECT bctype,ontv,chtxt,chname,ch,csch,updatetime FROM epg_ch")
119         ret = db[1].fetchall()
120         self.close_db(db)
121         return ret
122     def select_by_chtxt_epg_ch(self, chtxt):
123         db = self.connect_db()
124         ret = db[1].execute("SELECT bctype,ontv,chtxt,ch,csch,updatetime FROM epg_ch WHERE chtxt=%s", (chtxt, ))
125         ret = db[1].fetchall()
126         self.close_db(db)
127         return ret
128     def add_timeline(self, type="", chtxt="", title="", btime="", etime="", deltatime="", deltaday="", opt=""):
129         db = self.connect_db()
130         db[1].execute('INSERT IGNORE INTO timeline (type,chtxt,title,btime,etime,deltatime,deltaday,opt) values (%s,%s,%s,%s,%s,%s,%s,%s)', (type, chtxt, title, btime, etime, deltatime, deltaday, opt))
131         #db.commit()
132         self.close_db(db)
133     def schedule_timeline(self, btime, etime):
134         db = self.connect_db()
135         dbexe = "SELECT type,epg_ch.bctype,timeline.chtxt,timeline.title,timeline.btime,timeline.etime FROM timeline INNER JOIN epg_ch ON timeline.chtxt=epg_ch.chtxt"
136         dbexe = dbexe + " WHERE NOT( ( timeline.etime <= %s ) OR ( timeline.btime >= %s ) )"
137         db[1].execute(dbexe, (btime, etime))
138         rets = []
139         for typet, bctypet, chtxtt, titlet, btimet, etimet in db[1].fetchall():
140             ret = [typet, bctypet, chtxtt, titlet, btimet.strftime("%Y-%m-%d %H:%M:%S"), etimet.strftime("%Y-%m-%d %H:%M:%S")]
141             rets.append(ret)
142         self.close_db(db)
143         return rets
144     def count_schedule_timeline(self, btime, etime):
145         """
146         count rectasknum
147         return [te num,bs/cs num]
148         """
149         db = self.connect_db()
150         dbexe = "SELECT type,epg_ch.bctype,timeline.chtxt,title FROM timeline INNER JOIN epg_ch ON timeline.chtxt=epg_ch.chtxt"
151         dbexe = dbexe + " WHERE NOT( ( timeline.etime <= %s ) OR ( timeline.btime >= %s ) )"
152         Srec = 0
153         Trec = 0
154         db[1].execute(dbexe, (btime, etime))
155         for typet, bctypet, chtxtt, titlet in db[1].fetchall():
156             if (typet == "reserve_flexible") or (typet == "reserve_fixed") or (typet == "search_today") or (typet == "search_everyday"):
157                 if bctypet.find("cs") > -1:
158                     Srec = Srec + 1
159                 elif bctypet.find("bs") > -1:
160                     Srec = Srec + 1
161                 elif bctypet.find("te") > -1:
162                     Trec = Trec + 1
163         self.close_db(db)
164         return [Trec, Srec]
165     def del_by_id_timeline(self, id):
166         db = self.connect_db()
167         db[1].execute('DELETE FROM timeline WHERE id=' + id)
168         self.close_db(db)
169     def new_iepg(self):
170         db = self.connect_db()
171         try:
172             db[1].execute("CREATE TABLE in_iepg \
173             (\
174             id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,\
175             station VARCHAR(200) NOT NULL,\
176             chtxt VARCHAR(30) NOT NULL\
177             )")
178         except:
179             ""
180         self.close_db(db)
181     def add_iepg(self, station, chtxt):
182         db = self.connect_db()
183         db[1].execute('INSERT IGNORE INTO in_iepg (station,chtxt) VALUES (%s,%s)', (station, chtxt))
184         self.close_db(db)
185     def del_by_id_iepg(self, num):
186         db = self.connect_db()
187         db[1].execute("DELETE FROM in_iepg \
188         WHERE id=%s", \
189                       (num, ))
190         self.close_db(db)
191     def select_by_chtxt_iepg(self, chtxt):
192         db = self.connect_db()
193         db[1].execute("\
194         SELECT \
195         id,station,chtxt \
196         FROM in_iepg \
197         WHERE chtxt=%s "\
198                       , (chtxt, ))
199         retall = db[1].fetchall()
200         self.close_db(db)
201         rets = []
202         if len(retall) > 0:
203             for ret in retall:
204                 a = list(ret)
205                 a[0] = str(ret[0])
206                 rets.append(a)
207         return rets
208     def select_by_station_iepg(self, station):
209         db = self.connect_db()
210         db[1].execute("\
211         SELECT \
212         id,station,chtxt \
213         FROM in_iepg \
214         WHERE station=%s "\
215                       , (station, ))
216         retall = db[1].fetchall()
217         self.close_db(db)
218         rets = []
219         if len(retall) > 0:
220             for ret in retall:
221                 a = list(ret)
222                 a[0] = str(ret[0])
223                 rets.append(a)
224         return rets
225     def select_all_iepg(self):
226         db = self.connect_db()
227         db[1].execute("\
228         SELECT \
229         id,station,chtxt \
230         FROM in_iepg "\
231         )
232         retall = db[1].fetchall()
233         self.close_db(db)
234         rets = []
235         if len(retall) > 0:
236             for ret in retall:
237                 a = list(ret)
238                 a[0] = str(ret[0])
239                 rets.append(a)
240         return rets