1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#-*- coding: UTF-8 -*-
'''
create a connection pool
'''
from
DBUtils
import
PooledDB
import
MySQLdb
import
string
maxconn
=
30
#最大连接数
mincached
=
10
#最小空闲连接
maxcached
=
20
#最大空闲连接
maxshared
=
30
#最大共享连接
connstring
=
"root#root#127.0.0.1#3307#pystock#utf8"
#数据库地址
dbtype
=
"mysql"
#选择mysql作为存储数据库
def
createConnectionPool(connstring, dbtype):
db_conn
=
connstring.split(
"#"
);
if
dbtype
=
=
'mysql'
:
try
:
pool
=
PooledDB.PooledDB(MySQLdb, user
=
db_conn[
0
],passwd
=
db_conn[
1
],host
=
db_conn[
2
],port
=
string.atoi(db_conn[
3
]),db
=
db_conn[
4
],charset
=
db_conn[
5
], mincached
=
mincached,maxcached
=
maxcached,maxshared
=
maxshared,maxconnections
=
maxconn)
return
pool
except
Exception, e:
raise
Exception,
'conn datasource Excepts,%s!!!(%s).'
%
(db_conn[
2
],
str
(e))
return
None
pool
=
createConnectionPool(connstring, dbtype)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
#-*- coding: UTF-8 -*-
'''
Created on 2015-3-13
@author: Casey
'''
import
MySQLdb
from
stockmining.stocks.setting
import
LoggerFactory
import
connectionpool
class
DBOperator(
object
):
def
__init__(
self
):
self
.logger
=
LoggerFactory.getLogger(
'DBOperator'
)
#self.conn = None
def
connDB(
self
):
#单连接
#self.conn=MySQLdb.connect(host="127.0.0.1",user="root",passwd="root",db="pystock",port=3307,charset="utf8")
#连接池中获取连接
self
.conn
=
connectionpool.pool.connection()
return
self
.conn
def
closeDB(
self
):
if
(
self
.conn !
=
None
):
self
.conn.close()
def
insertIntoDB(
self
, table,
dict
):
try
:
if
(
self
.conn !
=
None
):
cursor
=
self
.conn.cursor()
else
:
raise
MySQLdb.Error(
'No connection'
)
sql
=
"insert into "
+
table
+
"("
param
=
[]
for
key
in
dict
:
sql
+
=
key
+
','
param.append(
dict
.get(key))
param
=
tuple
(param)
sql
=
sql[:
-
1
]
+
") values("
for
i
in
range
(
len
(
dict
)):
sql
+
=
"%s,"
sql
=
sql[:
-
1
]
+
")"
self
.logger.debug(sql
%
param)
n
=
cursor.execute(sql, param)
self
.conn.commit()
cursor.close()
except
MySQLdb.Error,e:
self
.logger.error(
"Mysql Error %d: %s"
%
(e.args[
0
], e.args[
1
]))
self
.conn.rollback()
def
execute(
self
, sql):
try
:
if
(
self
.conn !
=
None
):
cursor
=
self
.conn.cursor()
else
:
raise
MySQLdb.Error(
'No connection'
)
n
=
cursor.execute(sql)
return
n
except
MySQLdb.Error,e:
self
.logger.error(
"Mysql Error %d: %s"
%
(e.args[
0
], e.args[
1
]))
def
findBySQL(
self
, sql):
try
:
if
(
self
.conn !
=
None
):
cursor
=
self
.conn.cursor()
else
:
raise
MySQLdb.Error(
'No connection'
)
cursor.execute(sql)
rows
=
cursor.fetchall()
return
rows
except
MySQLdb.Error,e:
self
.logger.error(
"Mysql Error %d: %s"
%
(e.args[
0
], e.args[
1
]))
def
findByCondition(
self
, table, fields, wheres):
try
:
if
(
self
.conn !
=
None
):
cursor
=
self
.conn.cursor()
else
:
raise
MySQLdb.Error(
'No connection'
)
sql
=
"select "
for
field
in
fields:
sql
+
=
field
+
","
sql
=
sql[:
-
1
]
+
" from "
+
table
+
" where "
param
=
[]
values
=
''
for
where
in
wheres:
sql
+
=
where.key
+
"='%s' and "
param.append(where.value)
param
=
tuple
(param)
self
.logger.debug(sql)
n
=
cursor.execute(sql[:
-
5
]
%
param)
self
.conn.commit()
cursor.close()
except
MySQLdb.Error,e:
self
.logger.error(
"Mysql Error %d: %s"
%
(e.args[
0
], e.args[
1
]))
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
#-*- coding: UTF-8 -*-
'''
Created on 2015-3-11
@author: Casey
'''
import
logging
import
time
'''
传入名称
'''
def
getLogger(name):
now
=
time.strftime(
'%Y-%m-%d %H:%M:%S'
)
logging.basicConfig(
level
=
logging.DEBUG,
format
=
now
+
" : "
+
name
+
' LINE %(lineno)-4d %(levelname)-8s %(message)s'
,
datefmt
=
'%m-%d %H:%M'
,
filename
=
"d:\\stocks\stock.log"
,
filemode
=
'w'
);
console
=
logging.StreamHandler();
console.setLevel(logging.DEBUG);
formatter
=
logging.Formatter(name
+
': LINE %(lineno)-4d : %(levelname)-8s %(message)s'
);
console.setFormatter(formatter);
logger
=
logging.getLogger(name)
logger.addHandler(console);
return
logger
if
__name__
=
=
'__main__'
:
getLogger(
"www"
).debug(
"www"
)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
#-*- coding: UTF-8 -*-
'''
Created on 2015-3-1
@author: Casey
'''
import
urllib
import
re
import
sys
from
setting
import
params
import
urllib2
from
db
import
*
dbOperator
=
DBOperator()
table
=
"stock_quote_yahoo"
'''查找指定日期股票流量'''
def
isStockExitsInDate(table, stock, date):
sql
=
"select * from "
+
table
+
" where code = '%d' and date='%s'"
%
(stock, date)
n
=
dbOperator.execute(sql)
if
n >
=
1
:
return
True
def
getHistoryStockData(code, dataurl):
try
:
r
=
urllib2.Request(dataurl)
try
:
stdout
=
urllib2.urlopen(r, data
=
None
, timeout
=
3
)
except
Exception,e:
print
">>>>>> Exception: "
+
str
(e)
return
None
stdoutInfo
=
stdout.read().decode(params.codingtype).encode(
'utf-8'
)
tempData
=
stdoutInfo.replace(
'"'
, '')
stockQuotes
=
[]
if
tempData.find(
'404'
) !
=
-
1
: stockQuotes
=
tempData.split(
"\n"
)
stockDetail
=
{}
for
stockQuote
in
stockQuotes:
stockInfo
=
stockQuote.split(
","
)
if
len
(stockInfo)
=
=
7
and
stockInfo[
0
]!
=
'Date'
:
if
not
isStockExitsInDate(table, code, stockInfo[
0
]):
stockDetail[
"date"
]
=
stockInfo[
0
]
stockDetail[
"open"
]
=
stockInfo[
1
]
#开盘
stockDetail[
"high"
]
=
stockInfo[
2
]
#最高
stockDetail[
"low"
]
=
stockInfo[
3
]
#最低
stockDetail[
"close"
]
=
stockInfo[
4
]
#收盘
stockDetail[
"volume"
]
=
stockInfo[
5
]
#交易量
stockDetail[
"adj_close"
]
=
stockInfo[
6
]
#收盘adj价格
stockDetail[
"code"
]
=
code
#代码
dbOperator.insertIntoDB(table, stockDetail)
result
=
tempData
except
Exception as err:
print
">>>>>> Exception: "
+
str
(dataurl)
+
" "
+
str
(err)
else
:
return
result
finally
:
None
def
get_stock_history():
#沪市2005-2015历史数据
for
code
in
range
(
601999
,
602100
):
dataUrl
=
"http://ichart.yahoo.com/table.csv?s=%d.SS&a=01&b=01&c=2005&d=01&e=01&f=2015&g=d"
%
code
print
getHistoryStockData(code, dataUrl )
#深市2005-2015历史数据
for
code
in
range
(
1
,
1999
):
dataUrl
=
"http://ichart.yahoo.com/table.csv?s=%06d.SZ&a=01&b=01&c=2005&d=01&e=01&f=2015&g=d"
%
code
print
getHistoryStockData(code, dataUrl)
#中小板股票
for
code
in
range
(
2001
,
2999
):
dataUrl
=
"http://ichart.yahoo.com/table.csv?s=%06d.SZ&a=01&b=01&c=2005&d=01&e=01&f=2015&g=d"
%
code
print
getHistoryStockData(code, dataUrl)
#创业板股票
for
code
in
range
(
300001
,
300400
):
dataUrl
=
"http://ichart.yahoo.com/table.csv?s=%d.SZ&a=01&b=01&c=2005&d=01&e=01&f=2015&g=d"
%
code
print
getHistoryStockData(code, dataUrl)
def
main():
"main function"
dbOperator.connDB()
get_stock_history()
dbOperator.closeDB()
if
__name__
=
=
'__main__'
:
main()
|
v_sz000001="51~平安银行~000001~11.27~11.27~11.30~316703~151512~165192~11.27~93~11.26~ 4352~11.25~4996~11.24~1037~11.23~1801~11.28~1181~11.29~2108~11.30~1075~11.31~1592~11.32~ 1118~15:00:24/11.27/3146/S/3545407/17948|14:56:59/11.26/15/S/16890/17787| 14:56:56/11.25/404/S/454693/17783|14:56:54/11.26/173/B/194674/17780|14:56:51 /11.26/306/B/344526/17777|14:56:47/11.26/16/B/18016/17773~ 20151029150142~0.00~0.00~11.36~11.25~ 11.26/313557/354285045~ 316703~35783~0.27~7.38~~11.36~11.25~0.98~1330.32~1612.59~1.03~12.40~10.14~";
v_ff_sz000001="sz000001~21162.20~24136.40~-2974.20~-8.31~14620.87~11646.65~2974.22~ 8.31~35783.07~261502.0~261158.3~平安银行~20151029~20151028^37054.20^39358.20~ 20151027^39713.50^42230.70~20151026^82000.80^83689.90~20151023^81571.30^71743.10";
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|