- 取得連結
- X
- 以電子郵件傳送
- 其他應用程式
程式語言:Python
台灣證券交易所-基本市況報導
功能:股價查詢
- Package:
- requests
- time
- logging
台灣證券交易所-基本市況報導
功能:股價查詢
Alpha Vantage (美股為主)
請先申請 API Key
API 說明
股票代碼,其他國家可嘗試加上後繏,例:0050.TW,但不一定有資料
使用方法
API 說明
股票代碼,其他國家可嘗試加上後繏,例:0050.TW,但不一定有資料
使用方法
a = AlphaVantage(api_key="your key")
a.intraday('VTI', '1min')
a.daily('VTI')
a.daily_adj('VTI')
a.weekly('VTI')
a.weekly_adj('VTI')
a.monthly('VTI')
a.monthly_adj('VTI')
a.batch_quotes('VTI, VBR')
程式碼import requests
import time
import logging
class AlphaVantage:
def __init__(self, api_key):
"""
api_key: 申請網址:https://www.alphavantage.co/support/#api-key
"""
self.api_key = api_key
self.logger = logging.getLogger(self.__class__.__name__)
def _api(self, func, **params):
"""Return data
func: alphaVantage 的 API
params: API 的相關參數
"""
url = "https://www.alphavantage.co/query"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; rv:57.0) Gecko/20100101 Firefox/57.0",
}
baseParams = {"function": func,
"apikey": self.api_key,
"datatype": "json"}
params = {**baseParams, **params}
r = requests.get(url, params=params, headers=headers)
data = r.json()
if "Error Message" in data:
self.logger.debug('{} error => url: {}'.format(func, r.url))
return None
elif len(data) < 2:
self.logger.debug('{} error => url: {}'.format(func, r.url))
# AlphaVantage 有限定 1s 一次
time.sleep(1)
return self._api(func, **params)
return data
def intraday(self, symbol, interval, **params):
"""Return data
https://www.alphavantage.co/documentation/#intraday
symbol: 股票代碼,其他國家可嘗試加上後繏,例:0050.TW,但不一定有資料
interval: 間隔時間 (1min, 5min, 15min, 30min, 60min)
params: 其他相關參數
"""
return self._api("TIME_SERIES_INTRADAY", symbol=symbol, interval=interval, **params)
def daily(self, symbol, **params):
"""Return data
https://www.alphavantage.co/documentation/#daily
symbol: 股票代碼,其他國家可嘗試加上後繏,例:0050.TW,但不一定有資料
params: 其他相關參數
"""
return self._api("TIME_SERIES_DAILY", symbol=symbol, **params)
def daily_adj(self, symbol, **params):
"""Return data
https://www.alphavantage.co/documentation/#dailyadj
symbol: 股票代碼,其他國家可嘗試加上後繏,例:0050.TW,但不一定有資料
params: 其他相關參數
"""
return self._api("TIME_SERIES_DAILY_ADJUSTED", symbol=symbol, **params)
def weekly(self, symbol, **params):
"""Return data
https://www.alphavantage.co/documentation/#weekly
symbol: 股票代碼,其他國家可嘗試加上後繏,例:0050.TW,但不一定有資料
params: 其他相關參數
"""
return self._api("TIME_SERIES_WEEKLY", symbol=symbol, **params)
def weekly_adj(self, symbol, **params):
"""Return data
https://www.alphavantage.co/documentation/#weeklyadj
symbol: 股票代碼,其他國家可嘗試加上後繏,例:0050.TW,但不一定有資料
params: 其他相關參數
"""
return self._api("TIME_SERIES_WEEKLY_ADJUSTED", symbol=symbol, **params)
def monthly(self, symbol, **params):
"""Return data
https://www.alphavantage.co/documentation/#monthly
symbol: 股票代碼,其他國家可嘗試加上後繏,例:0050.TW,但不一定有資料
params: 其他相關參數
"""
return self._api("TIME_SERIES_MONTHLY", symbol=symbol, **params)
def monthly_adj(self, symbol, **params):
"""Return data
https://www.alphavantage.co/documentation/#monthlyadj
symbol: 股票代碼,其他國家可嘗試加上後繏,例:0050.TW,但不一定有資料
params: 其他相關參數
"""
return self._api("TIME_SERIES_MONTHLY_ADJUSTED", symbol=symbol, **params)
def batch_quotes(self, symbols, **params):
"""Return data
https://www.alphavantage.co/documentation/#batchquotes
symbols: 所有股票的代碼,只支援美股
params: 其他相關參數
"""
return self._api("BATCH_STOCK_QUOTES", symbols=symbols, **params)
台灣證券交易所 (台股)
symbol: 股票代碼,上市後繏 .TW,上櫃後繏 .TWO
使用方法
使用方法
t = TWSE()
t.real_time('0050.TW')
t.real_time('1258.TWO')
程式碼import requests
import time
import logging
class TWSE:
def __init__(self):
self.logger = logging.getLogger(self.__class__.__name__)
self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; rv:57.0) Gecko/20100101 Firefox/57.0",
"Connection": "keep-alive",
}
url = 'http://mis.twse.com.tw/stock/fibest.jsp'
r = requests.get(url, headers=self.headers)
self.cookies = r.cookies
def _rename(self, symbol):
"""Return quote symbol name
symbol 命名規則 上市或上櫃_股票代號.Channel,例:tse_0050.tw
上市/上櫃,tse/otc
"""
symbol = symbol.upper()
try:
symbol, kind = symbol.split(".", 1)
if kind == "TWO":
return "otc_{}.tw".format(symbol)
except ValueError:
pass
return "tse_{}.tw".format(symbol)
def real_time(self, symbol):
"""Return real-time price
https://github.com/Asoul/tsrtc
symbol: 股票代碼,上市後繏 .TW,上櫃後繏 .TWO
"""
symbol = self._rename(symbol)
url = "http://mis.twse.com.tw/stock/api/getStockInfo.jsp"
millis = int(round(time.time() * 1000))
params = {"ex_ch": symbol,
"_": millis,
"json": 1,
"delay": 0,
}
r = requests.get(url, params=params, headers=self.headers, cookies=self.cookies)
data = r.json()
return data['msgArray']
留言
張貼留言