quartz包学习笔记2:dataAPI
2017-09-10 16:01
357 查看
1、httplib是一个底层的网络模块,可以连接到网络上获取信息,更高级的有urllib,requests,bs4等;
2、traceback是追踪异常的用法。常见用法:
import traceback
try:
do something
except:
print traceback.print_exc()
log.error(traceback.format_exc())
在python中,标准异常有很多:
1. NameError:尝试访问一个未申明的变量
2. ZeroDivisionError:除数为0
3. SyntaxError:语法错误
4. IndexError:索引超出范围
5. KeyError:字典关键字不存在
6. IOError:输入输出错误
7. AttributeError:访问未知对象属性
8. ValueError:数值错误
9. TypeError:类型错误
10. AssertionError:断言错误
11. Exception:常规错误的基类
3、ssl用法,在浏览器中访问该网站时会弹出证书不受信任,但是忽略仍可继续访问
但当使用Python登录时就会抛出_ssl.c:645错误,不能读取页面。 写一个方法直接信任所有Https的安全证书
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
4、剩下的就是一个api类,获取数据,转换数据的函数。
import httplib
import traceback
import urllib
import ssl
import pandas as pd
HTTP_OK = 200
HTTP_AUTHORIZATION_ERROR = 401
ssl._create_default_https_context = ssl._create_unverified_context
class Api:
domain = 'api.wmcloud.com'
port = 443
token = '7cd1e7bca0ec4c91aa2bdb09d96dc5497ce01aad745b510435462c81198a8638'
httpClient = None
def __init__( self ):
self.httpClient = httplib.HTTPSConnection(self.domain, self.port)
def __del__( self ):
if self.httpClient is not None:
self.httpClient.close()
def encodepath(self, path):
#转换参数的编码
start=0
n=len(path)
re=''
i=path.find('=',start)
while i!=-1 :
re+=path[start:i+1]
start=i+1
i=path.find('&',start)
if(i>=0):
for j in range(start,i):
if(path[j]>'~'):
re+=urllib.quote(path[j])
else:
re+=path[j]
re+='&'
start=i+1
else:
for j in range(start,n):
if(path[j]>'~'):
re+=urllib.quote(path[j])
else:
re+=path[j]
start=n
i=path.find('=',start)
return re
def init(self, token):
self.token=token
def getData(self, path):
result = None
path='/data'+path
path=self.encodepath(path)
#print path
try:
#set http header here
self.httpClient.request('GET', path, headers = {"Authorization": "Bearer " + self.token})
#make request
response = self.httpClient.getresponse()
#read result
if response.status == HTTP_OK:
result = response.read()
else:
result = response.read()
return response.status, result
except Exception, e:
#traceback.print_exc()
raise e
return -1, result
def getMktEqud(self,secID,ticker,tradeDate,beginDate,endDate):
url='/api/market/getMktEqud.csv?field=&beginDate=%s&endDate=%s&secID=%s&ticker=%s&tradeDate=%s'%(beginDate,endDate,secID,ticker,tradeDate)
code, result = self.getData(url)
if(code==200):
#print len(result)
while len(result)==0:
pass
result=result.split('\n')
colume=result[0].split(',')#获取字段名称
result.pop(0)
result.pop(-1)
temp=[]
for line in result:
temp1=line.split(',')
temp_line=[]
#print temp1
for index,i in enumerate(temp1):
if index<5:
temp_line.append(i.strip('\"').decode('GB18030').encode('utf-8'))
elif index>=5:
while i=='':
i='0'
temp_line.append(float(i.strip('\"').decode('GB18030').encode('utf-8')))
temp.append(temp_line)
return pd.DataFrame(temp,columns=colume)
else:
print code
def getTradeCal(self,exchangeCD,beginDate,endDate,field):
url='/api/master/getTradeCal.csv?field=%s&exchangeCD=%s&beginDate=%s&endDate=%s'%(field,exchangeCD,beginDate,endDate)
code, result = self.getData(url)
if(code==200):
return csv_to_pandas(result)
else:
print code
def csv_to_pandas(data):
data=data.split('\n')
#print data
#获取字段名称
colume=data[0].split(',')
data.pop(0)
data.pop(-1)
temp=[]
for line in data:
temp1=line.split(',')
temp_line=[]
for i in temp1:
temp_line.append(i.strip('\"').decode('GB18030').encode('utf-8'))
temp.append(temp_line)
return pd.DataFrame(temp,columns=colume)
def change_str(char):
while char=='':
char=='0'
try:
temp=float(char)
if str(temp) == char:
return float(char)
else:
return int(char)
except:
return char
if __name__ == '__main__':
api=Api()
res=api.getTradeCal('XSHG','','','calendarDate')
res=res[res['calendarDate']>='2006-01-01']
#res=api.getMktEqud('', '', '20120104', '', '')
print res
#print res[res.secID=='601288.XSHG']
2、traceback是追踪异常的用法。常见用法:
import traceback
try:
do something
except:
print traceback.print_exc()
log.error(traceback.format_exc())
在python中,标准异常有很多:
1. NameError:尝试访问一个未申明的变量
2. ZeroDivisionError:除数为0
3. SyntaxError:语法错误
4. IndexError:索引超出范围
5. KeyError:字典关键字不存在
6. IOError:输入输出错误
7. AttributeError:访问未知对象属性
8. ValueError:数值错误
9. TypeError:类型错误
10. AssertionError:断言错误
11. Exception:常规错误的基类
3、ssl用法,在浏览器中访问该网站时会弹出证书不受信任,但是忽略仍可继续访问
但当使用Python登录时就会抛出_ssl.c:645错误,不能读取页面。 写一个方法直接信任所有Https的安全证书
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
4、剩下的就是一个api类,获取数据,转换数据的函数。
import httplib
import traceback
import urllib
import ssl
import pandas as pd
HTTP_OK = 200
HTTP_AUTHORIZATION_ERROR = 401
ssl._create_default_https_context = ssl._create_unverified_context
class Api:
domain = 'api.wmcloud.com'
port = 443
token = '7cd1e7bca0ec4c91aa2bdb09d96dc5497ce01aad745b510435462c81198a8638'
httpClient = None
def __init__( self ):
self.httpClient = httplib.HTTPSConnection(self.domain, self.port)
def __del__( self ):
if self.httpClient is not None:
self.httpClient.close()
def encodepath(self, path):
#转换参数的编码
start=0
n=len(path)
re=''
i=path.find('=',start)
while i!=-1 :
re+=path[start:i+1]
start=i+1
i=path.find('&',start)
if(i>=0):
for j in range(start,i):
if(path[j]>'~'):
re+=urllib.quote(path[j])
else:
re+=path[j]
re+='&'
start=i+1
else:
for j in range(start,n):
if(path[j]>'~'):
re+=urllib.quote(path[j])
else:
re+=path[j]
start=n
i=path.find('=',start)
return re
def init(self, token):
self.token=token
def getData(self, path):
result = None
path='/data'+path
path=self.encodepath(path)
#print path
try:
#set http header here
self.httpClient.request('GET', path, headers = {"Authorization": "Bearer " + self.token})
#make request
response = self.httpClient.getresponse()
#read result
if response.status == HTTP_OK:
result = response.read()
else:
result = response.read()
return response.status, result
except Exception, e:
#traceback.print_exc()
raise e
return -1, result
def getMktEqud(self,secID,ticker,tradeDate,beginDate,endDate):
url='/api/market/getMktEqud.csv?field=&beginDate=%s&endDate=%s&secID=%s&ticker=%s&tradeDate=%s'%(beginDate,endDate,secID,ticker,tradeDate)
code, result = self.getData(url)
if(code==200):
#print len(result)
while len(result)==0:
pass
result=result.split('\n')
colume=result[0].split(',')#获取字段名称
result.pop(0)
result.pop(-1)
temp=[]
for line in result:
temp1=line.split(',')
temp_line=[]
#print temp1
for index,i in enumerate(temp1):
if index<5:
temp_line.append(i.strip('\"').decode('GB18030').encode('utf-8'))
elif index>=5:
while i=='':
i='0'
temp_line.append(float(i.strip('\"').decode('GB18030').encode('utf-8')))
temp.append(temp_line)
return pd.DataFrame(temp,columns=colume)
else:
print code
def getTradeCal(self,exchangeCD,beginDate,endDate,field):
url='/api/master/getTradeCal.csv?field=%s&exchangeCD=%s&beginDate=%s&endDate=%s'%(field,exchangeCD,beginDate,endDate)
code, result = self.getData(url)
if(code==200):
return csv_to_pandas(result)
else:
print code
def csv_to_pandas(data):
data=data.split('\n')
#print data
#获取字段名称
colume=data[0].split(',')
data.pop(0)
data.pop(-1)
temp=[]
for line in data:
temp1=line.split(',')
temp_line=[]
for i in temp1:
temp_line.append(i.strip('\"').decode('GB18030').encode('utf-8'))
temp.append(temp_line)
return pd.DataFrame(temp,columns=colume)
def change_str(char):
while char=='':
char=='0'
try:
temp=float(char)
if str(temp) == char:
return float(char)
else:
return int(char)
except:
return char
if __name__ == '__main__':
api=Api()
res=api.getTradeCal('XSHG','','','calendarDate')
res=res[res['calendarDate']>='2006-01-01']
#res=api.getMktEqud('', '', '20120104', '', '')
print res
#print res[res.secID=='601288.XSHG']
相关文章推荐
- 【NDN实验】Consumer-Producer API for Named Data Networking 学习笔记
- Quartz 2.2.1学习笔记 (二) Jobs、JobDetail、JobDataMap
- Quartz 2.2.1学习笔记 (二) Jobs、JobDetail、JobDataMap
- learning jQuery 学习笔记十五(+jQuery 1.4.1 API)-- AJAX----load(url, [data], [callback])
- Quartz 2.2.1学习笔记 (二) Jobs、JobDetail、JobDataMap
- Android(java)学习笔记143:android提供打开各种文件的API接口:setDataAndType
- J2ME学习笔记(四)-----用特定的MIDP API开发MIDlets
- 学习笔记-杂(网络、C++、API、工具==)
- Rest API 学习笔记 --- 深入理解 Restful API 架构
- Spring Data JPA,基础学习笔记.
- ArcGIS API for Silverlight 学习笔记
- Cassandra学习笔记-基本特性与API操作
- Linux&C语言文件学习笔记(三):文件I/O与系统API
- ArcGIS API for JavaScript 4.2学习笔记[21] 对3D场景上的3D要素进行点击查询【Query类学习】
- Pheonix学习笔记 --- Blk Data Loading,Pheonix导如CSV文件
- 【Todo】Java学习笔记 100==100 & Reflection API & Optional类详解 & DIP、IoC、DI & token/cookie/session管理会话方式
- Hadoop 学习笔记:java.lang.NoSuchMethodException: DataJoin$TaggedWritable.<init>()
- [shiro学习笔记]第四节 使用源代码生成Shiro的CHM格式的API文档
- Data Types in the Kernel <LDD3 学习笔记>
- quartz学习笔记5:update