- 取得連結
- 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']
留言
張貼留言