使用 Yahoo 隱藏版 API 查詢股市資料

以往 Google Finance 和 Yahoo Finance 都有提供股市資訊的 API,不過現在都已經停用了。前陣子找到了一個免費的美股API MarkitOnDemand,這個 API 提供的資料算是齊全,不過資料有點問題(我發現某些個股的收盤價不對),看 GitHub 上有人回報的 issue 也都沒解決,應該是已經不維護了。

YQL

Yahoo Finance 官方 API 雖然已經停用,目前仍可透過 YQL 查詢。YQL 是 Yahoo 提供的一個 服務,讓開發者透過類似 SQL 的指令,就能透過 API 查詢資料。Yahoo 提供 YQL Console 的介面,可以線上使用 YQL 查詢資料。

因為 Yahoo Finance API 目前是由社群 datatables.org 維護的,所以進入 YQL Console 之後,要勾選左上方的「Show Community Tables」,才能在左下方的清單找到 yahoo.finance.*。

YQL 語法和 SQL 極為類似,例如下圖,yahoo.finance.quote 是 Table Name,將要查詢的個股代碼以 where 方式作篩選,查詢結果會以 XML 或 JSON 格式輸出。

YQL Console 下方會產生 REST 的 URL 字串,不過直接執行會有錯誤。REST URL 請改用下方的格式
http://query.yahooapis.com/v1/public/yql?format={Format}&env=store://datatables.org/alltableswithkeys&q={YQL}

以下是幾個範例:
查詢個股
http://query.yahooapis.com/v1/public/yql?format=json&env=store://datatables.org/alltableswithkeys&q=select * from yahoo.finance.quote where symbol in ('GOOG','APPL')

註:此非即時股價,有十五分鐘的延遲時間

查詢個股歷史股價
http://query.yahooapis.com/v1/public/yql?format=json&env=store://datatables.org/alltableswithkeys&q=select * from yahoo.finance.historicaldata where symbol = 'GOOG' and startDate = '2016-03-01' and endDate = '2016-03-12'

但 YQL 輸出的 JSON 格式有點醜,在 JSON Parse 上要花點時間。

Yahoo 沒有提供 YQL API 的任何文件,唯一的文件由社群放在 GitHub,但已經多年未更新。 Yahoo 看似已經不再維護  YQL,未來會不會像 Yahoo Pipes 一樣收起來,就不得而知了,Yahoo 目前的經營狀況實在令人擔心啊。

隱藏版 Finance API:iChart

YQL 的 API 雖然沒有文件,但還算堪用。其實我在找資料的過程中,意外發現了一個  Yahoo 隱藏版的 Finance API:Yahoo iChart API。從命名猜測,這個 API 應該是提供歷史資料來畫趨勢圖用的。

範例如下:
http://ichart.finance.yahoo.com/table.csv?g=d&f=2014&e=12&c=2014&b=10&a=7&d=7&s=AAPL

輸出是 CSV 格式
以下文章有列出 iChart 的 Query String 查詢變數
Yahoo Finance (hidden) API

另一個更強大的隱藏版 API,可以查詢每天每小時的歷史股價。
其格式如下:
http://chartapi.finance.yahoo.com/instrument/1.0/{Symbol}/chartdata;type=quote;range={range}/{format}

範例如下:
Google 近一年每天的歷史股價
http://chartapi.finance.yahoo.com/instrument/1.0/GOOG/chartdata;type=quote;range=1y/csv
Google 近一個月每天的歷史股價
http://chartapi.finance.yahoo.com/instrument/1.0/GOOG/chartdata;type=quote;range=1y/csv
Google 最近日期的每小時歷史股價
http://chartapi.finance.yahoo.com/instrument/1.0/GOOG/chartdata;type=quote;range=1d/csv

  • 資料區間(range)改成 5d,可查詢五天內每小時股價,改成 3m,可查詢近三個月內每天的股價。
  • 資料格式(format),有 CSV、JSON、XML三種輸出格式。

最後,以上這些 API,除可查詢美股之外,將股市代碼改為「台股代碼.TW」(例如台積電是2330.TW),就能查詢台股資料,實在是太強大了!







分類:

Copyright © Andy Cheng

Distributed By My Blogger Themes | Blogger Theme By NewBloggerThemes Up ↑