股票webservice历史数据
⑴ 数据通过webservice连接后,怎么解析或得的数据
public static CenterInfo[] getWorkOn(SoapObject obj){
CenterInfo[] info = null;
try{
if(obj.getPropertyCount() > 1){//有中心信息
int len = obj.getPropertyCount() - 1;
info = new CenterInfo[len];
for(int i = 0;i < len;i++){
SoapObject child = (SoapObject)obj.getProperty(i + 1);
String idStr = child.getPropertyAsString(0);
String content = child.getPropertyAsString(1);
String sender = child.getPropertyAsString(2);
String typeStr = child.getPropertyAsString(3);
String uId = child.getPropertyAsString(4);
String time = child.getPropertyAsString(5);//时间
long id = Long.parseLong(idStr);
int type = Integer.parseInt(typeStr);
info[i] = new CenterInfo(id,content,sender,type,uId,time);
}
}
}catch(Exception e){
e.printStackTrace();
}
return info;
}
⑵ webservice发展过程
WEB服务的发展时间:2009-08-31 WEB服务的发展 Web服务似乎是一个崭新的名词,现在去浏览各大主流技术论坛,无一不在关注Web服务的发展。但是到底什么是Web服务呢?Yankee集团高级分析家加德纳认为,Web服务通常被定义为是自我遏制、自我描述的标准组件能通过Web实现出版、查找和调用。他们不仅能通过互联网完成离散性的商务功能,还能为多种形式的程序、数据和中间件之间的通信建立标准方法。Web服务不是真正的转换技术。虽然可以说他们有革新潜力,但适用就是发展。较以往,Web服务将会更加具有广泛的协同性、可控性和共享性。过去,平台与应用之间相互依从。而现在,Web服务已经与两者相脱离,不管是在什么样的平台之下,都能使应用软件存在于自己的平台上,并能互相操作。 由于Web服务是IT框架的一部分,对于终端用户和大多数部门来说,他们是看不见的。门户网站在后端使用Web服务进行信息综合时,也是在使用Web服务。对于大多数人来说,Web服务是一种幕后技术。虽然他们提供了很多应用,但大多数用户并不关心或根本不知道这些应用的背后是什么。然而,用户经验是悄然变化的,因为由于客户与Web服务商之间的联系更加宽松,好的Web服务构架能提供更加可靠的应用经验。 大多数测试Web服务或将他们做成产品的企业还是将他们的Web服务框架置于防火墙后面来执行,并作为一种低成本的专利集成技术而成为企业的择优选择。比如,一个需要给银行客户提供信息的网站,网站有不同的产品,客户就可以通过Web服务和底层系统来获得信息。Web服务在后端集成上的作用很大。公司将使用Web服务来将内部独立的应用程序和运行团体相链接,或者将多频道的前端服务,如Web、手机和声音与一整套共享的后端服务相链接。 Web服务的另一阻碍将是确保组织者和网络的可靠性。企业需要给开放网络建立一个强大和可靠的异步信息标准。其中之一就是集中起来,将商业元素进行可靠控制。 Web服务发展的另一关键论战就是Java .NET的纷争。Java与.NET之间的竞争与Web服务只存在间接的重要性。大多数企业都拥有Java 与.NET技术,而WS-Interoperability(Web服务协同性)标准正在尽力促进他们之间的协同性。但他们还是会作为Web服务的竞争性开发工具和运行环境。哪一种技术能更容易建立Web服务和或更能集成Web服务呢将会影响企业对这两种技术的选择。微软在使用的方便性和工作效率方面都取得了更多的成功,这是很重要的。
⑶ 如何编程从免费股票软件中提取实时数据
自己写程序的话,一种方法是从已提供的信息源,例如webservice获取数据。还有种办法就是去连接提供即时信息的网页硬解析。
代码举例如下:
Created on Thu Jul 23 09:17:27 2015
@author: jet
"""
DAY_PRICE_COLS = ['date', 'open', 'high', 'close', 'low', 'volume',
'chg', '%chg', 'ma5', 'ma10', 'ma20',
'vma5', 'vma10', 'vma20', 'turnover']
DAY_PRICE_URL = '%sapi.finance.%s/%s/?code=%s&type=last'
INDEX_KEY = ['SH', 'SZ', 'HS300', 'SZ50', 'GEB', 'SMEB']
INDEX_LIST = {'SH': 'sh000001', 'SZ': 'sz399001', 'HS300': 'sz399300',
'SZ50': 'sh000016', 'GEB': 'sz399006', 'SMEB': 'sz399005'}
INDEX_DAY_PRICE_COLS= ['date', 'open', 'high', 'close', 'low', 'volume',
'chg', '%chg', 'ma5', 'ma10', 'ma20',
'vma5', 'vma10', 'vma20']
K_TYPE_KEY = ['D', 'W', 'M']
K_TYPE_MIN_KEY = ['5', '15', '30', '60']
K_TYPE = {'D': 'akdaily', 'W': 'akweekly', 'M': 'akmonthly'}
MIN_PRICE_URL = '%sapi.finance.%s/akmin?scode=%s&type=%s'
PAGE_TYPE = {'http': 'http://', 'ftp': 'ftp://'}
PAGE_DOMAIN = {'sina': 'sina.com.cn', 'ifeng': 'ifeng.com'}
URL_ERROR_MSG = '获取失败,请检查网络状态,或者API端口URL已经不匹配!'
get_hist_data.py
# -*- coding: utf-8 -*-
"""
Created on Thu Jul 23 09:15:40 2015
@author: jet
"""
import const as ct
import pandas as pd
import json
from urllib2 import urlopen,Request
def get_hist_data(code = None, start = None, end = None, ktype = 'D'):
"""
功能:
获取个股历史交易数据
--------
输入:
--------
code:string
股票代码 比如:601989
start:string
开始日期 格式:YYYY-MM-DD 为空时取到API所提供的最早日期数据
end:string
结束日期 格式:YYYY-MM-DD 为空时取到最近一个交易日数据
ktype:string(default=D, 函数内部自动统一为大写)
数据类型 D=日K线,W=周K线,M=月K线,5=5分钟,15=15分钟
30=30分钟,60=60分钟
输出:
--------
DataFrame
date 日期
open 开盘价
high 最高价
close 收盘价
low 最低价
chg 涨跌额
p_chg 涨跌幅
ma5 5日均价
ma10 10日均价
ma20 20日均价
vma5 5日均量
vma10 10日均量
vma20 20日均量
turnover换手率(指数无此项)
"""
code = code_to_APIcode(code.upper())
ktype = ktype.upper()
url = ''
url = get_url(ktype, code)
print(url)
js = json.loads(ping_API(url))
cols = []
if len(js['record'][0]) == 14:
cols = ct.INDEX_DAY_PRICE_COLS
else:
cols = ct.DAY_PRICE_COLS
df = pd.DataFrame(js['record'], columns=cols)
if ktype in ct.K_TYPE_KEY:
df = df.applymap(lambda x:x.replace(u',', u''))
for col in cols[1:]:
df[col]=df[col].astype(float)
if start is not None:
df = df [df.date >= start]
if end is not None:
df = df[df.date <= end]
df = df.set_index('date')
return df
def code_to_APIcode(code):
"""
功能:
验证输入的股票代码是否正确,若正确则返回API对应使用的股票代码
"""
print(code)
if code in ct.INDEX_KEY:
return ct.INDEX_LIST[code]
else:
if len(code) != 6:
raise IOError('code input error!')
else:
return 'sh%s'%code if code[:1] in ['5', '6'] else 'sz%s'%code
def get_url(ktype, code):
"""
功能:
验证输入的K线类型是否正确,若正确则返回url
"""
if ktype in ct.K_TYPE_KEY:
url = ct.DAY_PRICE_URL % (ct.PAGE_TYPE['http'], ct.PAGE_DOMAIN['ifeng'],
ct.K_TYPE[ktype], code)
return url
elif ktype in ct.K_TYPE_MIN_KEY:
url = ct.MIN_PRICE_URL % (ct.PAGE_TYPE['http'], ct.PAGE_DOMAIN['ifeng'],
code, ktype)
return url
else:
raise IOError('ktype input error!')
def ping_API(url):
"""
功能:
向API发送数据请求,若链接正常返回数据
"""
text = ''
try:
req = Request(url)
text = urlopen(req,timeout=10).read()
if len(text) < 15:
raise IOError('no data!')
except Exception as e:
print(e)
else:
return text
#测试入口
print(get_hist_data('601989','2015-07-11','2015-07-22'))
⑷ 怎样循环取完所有通过WebService拿到的数据
应该是一次性accept所有的数据到内存,然后循环就可以了。这个没啥难度。
⑸ 怎样利用webservice读取数据库数据到另一个数据库
可以在数据库用作业完成
如果用webservice就是定时的执行一个方法
这个方法里面包含了你要执行的SQL语句
⑹ 如何优化WebService进行大批量数据传送
1.将DataSet设置为用于远程传送的精简二进制模式
2.用压缩程序对数据进行压缩(此处使用微软提供的ICSharpCode.SharpZipLib.dll)
3.使用WSE3.0的MTOM技术优化SOAP.
WSE3.0配置:
安装完WSE3.0后,你会发现安装目录下会有一个WebService3.dll,要将其引入到WebService项目中(不能像VS2005中可以直接创建一个WSE3.0的项目),然后要配置Web.config,置于具体的配置写法可以用Wse3.0安装目录下的WseConfigEditor3.exe进行配置,例如要开通MTOM,则先在General页中勾选Enable this project for Web Service Enhancements,再在Messaging页中Client Mode选择on 然后关闭程序,会提示生成配置文件,打开文件,将相关项目填回Web.config中就可以使用了.
⑺ 如何将webservice中的record记录转换为excel
直接从我的项目里提取代码,有一部分涉及机密,隐藏掉。
涂黑的部分就是你需要转换的路径,祝你好运。