股票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
直接從我的項目里提取代碼,有一部分涉及機密,隱藏掉。
塗黑的部分就是你需要轉換的路徑,祝你好運。