📈

Google spreadsheetでGoogle Finace から株価を取得して表示

2022/02/26に公開

これまでは保有銘柄の株価をチェックする際に、利用してる証券会社のサービスにログインしてました。
ですが株の売買は年に10回程度で株価チェック以外はほとんど何もしないのでGoogle Spreadsheetでチェックできないか試して見たらできました。

アメリカ株についてはGoogle spreadsheetのデフォルト関数で取得できますが、日本株についてはデフォルト関数では無理のようです。
Alphabetの株価取得する場合は以下。
=googlefinance("NASDAQ:GOOG")

以下では日本株の株価を取得できるようになる手順を紹介します。

やったこと

  1. 株価取得元を確認

  2. 取得関数を作成

  3. Google spredsheetのセルに作成した取得関数を使って株価を取得

参考にした記事
https://auto-worker.com/blog/?p=3854

1. 株価取得元を確認

取得元はGoogle Financeです。
以下はとあるゲーム会社のページです。
https://www.google.com/finance/quote/9684:TYO

ページ内に以下のように株価が記載されてる箇所がありますが(2022/2/26現在)、ここをスクレイピングすればよさそうです。

参考記事でも確認されてましたが、サイトがクロールを許可してるかrebots.txtで確認します。
https://www.google.com/robots.txt

/finance の行が以下のようにAllow:であればOK。2022/02/26時点ではAllowでした。

2. 取得関数を作成

取得関数をApps Scriptに作成します。
Google Spreadsheetを開いて拡張機能からApps Scriptをクリックすれば作成ページが開けます。

2.1 Parserを追加

スクレイピングのためにParserライブラリを追加します。
これを使うと正規表現を使う必要がなくなるようです。
参考記事にある通りPaserライブラリのIDを入力すると使えるようになりました。

Parserの公開ページ

https://script.google.com/home/projects/1Mc8BthYthXx6CoIz90-JiSzSafVnT6U3t0z_W3hLTAX5ek4w0G_EIrNw/edit

Parserの使い方はこちら↓が詳しいかも。
https://specially198.com/scraping-with-gas-using-parser-library/

2.2 取得関数を作成

コード.gsに関数を追加します。(よく調べてませんがjsっぽい)
追加するコードはこちら。参考記事のものから引数に証券コードを渡すように修正してます。

function getStockPrice(code) {
  //GoogleファイナンスURLと銘柄コードを組み合わせ、スクレイピング先URLを定義
  let url = 'https://www.google.com/finance/quote/' + code + ':TYO';
  //スクレイピング先URLに対し、フェッチしてHTMLソースを取得
  let html = UrlFetchApp.fetch(url).getContentText();
  //HTMLソースから株価部分を抽出し、変数に格納
  let stockPrice = Parser.data(html)
    .from('<div class="YMlKec fxKbKc">')
    .to('</div>')
    .build();
  //実行ログにスクレイピングで取得した株価を表示
  console.log('株価:'+stockPrice);
  return stockPrice;
}

2.3 スクリプト実行を承認する

スクリプトを実行する際に承認が要求されることがあるようです。
私の場合はfreeのgoogleアカウントでしたが以下の記事の通り対処しました。
https://tonari-it.com/gas-script-approval/#toc10

3. Google spredsheetのセルに作成した取得関数を使って株価を取得

セルに=getStockPrice(9684)と入力すると直近の株価が取得できました。
1.で見たページの株価がセルに表示されていれば成功です。

Discussion