Numbersで株価情報一覧を自動取得する

2022-05-07

 昔から株価の情報を取得する方法を探していましたが、Webのスクレイピングをしたり難易度が高かったのでやめていました。 しかし、Numbersでは関数から自動取得できるということでApple Scriptで株価を自動取得するマクロを書きました。

  1. まずは以下のサイトから東証の一覧を取得します。
    その他統計資料 | 日本取引所グループ
  2. その後「StockList.numbers」を新規作成して、A列にすべてのコードを貼り付けます。
  3. 以下を記載したAppleScriptを起動します。
property FIRST_ROW : 2
property LAST_ROW : 4089
property STOCK_PRICE : 0
property STOCK_NAME : 1
property STOCK_CHANGE : 2
property STOCK_PERCENT_CHANGE : 3
property STOCK_OPEN : 4
property STOCK_HIGH : 5
property STOCK_LOW : 6
property STOCK_MARKET_CAP : 7
property STOCK_VOLUME : 8
property STOCK_YIELD : 9
property STOCK_ONE_YEAR_TARGET : 10
property STOCK_FIFTY_TWO_WEEK_HIGH : 11
property STOCK_FIFTY_TWO_WEEK_LOW : 12
property STOCK_AVE_THREE_MONTH_VOLUME : 15
property STOCK_BETA : 16
property STOCK_CURRENCY : 19
property STOCK_ANNUAL_DIVIDEND : 20
property STOCK_EPS : 21
property STOCK_EXCHANGE : 22
property STOCK_PE_RATIO : 23
property STOCK_PREVIOUS_CLOSE : 24
property STOCK_SYMBOL : 25

set homePath to "Existing Numbers Folder Path"
set formulaList to {STOCK_PRICE, STOCK_NAME, STOCK_CHANGE, STOCK_PERCENT_CHANGE, ¬
    STOCK_OPEN, STOCK_HIGH, STOCK_LOW, STOCK_MARKET_CAP, STOCK_VOLUME, STOCK_YIELD, ¬
    STOCK_ONE_YEAR_TARGET, STOCK_FIFTY_TWO_WEEK_HIGH, STOCK_FIFTY_TWO_WEEK_LOW, ¬
    STOCK_AVE_THREE_MONTH_VOLUME, STOCK_BETA, STOCK_CURRENCY, STOCK_ANNUAL_DIVIDEND, ¬
    STOCK_EPS, STOCK_EXCHANGE, STOCK_PE_RATIO, STOCK_PREVIOUS_CLOSE, STOCK_SYMBOL}

--Open Number
tell application "Finder"
    activate
    open document file (homePath & "StockList.numbers" as POSIX file)
    delay 2
end tell

tell application "Numbers"
    set cnt to 1
    repeat with i in formulaList
        repeat with j from FIRST_ROW to LAST_ROW
            tell table 1 of sheet 1 of document 1
                set colChar to ASCII character (65 + cnt)
                set value of cell (colChar & j) to "=STOCK($A" & j & " & \".T\"," & i & ")"

                repeat while value of cell (colChar & j) = " … "
                end repeat

                --Delete function
                set value of cell (colChar & j) to value of cell (colChar & j)
            end tell
        end repeat
        set cnt to cnt + 1
    end repeat
end tell

--Sleep PC
tell application "System Events"
    sleep
end tell
  • 処理に時間がかかるので終了後はPCをスリープするようにしています
  • Yahoo!側でアクセスを制限しているのか途中から処理速度がかなり低下します。
  • Numbersに大量に関数を書くと処理速度が落ちるので関数を削除しています。
  • LAST_ROWは行数に合わせて変更してください。

AppleScriptは他の言語と書き方がかなり違うので、雰囲気を掴むのに苦労しました。
処理時間が長くておそらく今は使い物になりませんが、いずれは処理速度が上がって誰でも自由に株式の情報が 取得できることを期待しましょう。