TEJ REST API 使用手册

图片
photo by Unsplash

前言

TEJ官方本身有为Python、R的使用者开发专属的套件,以便使用API来捞取资料。(Python api的说明文件)而为了让其他程式的编程者,同样能透过API来捞取资料,官网上也有REST API的说明文件

REST API 的使用原理类似于网路爬虫,是透过get一串网址来连接TEJ的资料库。本篇将会以白话文的形式带领大家了解REST API 的使用方式

本文重点概要

  • API KEY申请/购买
  • 使用说明
  • 进阶参数设定

API KEY申请/购买

在正式使用我们API之前,如果尚未有API KEY,可以透过连结当中的申请试用或是EShop当中的产品包进行获得,如下图:

申请试用API KEY流程

TEJ E-Shop 介面使用说明 

汇入套件

import requests
import pandas as pd
import json

输入api_key

# 输入 api_key
api_key = 'your key'
url = 'https://api.tej.com.tw/api/datatables/TWN/APRCD.json?api_key='+api_key

Get 网址的资讯

rq = requests.get(url)
rq.content
网址的资讯

资料整理 (json ➡️ Dataframe)

经过整理后的资料是不是变得整齐多了阿 ~

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
Dataframe

进阶参数设定

进一步解析我们刚刚捞取的网址可以发现,网址的组成架构是有脉络可循的!网址前面的部分是指定连结到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']
撷取 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)。

参数设定:

  • mdate.gte= start: 日期>=2020–01–01
  • mdate.lte = end: 日期<=2020–12–31
# 日期筛选
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 匹配类别

  • TABLE_MATCH:关键字在表格名称或说明中
  • COLUMN_MATCH:关键字在栏位名称或说明中
  • TABLE_MATCH & COLUMN_MATCH:关键字在表格及栏位名称或说明中
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 权限查询

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庞大的资料库进行更为便捷的捞取噢~

完整程式码

延伸阅读

再次附上相关网站连结

有任何使用上的问题都欢迎与我们联系:联络资讯

返回总览页