Google spreadsheetでGoogle Finace から株価を取得して表示
これまでは保有銘柄の株価をチェックする際に、利用してる証券会社のサービスにログインしてました。
ですが株の売買は年に10回程度で株価チェック以外はほとんど何もしないのでGoogle Spreadsheetでチェックできないか試して見たらできました。
アメリカ株についてはGoogle spreadsheetのデフォルト関数で取得できますが、日本株についてはデフォルト関数では無理のようです。
Alphabetの株価取得する場合は以下。
=googlefinance("NASDAQ:GOOG")
以下では日本株の株価を取得できるようになる手順を紹介します。
やったこと
-
株価取得元を確認
-
取得関数を作成
-
Google spredsheetのセルに作成した取得関数を使って株価を取得
参考にした記事
1. 株価取得元を確認
取得元はGoogle Financeです。
以下はとあるゲーム会社のページです。
ページ内に以下のように株価が記載されてる箇所がありますが(2022/2/26現在)、ここをスクレイピングすればよさそうです。
参考記事でも確認されてましたが、サイトがクロールを許可してるかrebots.txtで確認します。
/finance
の行が以下のようにAllow:
であればOK。2022/02/26時点ではAllowでした。
2. 取得関数を作成
取得関数をApps Script
に作成します。
Google Spreadsheetを開いて拡張機能
からApps Script
をクリックすれば作成ページが開けます。
2.1 Parserを追加
スクレイピングのためにParserライブラリを追加します。
これを使うと正規表現を使う必要がなくなるようです。
参考記事にある通りPaserライブラリのIDを入力すると使えるようになりました。
Parserの公開ページ
Parserの使い方はこちら↓が詳しいかも。
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アカウントでしたが以下の記事の通り対処しました。
3. Google spredsheetのセルに作成した取得関数を使って株価を取得
セルに=getStockPrice(9684)
と入力すると直近の株価が取得できました。
1.で見たページの株価がセルに表示されていれば成功です。
Discussion