Day 25:专案06 - 股市趋势图02 | 整年股市资料、Postman

复习一下昨天的进度 - 我们取得单月的个股日成交价的资料,并在电脑中储存成csv档。

目前都只有单月的个股日成交价,但如果想要一整年的个股日成交价时,该怎麽办呢?

可惜的是,台湾证券交易所并没有提供一整年的个股日成交价API,不过没关系,既然没有一整年的,我们自己将某一年1月到12月的资料合并起来不就是一整年了吗?

第一步就来观察API的参数,不过在那之前,我先推荐一个测试API时很方便的工具 - Postman

Postman

Postman是一套专门在测试API的软件,输入API的URL和参数後送出,就会回传API的资料回来,并帮你整理成比较好看的样子,除了GET之外,也有POST等其他方法可以使用,堪称测试API的神器!

Postman目前有网页版电脑版,偶尔测试的话网页版就够用了,但如果想要更进阶的功能,可能就要考虑载电脑版。我这次先用网页版做示范。

  1. 到Postman官网,注册一个新帐号。
  2. 登入後,点左上角「Workspace」,建立一个新的Workspace,如果已经有Workspace了,也可以直接进入下面的清单中的Workspace。

  1. 进入Workspace後,点「+」符号新增request。

  1. 将昨天API的网址贴上去,就会发现底下将参数都列出来了。确认参数无误,方法选择GET後按「Send」送出。

  1. 送出後底下就会出现response,选择「Pretty」可以让回传的JSON资料比较好阅读。检查资料是否正确。

  1. 要改变参数也很简单,直接改参数栏位中的值就好了。比方说,date改成20210701,再次送出後,得到的就是7月的资料了。

  1. 不管在改参数还是检视资料都胜过在VScode上操作,所以才说是测试API神器阿!
  2. 补充:更扯的功能,左边有个「</>」的符号,点击後下拉式选单选择「Python-Requests」,就帮你产生这段程序码出来了,连一点点的code都不用自己写XD

整年股市

经过测试後,我们发现月份是由「date」这个参数所决定的,因此如果想要一口气抓下从1月到12月的股市资料,程序码就长这样:

# 从1到12月
for m in range(1, 13):
    url = "https://www.twse.com.tw/exchangeReport/STOCK_DAY?response=json&date=2020{0:02d}01&stockNo=0050".format(m)
    print(url)

    # 取得股票资料json字串
    response = requests.get(url, headers=headers)
    # print(response.text)

    # 从json字串转为python的字典格式
    json_data = json.loads(response.text)
    datas = json_data["data"]
    fields = json_data["fields"]

我抓2020年一整年的股市资料。为了满足API的格式要求,我用{0:02d}搭配.format(m),作用是固定长度为2,不够补0,比方说1就会变01。

接着,将每个月的资料存成Pandas的DataFrame型态。

# 存成Pandas的Dataframe
month_df = pd.DataFrame(datas, columns=fields)

然後,将每个月的DataFrame合并成一个整年的DataFrame。ignore_index=True让合并後资料的index是连续的。

# 合并於整年的Dataframe
year_df = year_df.append(month_df, ignore_index=True)

最後只要把整年的DataFrame储存成.csv档就完成了!

# 转成csv档
year_df.to_csv("./year_stock.csv", encoding="big5")

结果:

小结

回顾一下今天教的内容,首先介绍了测试API的神器 - Postman,以及简单的操作教学,再来利用Postman测试股市API,找出参数上的规律,最後利用这个规律一口气把整年的股市资料给抓下来。

明天就是这个专案的最後一天,将利用这两天得到的资料绘制成趋势图! 大家千万别错过明天的内容哦!??


如果喜欢这系列文章麻烦帮我按Like加订阅,你的支持是我创作最大的动力~

本系列文章以及范例程序码都同步更新在GitHub上,後续会持续的更新,如果喜欢也麻烦帮我按个星星吧~

有任何问题或建议,都欢迎在底下留言区提出,还请大家多多指教。


<<:  Domain layer implementation

>>:  Day30 ( 高级 ) 显示声波图形

ReactFiber节点的更新入口:beginWork

React的更新任务主要是调用壹个叫做workLoop的工作循环去构建workInProgress树...

第 11 天 迈向下个阶段努力( leetcode 005 )

https://leetcode.com/problems/longest-palindromic...

[Day 28]TensorBoard介绍

聊了许多TensorFlow,不能不讲到TensorBoard啦!TensorBoard是Tenso...

[前端暴龙机,Vue2.x 进化 Vue3 ] Day26. Vue3 Composition API 使用(二)

前一篇说到 该怎麽写 data 的资料,找回双向绑定机制 !!! 这边先小小的补充一下 XD 在 O...

Day15:今天来聊一下Microsoft Defender for Endpoint的威胁分析

随着敌人越来越复杂、新威胁频繁出现且越来越普遍,一定要能快速完成以下工作: -评估新威胁的影响 -检...