目录
TEJ官方本身有为Python、R的使用者开发专属的套件,以便使用API来捞取资料。(Python api的说明文件)而为了让其他程式的编程者,同样能透过API来捞取资料,官网上也有REST API的说明文件。
REST API 的使用原理类似于网路爬虫,是透过get一串网址来连接TEJ的资料库。本篇将会以白话文的形式带领大家了解REST API 的使用方式
在正式使用我们API之前,如果尚未有API KEY,可以透过连结当中的申请试用或是EShop当中的产品包进行获得,如下图:
import requests import pandas as pd import json
# 输入 api_key api_key = 'your key' url = 'https://api.tej.com.tw/api/datatables/TWN/APRCD.json?api_key='+api_key
rq = requests.get(url) rq.content
经过整理后的资料是不是变得整齐多了阿 ~
data = json.loads(rq.content)['datatable']['data'] columns = pd.DataFrame(json.loads(rq.content)['datatable']['columns'])['cname'].to_list() stock_price = pd.DataFrame(data,columns=columns) stock_price
进一步解析我们刚刚捞取的网址可以发现,网址的组成架构是有脉络可循的!网址前面的部分是指定连结到TEJ API的资料库,后面粗体字的部分则开始根据我们指定的资料库名称、资料表名称、输出格式和自定义的一些条件,进行连接。
TWN
:台湾地区的资料库。APRCD
:股价资料表。json
:资料输出格式。api_key
:钥匙(可以想成是登入FB、google时需要的密码)。
https://api.tej.com.tw/api/datatables/{datatable_code}/{table_code}.{format}?<row_filter_criteria>
https://api.tej.com.tw/api/datatables/TWN/APRCD.json?api_key=<YOURAPIKEY>
⚠️ 出现两个参数以上都要在参数前面加 &,如&coid和&api_key⚠️
个股
以台湾加权指数(代号:Y9999)为例。
coid = 'Y9999' url = 'https://api.tej.com.tw/api/datatables/TWN/APRCD.json?'+'&coid='+coid+'&api_key='+api_key rq = requests.get(url) data = json.loads(rq.content)['datatable']['data'] columns = pd.DataFrame(json.loads(rq.content)['datatable']['columns'])['cname'].to_list() stock_price = pd.DataFrame(data,columns=columns) stock_price
多股
以台湾加权指数(代号:Y9999)、台积电(代号:2330)、联发科(代号:2454)、阳明(代号:2609)为例。
coid = 'Y9999,2330,2454,2609' url = 'https://api.tej.com.tw/api/datatables/TWN/APRCD.json?'+'&coid='+coid+'&api_key='+api_key rq = requests.get(url) data = json.loads(rq.content)['datatable']['data'] columns = pd.DataFrame(json.loads(rq.content)['datatable']['columns'])['cname'].to_list() stock_price = pd.DataFrame(data,columns=columns) stock_price
魔鬼藏在细节里
在多股的范例中,宣告 coid 为四档股票代码所组成的字串,若以个股的资料笔数(5,300)来推算,四档个股至少会有20,000笔以上的资料,为何只有抓到10,000笔资料?
TEJ为维持主机运行的稳定,单次取得资料限制最多10,000笔,而我们可以透过撷取 next_cursor_id 的资讯,并用参数opts.cursor_id = next_cursor_id 来取得后面的资料。
next_cursor_id
rq.json()['meta']['next_cursor_id']
依照上面的逻辑,当资料有30,000笔时,就会有3个 next_cursor_id,也就是每10,000笔资料就会有一个 next_cursor_id,这时就轮到 while 回圈出场了 ❗️
解决多个next_cursor_id
小编这边已经帮各位整理好了,只要先运行下面的函数,再运行下方的程式码,就可以轻松的一次捞取多股
# 多股 coid = 'Y9999,2330,2454,2609'
stock_price = tej_get_data( db_code='TWN/APRCD', api_key=api_key, coid = coid)
stock_price
以台湾加权指数(代号:Y9999)为例。
单一栏位
新增参数&opts.columns=open_d,指定columns 为开盘价
# 单一栏位 coid = 'Y9999' url = 'https://api.tej.com.tw/api/datatables/TWN/APRCD.json?&opts.columns=open_d'+'&api_key='+api_key+'&coid='+coid rq = requests.get(url) data = rq.json()['datatable']['data'] columns = pd.DataFrame(rq.json()['datatable']['columns'])['cname'].to_list() stock_price = pd.DataFrame(data,columns=columns) stock_price
多栏位
栏位:股票代码、日期、开盘价、最高价、最低价、收盘价。
# 多栏位 coid = 'Y9999' columns = 'coid,mdate,open_d,high_d,low_d,close_d' url = 'https://api.tej.com.tw/api/datatables/TWN/APRCD.json?'+'&opts.columns='+columns+'&api_key='+api_key+'&coid='+coid rq = requests.get(url) data = rq.json()['datatable']['data'] columns = pd.DataFrame(rq.json()['datatable']['columns'])['cname'].to_list() stock_price = pd.DataFrame(data,columns=columns) stock_price
以台湾加权指数(代号:Y9999)为例。
起始日期设定为 2020–01–01(start),结束日期为 2020–12–31(end)。
参数设定:
# 日期筛选 coid = 'Y9999' start = '2020-01-01' end = '2020-12-31' url = 'https://api.tej.com.tw/api/datatables/TWN/APRCD.json?'+'&mdate.gte='+start+'&mdate.lte='+end+'&api_key='+api_key+'&coid='+coid rq = requests.get(url) data = rq.json()['datatable']['data'] columns = pd.DataFrame(rq.json()['datatable']['columns'])['cname'].to_list() stock_price = pd.DataFrame(data,columns=columns) stock_price
以上市(柜)未调整股价(日)(TWN/APRCD)为例,运行下方的程式码便可获得栏位代号及中文栏位名称等资讯。
datatable_code = 'TWN/APRCD' url = 'https://api.tej.com.tw/api/datatables/'+datatable_code+'/metadata?api_key='+api_key rq = requests.get(url) rq.json()
搜寻每股盈余,会出现相当多变数,可参考TEJ API 官网
matchType 匹配类别
key_word = '每股盈余' url = 'https://api.tej.com.tw/api/search/table/'+key_word+'?api_key='+api_key rq = requests.get(url) rq.json()
api_key = 'your key' url = 'https://api.tej.com.tw/api/apiKeyInfo/'+api_key rq = requests.get(url) rq.json()
今天的内容是让大家对于我们TEJ Rest API有深入的认知以及了解,透过实际的程式码执行可以了解TEJ Rest API的使用逻辑之外,也可以让大家透过这些功能对TEJ庞大的资料库进行更为便捷的捞取噢~
有任何使用上的问题都欢迎与我们联系:联络资讯